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 进程中,谁知道它会遵循什么规则。