利用FindWindow和SendMessage,特此记下。
首先说FindWindow。
FindWindow返回与指定字符创相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。函数原型为:
C++:
HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName );
lpClassName就是窗口类名,大多数情况不会用到它。lpWindowName是窗口名,就是窗口标题,任何一个窗口都有标题,当然也会有相同标题的,那只会找到在z-order最上层的窗口。
再看SendMessage,稍微复杂一点,它是通信的主力军。
SendMessage将指定的消息发送到一个或多个窗口。函数原型为:
C++:
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
hWnd是接收消息的窗口的句柄。Msg是将被发送的消息。wParam和IParam都是指定附加的消息信息。
这里仅仅介绍怎样利用它们实现进程通信,其实都还有很多功能,不再详述。
要用SendMessage需要知道窗口句柄,这个当然是通过FindWindow,还需要知道是什么消息,在这里用的是0x004A,一般变量命名为WM_COPYDATA,还有就是所要发送的消息信息了,就是具体内容,就需要一个特定的结构COPYDATASTRUCT,原型为:
C++:
struct COPYDATASTRUCT {ULONG_PTR dwData;DWORD cbData;PVOID lpData;}
好了这样就可以发送消息到另一个窗口上,代码如下:
C++:
Code
void SendFormMessage(LPCTSTR formText, PVOID msg)
{
HWND hwnd=FindWindow(NULL,formText);
if(hwnd!=0)
{
COPYDATASTRUCT cd;
cd.dwData = 100;
cd.cbData = 100;
cd.lpData = msg;
SendMessage(hwnd, WM_COPYDATA, 0, (LPARAM)(&cd));
}
}
发送完了,那接收窗口就要接收了,怎样接收呢,也很简单还是根据消息0x004A来获得。代码如下:
C++:
Code
LONG WINAPI AppWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)//重载窗口消息
{
COPYDATASTRUCT* pCopyDataStruct;
char buf[];
switch(msg)
{
case WM_COPYDATA:
{
pCopyDataStruct = (COPYDATASTRUCT*)lParam;
memset(&buf, 0, sizeof(buf));
memcpy(&buf,pCopyDataStruct->lpData,pCopyDataStruct->cbData);
if (0 == strcmp(buf,""))//在这里判断就可以了
{}
}
break;
}
return (LONG) DefWindowProc(hwnd,msg,wParam,lParam);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)