如何发送左移键?

时间:2018-09-16 02:34:09

标签: c# key shift

我正在尝试将密钥发送到Firefox中的另一个打开进程。 我应该发送Left Shift键,但是运气不好。

我尝试使用谷歌搜索这些答案,但最终我得到的是使用掘金的外部方法或使用常规班次的人们。我尝试了多种使用左移的枚举或Sendkey.Send("{LSHIFT}")发送左移的方法,但还有许多方法对我没有用。我想知道是否有合适的方法可以发送左Shift键。

到目前为止,这是我的代码:

public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
    if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
    {
        int vkCode = Marshal.ReadInt32(lParam);
        Keys pressed = (Keys)vkCode;
        MessageBox.Show(pressed.ToString());
        switch (pressed)
        {
            case Keys.Insert:
                {
                    SendKeys.Send("{LSHIFT}");
                }
            break;
        }
    }
    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

我看到带有和列表的列表没有左移键,但是无论哪种方式,它们都以错误“无效键”的形式弹出。

谢谢。

1 个答案:

答案 0 :(得分:5)

keybd_event API与“ VK_LSHIFT”虚拟密钥代码一起使用:

const byte VK_LSHIFT = 0xA0;
const uint KEYEVENTF_KEYUP = 0x0002;

[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

static void Main(string[] args)
{
    keybd_event(VK_LSHIFT, 0, 0, 0);
    Thread.Sleep(100);
    keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0);
}