我知道如何模拟鼠标和键盘事件,但它们就像用户那样做了,因此它们会影响活动的窗口。我需要的是模拟其中一个输入,但在一个不活动的窗口中。
我并不是说它被最小化了,想象一下,例如,你有msPaint和记事本。记事本在油漆面前。并且您希望在绘画窗口的某些坐标中模拟鼠标点击,但不将其设置为活动状态,这样用户就可以继续使用油漆边缘的记事本。
这有可能吗?谢谢!
我试过这个:
const int WM_KEYDOWN = 0x100;
Thread.Sleep(5000);
Process x = Process.Start(@"C:\WINDOWS\NOTEPAD.EXE");
PInvokes.PlatformInvokeUSER32.SendMessage(x.MainWindowHandle, WM_KEYDOWN, ((int)Keys.W), 0);
但它不起作用=(什么都不做:(
答案 0 :(得分:2)
您可以尝试UI automation API。它还支持遗留应用程序。
答案 1 :(得分:2)
也许尝试使用PostMessage函数:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern int PostMessage(
int hWnd, int msg, int wParam, IntPtr lParam);
答案 2 :(得分:1)
根据目标应用,可能存在很多问题。某些应用程序触发WM_KEYDOWN或WM_KEYUP而不是WM_CHAR。此外,密钥可能已经关闭并被忽略。对于像webbrowsers这样的目标,你需要获得正确的窗口句柄。 Winspector可以帮你。
答案 3 :(得分:0)
您的代码无法正常工作,因为SendMessage要求您发送的窗口处于活动状态。 试试PostMessage。