【发布时间】: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#