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。代码怎么写

VC++/MFC中用PostMessage发送鼠标点击事件

猎豹MFC--发送消息SendMessage PostMessage

VC++/MFC中用PostMessage发送鼠标点击事件

VC6.0我用PostMessage向某窗口发送按键消息循环 但每次按键的时候都有咚咚的声音怎么能去掉呢

sendmessage与postmessage有啥区别