Windows程序和消息机制(二):消息有关的函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tutucoo/article/details/84503375

不同窗口程序可以通过消息进行交互,主要用到的函数如下:

FindWindow

获取一个窗口的句柄。

HWND FindWindow( LPCTSTR lpClassName,// 类名 LPCTSTR lpWindowName// 窗口名 );

通过在参数中传递一个类名或者窗口名就可以返回一个窗口的句柄,类名可以通过spy++获取,窗口名是指窗口的标题。

SendMessage

发送一个不进队消息

LRESULT SendMessage( HWND hWnd,// 窗口句柄 UINT Msg,// 消息类型 WPARAM wParam,// 附加参数 LPARAM lParam// 附加参数 )

一般情况下,FindWindow调用完以后获取到窗口的句柄,然后会调用这个函数进行发送消息。

Msg用来传递消息类型,一般使用以下几种:

WM_CLOSE:关闭窗口

WM_SETTEXT:对窗口文本进行设置

WM_GETTEXT:获取窗口文本

WM_MOUSEMOVE:移动鼠标

WM_LBUTTONDOWN:按下鼠标左键

PostMessage

一般来说,发消息用SendMessage就可以了,但是如果要发送键盘消息最好使用PostMessage,因为用SendMessage不太可能发送成功。

BOOL PostMessage( HWND hWnd,// 窗口句柄 UINT Msg,// 消息类型 WPARAM wParam,// 按键类型 LPARAM lParam,// 时间 )

消息类型主要有以下两种:

WM_KEYUP:按键抬起

WM_KEYDOWN:按键按下

按键类型有很多种,比如说:

VK_F5:F5键

举个应用的例子:

PostMessage(hWnd,WM_KEYDOWN,VK_F5,1); PostMessage(hWnd,WM_KEYUP,VK_F5,1);

keybd_event

VOID keybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo );

为了方便模拟发送键盘消息,系统提供了这个函数,这个函数不需要提供窗口句柄,默认会向当前激活的窗口发消息,因此需要向指定的窗口发消息需要先将窗口激活,发一小段代码就明白这个函数的使用方法了。

m_hWnd = FindWindow(NULL,"test"); setForegroundWindow(m_hWnd);//激活窗口 keybd_event(VK_F5,0,0,0)

mouse_event

发送鼠标消息

VOID mouse_event( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData )

举个简单的例子:

m_hWnd = FindWindow(NULL,"test"); 
SetForegroundWindow(m_hWnd); 
POINT pt = {0}; 
ClientToScreen(m_hWnd,&pt); 
SetCursorPos(pt.x + 36,pt.y + 395); 
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); 
Sleep(1000); 
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);

猜你喜欢

转载自blog.csdn.net/tutucoo/article/details/84503375
今日推荐