我向另外一个软件的按钮发送模拟点击的信息,用了sendmessage和postmessage两个,如下
postmessage(Hwnd,WM_LBUTTONDOWN,0,0); //鼠标左键按下
postmessage(Hwnd,WM_LBUTTONUP,0,0); //鼠标左键抬起
应该怎么修改呢?这个按钮是另外程序的子窗口下的。
非常感谢!
postmessage(Hwnd,WM_LBUTTONDOWN,0,0); //鼠标左键按下
postmessage(Hwnd,WM_LBUTTONUP,0,0); //鼠标左键抬起
应该怎么修改呢?这个按钮是另外程序的子窗口下的。
非常感谢!
SetCursorPos 把鼠标移过去,用 mouse_event 模拟点击。
SetCursorPos(600,500);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
SendMessage(Windows.GetParent(按钮句柄), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(按钮句柄), BN_CLICKED), 按钮句柄);或向按钮发送BM_CLICK:
AttachThreadInput(当前线程id, 目标线程id, True);
SetActiveWindow(按钮所在窗体句柄);
AttachThreadInput(当前线程id, 目标线程id, False);
PostMessage(按钮句柄, BM_CLICK, 0, 0)至于对窗口发‘Ctrl+S’,可以下载sndkey32.pas,调用AppActivate激活窗口,然后SendKeys('^s')
使用了第一个方法前面的使用了之后总是出现了raised exception class EcovertError with message"按钮"is not a valid integer value.
按钮句柄怎么写的?StrToInt('按钮')?当然不行了
要怎么写,之前我是把句柄转化成string,然后再通过StrtoInt作为句柄直接使用,也没有出现问题。
按照您思路,该怎么办呢?
你先看看“向按钮的父控件发WM_COMMAND消息”管用不管用吧,直接把按钮句柄写出来,比如:var
h: HWND;
begin
h := $123;
SendMessage(Windows.GetParent(h), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(h), BN_CLICKED), h);
end;