C语言啥函数能发送鼠标移消息?postmessage能吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言啥函数能发送鼠标移消息?postmessage能吗相关的知识,希望对你有一定的参考价值。
如何使用?
参考技术A 可以B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
关于后两个类型:
typedef UINT WPARAM;
typedef LONG LPARAM;
都是4字节
hWnd--要发给的程序句柄
Msg:
Msg=WM_MOUSEMOVE..鼠标移动事件
wParam:
MK_CONTROL ctrl键按下.
MK_LBUTTON 鼠标左键键按下.
MK_MBUTTON 鼠标中间键按下.
MK_RBUTTON 鼠标右键按下.
MK_SHIFT shift键按下.
lParam--高位当前鼠标y坐标,低位当前鼠标x坐标
比如给句柄为hWnd的程序队列发送一个鼠标移动信息,同时鼠标左键和中间处于按下状态,鼠标坐标为(120,100)
PostMessage(hWnd, WM_MOUSEMOVE ,MK_LBUTTON|MK_MBUTTON,(16<<100)|120);
如果是要发送数据,然后你在程序端自己处理的话,推荐用sendmessage函数,因为PostMessage只是把消息发送到程序的消息队列去,程序自动处理.就是说,如果接收消息的程序是你自己写,用sendmessage就可以,如果是别人写的程序,你要仿真一个事件给那个程序,那么就用PostMessage
如果用
SendMessage(Hwnd, WM_MOUSEMOVE , x, y);
其中
x:wParam,取值范围
MK_CONTROL Set if the ctrl key is down.
MK_LBUTTON Set if the left mouse button is down.
MK_MBUTTON Set if the middle mouse button is down.
MK_RBUTTON Set if the right mouse button is down.
MK_SHIFT Set if the shift key is down.
y:lParam,鼠标的坐标
xPos = LOWORD(lParam); //horizontal position of cursor
yPos = HIWORD(lParam); //vertical position of cursor
你就可以在程序里重载虚函数LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
switch(message)
case WM_MOUSEMOVE:
//写你要在鼠标移动时做的处理
break;
.....
CDialog::WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
CDialog::WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);是MFC自己的处理函数,最好加上,不然会很麻烦
很简单的SendMessage和postmessage一样使用方法
深入delphi编程理解之消息发送消息函数的一般应用实例
通过对消息函数(SendMessage、PostMessage、Perform)的一般应用,来说明sendmessage、postmessage函数和perform 方法调用方式和结果的区别。
一、程序界面
二、程序代码及注释
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure MyWMClose(var Amessage: TWMClose); message WM_CLOSE; {拦截关闭窗口消息} end; var Form1: TForm1; implementation uses CommCtrl; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(Edit1.Handle, WM_SETTEXT, 255, Integer(PChar(‘abc‘))); {发送字符ABC} // Edit1.Perform(WM_SETTEXT,255,Integer(PChar(‘abc‘))); // PostMessage(Edit1.Handle,WM_SETTEXT,255,Integer(PChar(‘abc‘))); //SendMessage(Edit1.Handle,WM_Char,Wparam(‘Q‘),1); {传递字符 } end; procedure TForm1.Button2Click(Sender: TObject);
var
MyBroadCastMsg:cardinal; begin
MyBroadCastMsg:=RegeisterWindowsMessage(‘MyBroadCastMsg‘); //向系统注册消息
SendMessage(HWND_BROADCAST,MyBroadCastMsg,0,0); //向系统广播消息。 //PostMessage(Button2.Handle, BM_SETSTYLE, BS_RADIOBUTTON, 1); //改变按钮风格 end; procedure TForm1.Button3Click(Sender: TObject); begin SendMessage(Handle, WM_CLOSE, 0, 0); {点击按钮后 ,弹出MyWMClose函数窗口,点击取消息按后才会显示“欢迎回来”窗口;}
//Form1.Perform(WM_CLOSE, 0, 0); //PostMessage(Handle, WM_CLOSE, 0, 0); {点击按钮后 ,马上显示“欢迎回来”窗口,这是三个函数执行流程区别的体现。} ShowMessage(‘欢迎回来‘); end; procedure Tform1.MyWMClose(var Amessage: TWMClose); {拦截关闭窗口消息 } begin case MessageBoxW(Handle, ‘确认关闭窗口?‘, ‘提示‘, MB_OKCANCEL + MB_ICONQUESTION) of IDOK: begin Close; end; IDCANCEL: begin end; end; end; end.
分析:PostMessage函数与SendMessage函数和Perform方法主要区别在执行流程上的区别,PostMessage函数就象甩手雷,只管甩,不管是不是哑弹,可以连续甩。而SendMessage函数和Perform不仅要甩,而且要等到手雷爆炸后才能甩下一个。
以上是关于C语言啥函数能发送鼠标移消息?postmessage能吗的主要内容,如果未能解决你的问题,请参考以下文章
用PostMessage函数向窗体发送鼠标单击消息,单击的X坐标=100 ,y坐标=200.该窗体的句柄为hand。代码怎么写
猎豹MFC--发送消息SendMessage PostMessage