我需要什么
模拟消息(主要是鼠标,但也包括键盘)而不移动光标。消息发送到焦点窗口(首先,我想适用于最小化的窗口,但我没有找到如何做到这一点,所以我使用SetForegroundWindow
将其聚焦)。
我找到了什么
在这个问题上,我发现我需要使用来自user32.dll
的pInvoked。我还找到了一个小的代码示例,但它没有起作用。
我还发现了类似的问题。那个人使用了mouse_event
,但它已被弃用。此函数以毫米为单位获取X和Y坐标。我尝试使用SendMessage
转换我的坐标,但失败了。
你能给一个示例吗?
当然可以。打开notepad.exe
,我需要在位于(1210,460)的按钮上执行右键单击。
我尝试过什么
根据我在这里找到的示例,我编写了以下代码:
IntPtr hWnd = (IntPtr)FindWindow("notepad.exe", null);
SetForegroundWindow(hWnd);
var screenPoint = this.PointToScreen(new Point(1210, 460));
var handle = WindowFromPoint(screenPoint);
if (handle != IntPtr.Zero)
{
//Right Button Down
SendMessage(handle, 0x0204, IntPtr.Zero, IntPtr.Zero);
//Right Button Up
SendMessage(handle, 0x0205, IntPtr.Zero, IntPtr.Zero);
}
我还尝试在
SendMessage
中使用之前的句柄 hWnd
,但同样无法运作。你可以在这里找到整段代码。提前致谢。
SendMessage
中传递任何位置信息。如果你将他的代码中的答案整合到你的代码中,这个关于鼠标按钮事件导致SendMessage
崩溃的问题将会得到解决。参考链接:https://dev59.com/FljUa4cB1Zd3GeqPT7ZO。 - user7116