>Hi All,
>
>I have to use Sendmessage Winapi and receive message from opposite application. I found this code from internet:
>
>
>
>
>Declare Long FindWindowA In Win32API String cNULL, String cWinName
>DECLARE LONG SendMessage IN user32 AS WinAPI_SendMessage ;
> LONG,;
> LONG,;
> LONG,;
> STRING @
>sTitle = "kl_ecrsunucu"
>iHwnd = FindWindowA(0, sTitle)
>#DEFINE WM_COPYDATA 0x004A
>* _vfp.hWnd
>xstr="qqq"
>lnRetVal = WinAPI_SendMessage(ihWnd, WM_COPYDATA, this.HWnd , @xstr)
>WAIT WINDOW lnretval
>
>
>opposite application look for kl_ecrclient caption at my form. What I should do for receive message after change my forms caption? How can I read message from opposite?
Metin,
If you use COPYDATA, then
the string ( xstr ) must respect the format - length is 12 bytes
typedef struct tagCOPYDATASTRUCT {
ULONG_PTR dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT, *PCOPYDATASTRUCT;
dwData : see above
cbData: see above
lpData: since this is a pointer to the data (ie the address, you have to allocate this space with an api - eg HeapAlloc(). Do not forget to free the buffer on exit : HeapFree)
Sending:
You can copy data to the allocated lpdata buffer with sys(2600)
Receive:
function ReceiveDetailMessage(hwnd, msg, wparam, lparam)
local dwdata, cbdata , lpData, s
dwdata = ctobin(Sys(2600, m.lparam+0, 4), '4rs')
cbdata = ctobin(Sys(2600, m.lparam+4, 4), '4rs')
lpData = ctobin(Sys(2600, m.lparam+8, 4), '4rs')
s= sys(2600, m.lpData, m.cbdata )
Gregory