delphi中有模拟发送鼠标按键sendmessage的疑问

在delphi中有一个模拟发送鼠标按键的功能,比如:
sendmessage(hookHwnd,messages.WM_LBUTTONDOWN ,0,$007B024B);// 按下鼠标左键
sendmessage(hookHwnd,messages.WM_LBUTTONUP ,0, $007B024B); //抬起鼠标左键
因为我的鼠标坐标是随机产生的,$007B024B这个数值不固定,我就想使用下面这方式来动态获取$007B024B这个值
Var x,y:integer;
x16,y16,m:string;
mm:integer;

x:=587;//x坐标,随机产生
y:=123;//y坐标,随机产生

x16:=inttohex(x,4);//将x坐标转换为16进制,值为:024B
y16:=inttohex(y,4);//将y坐标转换为16进制,值为:007B
m:='$'+x16+y16;//整合为一个字符串:$007B024B,这里现在是一个字符串,我如何才能将这个字符串转换为整数$007B024B
mm:=strtoint(m);//这里出错...因为m这个数值里含有字母,就算是不含有字母,也会转换为其他数字,最终转换出来的不是$007B024B这个值

//mm := (y shl 16) or x;//用这种方式得到的数值也不是$007B024B这个,

sendmessage(hookHwnd,messages.WM_LBUTTONDOWN ,0,mm);// 按下鼠标左键
sendmessage(hookHwnd,messages.WM_LBUTTONUP ,0, mm); //抬起鼠标左键

大家帮忙看看怎么解决,或者是有其他什么方式替换呢,谢谢哦

Var
x,y,lParam:Cardinal;
begin

x:=587;//x坐标,随机产生
y:=123;//y坐标,随机产生

lParam:=(y shl 16) or x;

sendmessage(hookHwnd,messages.WM_LBUTTONDOWN,0,lParam); // 按下鼠标左键
sendmessage(hookHwnd,messages.WM_LBUTTONUP,0,lParam); //抬起鼠标左键

end;
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-11
使用MakeWord 作成高低字节 而不是十六进制

delphi中有模拟发送鼠标按键sendmessage的疑问
sendmessage(hookHwnd,messages.WM_LBUTTONDOWN,0,lParam); \/\/ 按下鼠标左键 sendmessage(hookHwnd,messages.WM_LBUTTONUP,0,lParam); \/\/抬起鼠标左键 end;

delphi 滑鼠问题
做游戏模拟发送鼠标,一般使用SendMessage\/PostMessage函数发送鼠标消息,但从实际应用来看,有比较大的限制,因为现在一般游戏都会对类似的操作进行限制,所以按键精灵软件会有硬件模拟发送鼠标消息的函数存在,而且也并不能就保证一定会成功。

delphi 用代码模拟2个鼠标、键盘操作,高手进
第一个问题回车实现下拉:procedure TForm1.DateTimePicker1KeyPress(Sender: TObject; var Key: Char);begin if Key = #13 then begin SendMessage(DateTimePicker1.Handle, WM_LBUTTONDOWN, MK_LBUTTON, DateTimePicker1.WIDTH-5);end;end;第二个问题 模拟鼠标的左右键:Mouse_Event(MOUSEEVENTF_L...

Delphi用sendmessage方法发送消息在类名为Edit的窗口中坐标(100,200...
\/\/SendMessage的参数1是窗口句柄,\/\/参数2是常量,模拟鼠标按下(messages.WM_LBUTTONDOWN),后面一个是模拟鼠标弹起(messages.WM_LBUTTONUP)。\/\/参数3可以不填,这里没用 \/\/参数4是窗口中需要点击的那个按钮在窗口中对应的坐标。是16进制的。你的(100,200)也需要转换成16进制。我这里是填的另...

delphi 后台模拟鼠标点击
function MyFindWindow:THandle;const A_szClassName:array[0..2] of PChar=('MSPaintApp','AfxFrameOrView42u','Afx:1000000:8');var i:Integer;hLastWin:THandle;begin hLastWin:=FindWindow(A_szClassName[0],nil);for i:=1 to 2 do begin hLastWin:=FindWindowEx(hLastWin,THandle(...

delphi中sendmessage的意思是什么
发消息.第一个参数 目标句柄 2 消息的值 3 消息的wparam 4 消息的lpara 至于消息的w和l有什么用,看msdn SendMessage(redt1.Handle,EM_LINEINDEX,i,0);应该是这样的效果 redt1.lines[i] ;

delphi里如何使用SendMessage发送字符串?
一定要使用SendMessage来发送消息,如果使用PostMessage会出错。原因我想是因为 PostMessage发送消息后线程会继续执行下去,当主窗口收到这个消息并处理时,线程可能已经结束了,这时指向字符串的那个指针就会出错;而 SendMessage发送消息后会将线程挂起,直到消息处理完成后,才继续执行下面代码。

delphi 中 postmessage 和sendmessage用法
SendMessage发送完消息后等待消息处理完以后,才能返回继续执行程序.Form1.Handle是form1窗口的句柄 VN_KEYDOWN 是消息类型为按下某键 VK_TAB 键值Tab Win32 API消息函数:PostMessage 函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里...

delphi如何模拟鼠标滚轮的往上和往下
Handle是要实现鼠标滚动的窗口句柄.知道句柄直接使用SendMessage发消息给窗口就行了 句柄可以用FindWindow这个API函数获得

Delphi sendmessage,postmessage,在timer事件中发消息,无响应。_百 ...
在窗口上加了一个按钮和一个定时器,按钮OnClick事件代码:procedure TForm1.Button1Click(Sender: TObject);begin Caption := Caption + '!';end;定时器OnTimer事件代码:procedure TForm1.Timer1Timer(Sender: TObject);begin PostMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0); Post...

相似回答