dll注入-Delphi-在另一个进程上获取消息类型的按钮



我如何知道另一个进程上按钮的Msg类型,例如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;

我已经把它注入一个有这个buton 的进程

procedure TMainForm.btn1Click(Sender: TObject);
begin
  ShowMessage('You Click Me');
end;

但是什么都没有出现

如果我的理解是错误的,请纠正,并给我指明正确的方向。

WM_COMMAND消息模拟按钮点击的正确方法如下:

PostMessage(GetParent(hButton), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(hButton), BN_CLICKED), hButton);

但是,如果按钮窗口实际上被禁用,这并不能保证按钮的单击处理程序会被调用。对于VCL TButton组件,它将被调用。但是,如果您将代码注入到一个非VCL进程中,谁知道它会遵循什么规则呢。

相关内容

  • 没有找到相关文章

最新更新