测试步骤:
1、启动任务管理器,点击“应用程序”选项卡
2、启动测试程序,点击按钮 Button1 以模拟点击任务管理器的按钮“新任务”问题:
为什么模拟点击在有效和无效间切换,即这次有效,下次就无效?
还有,如果在最小化任务管理器的情况下测试,为什么每次都有效?procedure TForm1.Button1Click(Sender: TObject);
var
h: HWND;
begin
h := FindWindow('#32770', 'Windows 任务管理器');
h := FindWindowEx(h, 0, '#32770', nil);
h := FindWindowEx(h, 0, 'Button', '新任务(&N)...');
SendMessage(h, WM_LBUTTONDOWN, MK_LBUTTON, 0);
SendMessage(h, WM_LBUTTONUP, 0, 0);
end;
1、启动任务管理器,点击“应用程序”选项卡
2、启动测试程序,点击按钮 Button1 以模拟点击任务管理器的按钮“新任务”问题:
为什么模拟点击在有效和无效间切换,即这次有效,下次就无效?
还有,如果在最小化任务管理器的情况下测试,为什么每次都有效?procedure TForm1.Button1Click(Sender: TObject);
var
h: HWND;
begin
h := FindWindow('#32770', 'Windows 任务管理器');
h := FindWindowEx(h, 0, '#32770', nil);
h := FindWindowEx(h, 0, 'Button', '新任务(&N)...');
SendMessage(h, WM_LBUTTONDOWN, MK_LBUTTON, 0);
SendMessage(h, WM_LBUTTONUP, 0, 0);
end;
原因我还没有找到!
模拟按钮事件最好是给其父窗口发WM_COMMAND、BN_CLICKED消息,模拟鼠标消息很多时候不起作用。
至于发送 WM_COMMAND,我用下面的语句任务管理器貌似没有任何反应,而对程序自己的按钮的模拟点击是可以的。
PostMessage(h, WM_COMMAND, MAKELONG(GetDlgCtrlID(h), BN_CLICKED), h);
procedure TForm1.Button1Click(Sender: TObject);
var
h, hParent: HWND;
begin
h := FindWindow('#32770', 'Windows 任务管理器');
hParent := FindWindowEx(h, 0, '#32770', nil);
h := FindWindowEx(hParent, 0, 'Button', '新任务(&N)...');
{模拟点击按钮的三种方法(还有其他方法如使用 mouse_event, keybd_event 等)}
//1
SendMessage(hParent, WM_COMMAND, MAKELONG(GetDlgCtrlID(h), BN_CLICKED), h);
//2
//SendMessage(h, BM_CLICK, 0, 0);
//3
//SendMessage(h, WM_LBUTTONDOWN, MK_LBUTTON, 0);
//SendMessage(h, WM_LBUTTONUP, 0, 0);
end;