在非活动应用程序中模拟鼠标移动/单击/按键

发布于 2024-07-18 12:21:46 字数 526 浏览 5 评论 0原文

我知道如何模拟鼠标和键盘事件,但它们的行为就像用户执行这些事件一样,因此它们会影响活动的窗口。 我需要的是模拟这些输入之一,但在一个不活动的窗口中。

我并不是说它被最小化,想象一下,例如,你有 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);

但它不起作用=(没有做任何事情:(

I know how to simulate mouse and keyboard events, but they act as if the user did them, so they will affect the window that is active. What I need is to simulate one of those inputs, but in a Window that is not active.

I'm not saying that it is minimized, imagine for example, you have msPaint, and notepad. Notepad is in front of paint. And you want to simulate mouse clicks in certain coordinates of the paint window, but without setting it active, making it possible for the user to keep using notepad which is in fron of paint.

Is this possible at all? Thanks!

I've tried this:

            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);

but it doesn't work =( Doesn't do anything :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不再见 2024-07-25 12:21:46

您可以尝试

You can try the UI automation API. It supports also legacy applications.

倾听心声的旋律 2024-07-25 12:21:46

也许可以尝试使用 PostMessage 函数:

    [DllImport("user32.dll", CharSet=CharSet.Auto)] 
    private static extern int PostMessage(
            int hWnd, int msg, int wParam, IntPtr lParam);

Maybe try the PostMessage function instead:

    [DllImport("user32.dll", CharSet=CharSet.Auto)] 
    private static extern int PostMessage(
            int hWnd, int msg, int wParam, IntPtr lParam);
獨角戲 2024-07-25 12:21:46

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

Depending on the target app, there could be lots of issues. Some apps trigger on WM_KEYDOWN or WM_KEYUP instead of WM_CHAR. Also, the key might already be down and is being ignored. For targets like webbrowsers, you need to get the right window handle. Winspector can get that for you.

呆° 2024-07-25 12:21:46

您的代码将无法工作,因为 SendMessage 要求您发送的窗口处于活动状态。
尝试发布消息。

Your code wont work because SendMessage requires that the window you're sending to be active.
Try PostMessage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文