【问题标题】:SendMessage, Trying to send F4SendMessage,正在尝试发送 F4
【发布时间】:2019-12-02 02:00:41
【问题描述】:

我的 SendMessage 签名:

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

要获取窗口句柄,我从要向其发送消息的进程中找到 MainWindowHandle:

whandle = MemClass.Process.MainWindowHandle;

这里我正在尝试向该进程窗口发送消息:(0x73 = F4 键)

SendMessage(whandle, 0x73, 0, 0);

而且它显然给出了错误,因为我将最后 2 个参数作为 int 而不是 IntPtr 发送:

IntPtr wParam, IntPtr lParam

用这个调用测试:

SendMessage(whandle, 0x73, IntPtr.Zero, IntPtr.Zero);

0 个错误,但它没有将 F4 发送到窗口

如何正确调用此函数?我想将 F4 发送到进程窗口。

【问题讨论】:

  • 可能是IntPtr.Zero?
  • 不工作,0 个错误,但它没有将 F4 发送到窗口
  • 您是否尝试阅读 SendMessage() 的文档。第二个参数是您要发送的消息。 F4 不是消息。这是一把钥匙。至少,您需要发送带有密钥的WM_KEYDOWN,然后是WM_KEYUP。或者您可以使用SendInput 以正确的方式进行操作,您可以通过搜索此站点找到使用示例。
  • 谢谢你,Ken,我正在阅读:docs.microsoft.com/en-us/windows/win32/api/winuser/…SendInput 这对我的目的不利,因为我必须将输入发送到最小化窗口
  • 是的。该链接表示第二个参数是UINT msg,这又是一条消息,而不是密钥。消息是WM_KEYDOWN,其键值编码在 WPARAM 中。后面还需要WM_KEYUP

标签: c#


【解决方案1】:

第二个参数是msg不是key,如:keyup (0x100) or keydown (0x101)

第三个参数是key为0x73(F4)

SendMessage(whandle, 0x100, 0x73, IntPtr.Zero);
SendMessage(whandle, 0x101, 0x73, IntPtr.Zero);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多