如何发送左shift键?

How to send the left shift key?

我正在尝试将密钥发送到 Firefox 中另一个打开的进程。 我应该发送 Left Shift 键,但这没有任何运气。

我试着用谷歌搜索这些答案,但我最终得到的只是使用掘金的外部方法或使用常规班次的人。我尝试了很多使用左移枚举或 Sendkey.Send("{LSHIFT}") 发送左移的方法等等,但 none 对我有用。我想知道有没有合适的方法让我发送Left 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);
}

我见过有和没有左 Shift 键的列表,但无论哪种方式,它们都会弹出错误 'invalid key'。

谢谢。

使用 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);
}