【问题标题】:Sending keystroke/mouseclick via PostMessage() in C#在 C# 中通过 PostMessage() 发送击键/鼠标点击
【发布时间】:2017-02-24 23:51:32
【问题描述】:

我已经通过鼠标点击来解决一个问题。如果我将 WM_MBUTTONDOWN 和 WM_MBUTTONUP 之间的延迟设置为超过 5 毫秒,它将不起作用。 为什么会这样?

[DllImport("user32.dll")]
public static extern IntPtr 
PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

public void MouseClick(short x, short y)
        {
                IntPtr lParam = (IntPtr)((x & 0xFFFF) | ((y & 0xFFFF) << 16));
                const uint WM_MBUTTONDOWN = 0x0201;
                const uint WM_MBUTTONUP = 0x0202;

                PostMessage(hwnd, WM_MBUTTONDOWN, IntPtr.Zero, lParam);
                //System.Threading.Thread.Sleep(100);
                PostMessage(hwnd, WM_MBUTTONUP, IntPtr.Zero, lParam);
        }

现在,我的目标是将击键发送到最小化窗口(directx 游戏)。我尝试使用类似的方法,但没有任何效果。我敢打赌 wParam 是问题所在。

        const uint WM_KEYDOWN = 0x100;
        const uint WM_KEYUP = 0x101;
        const uint WM_CHAR = 0x102;

        const int VK_W = 0x57;
        const int VK_S = 0x53;

        PostMessage(hwnd, WM_KEYDOWN, (IntPtr)VK_W, IntPtr.Zero);
        PostMessage(hwnd, WM_KEYUP, (IntPtr)VK_W, IntPtr.Zero);

如何让它工作?

请记住,窗口将被最小化,因此我无法使用 SendKeys 或 SendInput。

【问题讨论】:

    标签: c# postmessage mouseclick-event keystroke


    【解决方案1】:

    更新:

    此代码有效,但仅用于输入游戏内聊天。

            const int VK_G = 0x47;
    
            const uint WM_KEYDOWN = 0x100;
    
            PostMessage(hwnd, WM_KEYDOWN, VK_G, 0);
    

    我不能用它向前走等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多