Delphi - 在另一个进程上获取 Msg 类型的按钮
Delphi - Get Msg type of button on another process
我如何知道另一个进程上按钮的消息类型是什么,例如WM_COMMAND
我的目标是
我想点击那个按钮,即使它被禁用了。我知道我可以简单地使用 EnableWindow
启用目标按钮,然后使用
PostMessage(hButton, WM_KEYDOWN, VK_RETURN, 0);
问题是
如果有一个线程来验证某些东西,例如
if TRUE then
buttonX.enabled := True
else
buttonX.enabled := False;
即使线程是这样的 运行 也可以单击该按钮吗?
PostMessage(hTargetApp, WM_COMMAND, XXXX, 0);
这是我的 DLL
function WindowProcMain(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
begin
case Msg of
WM_COMMAND:MessageBoxW(HWND_DESKTOP, PChar('The WM_COMMAND code is: '+IntToStr(wParam)), 'WM_COMMAND', MB_OK);
end;
Result := CallWindowProc(MainWndProc, hWnd, Msg, wParam, lParam);
end;
我已经将它注入到一个有这个按钮的进程中
procedure TMainForm.btn1Click(Sender: TObject);
begin
ShowMessage('You Click Me');
end;
但是什么也没有出现
理解有误请指正,指正方向
使用 WM_COMMAND
消息模拟按钮点击的 正确 方法如下:
PostMessage(GetParent(hButton), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(hButton), BN_CLICKED), hButton);
但是,如果按钮 window 实际上被禁用,则不能保证会调用按钮的单击处理程序。对于 VCL TButton
组件,它 将 被调用。但是如果你将你的代码注入到一个非 VCL 进程中,谁知道它会遵循什么规则。
我如何知道另一个进程上按钮的消息类型是什么,例如WM_COMMAND
我的目标是
我想点击那个按钮,即使它被禁用了。我知道我可以简单地使用 EnableWindow
启用目标按钮,然后使用
PostMessage(hButton, WM_KEYDOWN, VK_RETURN, 0);
问题是 如果有一个线程来验证某些东西,例如
if TRUE then
buttonX.enabled := True
else
buttonX.enabled := False;
即使线程是这样的 运行 也可以单击该按钮吗?
PostMessage(hTargetApp, WM_COMMAND, XXXX, 0);
这是我的 DLL
function WindowProcMain(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
begin
case Msg of
WM_COMMAND:MessageBoxW(HWND_DESKTOP, PChar('The WM_COMMAND code is: '+IntToStr(wParam)), 'WM_COMMAND', MB_OK);
end;
Result := CallWindowProc(MainWndProc, hWnd, Msg, wParam, lParam);
end;
我已经将它注入到一个有这个按钮的进程中
procedure TMainForm.btn1Click(Sender: TObject);
begin
ShowMessage('You Click Me');
end;
但是什么也没有出现
理解有误请指正,指正方向
使用 WM_COMMAND
消息模拟按钮点击的 正确 方法如下:
PostMessage(GetParent(hButton), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(hButton), BN_CLICKED), hButton);
但是,如果按钮 window 实际上被禁用,则不能保证会调用按钮的单击处理程序。对于 VCL TButton
组件,它 将 被调用。但是如果你将你的代码注入到一个非 VCL 进程中,谁知道它会遵循什么规则。