模拟鼠标在非活动应用程序中的移动/点击/按键操作

3
我知道如何模拟鼠标和键盘事件,但它们会像用户一样操作,因此会影响当前活动的窗口。我需要模拟其中一个输入,但在非活动窗口中。
我的意思不是说它被最小化了,例如,您有msPaint和记事本。记事本在paint前面。您想在paint窗口的某些坐标上模拟鼠标点击,但不设置它为活动窗口,使用户可以继续使用在前面的记事本。
这个可能吗?谢谢!
我尝试过这个:
            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);

但是它不起作用 =( 什么也没有发生 :(
4个回答

2
也许可以尝试使用PostMessage函数代替:
    [DllImport("user32.dll", CharSet=CharSet.Auto)] 
    private static extern int PostMessage(
            int hWnd, int msg, int wParam, IntPtr lParam);

2
你可以尝试使用UI自动化API。它也支持旧版应用程序。

1

根据目标应用程序,可能会出现许多问题。一些应用程序触发 WM_KEYDOWN 或 WM_KEYUP 而不是 WM_CHAR。此外,按键可能已经按下并被忽略。对于像 Web 浏览器这样的目标,您需要获取正确的窗口句柄。Winspector 可以为您获取它。


0

你的代码无法工作,因为 SendMessage 要求你发送消息的窗口必须处于活动状态。请尝试使用 PostMessage。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接