Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不使用线程的情况下模拟鼠标单击/按键。睡眠?_C#_Keypress_Dllimport_Mouseclick Event_User32 - Fatal编程技术网

C# 如何在不使用线程的情况下模拟鼠标单击/按键。睡眠?

C# 如何在不使用线程的情况下模拟鼠标单击/按键。睡眠?,c#,keypress,dllimport,mouseclick-event,user32,C#,Keypress,Dllimport,Mouseclick Event,User32,现在我使用PostMessage和MouseClick将按键发送到应用程序。我想要的是发送按键,当按键完成时(KeyUp),然后发送鼠标点击 代码 此代码仅在高计时器间隔内工作。当我将计时器减少到100或低于此值时,就像鼠标点击时冻结一样,不再按键盘。我想知道的是如何使它在较低的定时器间隔内正确工作。或者它有没有更好的解决方案来实现这一目标 谢谢。您是否考虑过使用(为支持例如辅助功能工具而构建,但通常更好,因为它们在更“语义”的级别上工作,而不是假装您是键盘/鼠标)而不是玩弄低级事件系统?用于伪

现在我使用PostMessage和MouseClick将按键发送到应用程序。我想要的是发送按键,当按键完成时(KeyUp),然后发送鼠标点击

代码

此代码仅在高计时器间隔内工作。当我将计时器减少到100或低于此值时,就像鼠标点击时冻结一样,不再按键盘。我想知道的是如何使它在较低的定时器间隔内正确工作。或者它有没有更好的解决方案来实现这一目标


谢谢。

您是否考虑过使用(为支持例如辅助功能工具而构建,但通常更好,因为它们在更“语义”的级别上工作,而不是假装您是键盘/鼠标)而不是玩弄低级事件系统?用于伪造输入的API函数是
SendInput
,但是为什么不使用UI自动化呢?
    const UInt32 WM_KEYDOWN = 0x0100;
    const UInt32 WM_KEYDOWN = 0x0101;
    const int VK_F1 = 0x70;
    const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
    const uint MOUSEEVENTF_LEFTUP = 0x0004;

    [DllImport("user32.dll")]
    static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);

    [DllImport("user32.dll")]
    static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, UIntPtr dwExtraInfo);

    private void Timer1_Tick(object sender, EventArgs e)
    {
        Process processes = Process.GetProcessById(_processID);
        PostMessage(processes.MainWindowHandle, WM_KEYDOWN, VK_F1, 0);
        Thread.Sleep(10);
        PostMessage(processes.MainWindowHandle, WM_UP, VK_F1, 0);
        Thread.Sleep(10);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, UIntPtr.Zero);
        Thread.Sleep(10);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, UIntPtr.Zero);
        Thread.Sleep(10);
    }