Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# 如何发送左shift键?_C#_Key_Shift - Fatal编程技术网

C# 如何发送左shift键?

C# 如何发送左shift键?,c#,key,shift,C#,Key,Shift,我试图将一个密钥发送到Firefox中的另一个开放进程中。 我本应该把左换档键给你的,但这是没有运气的 我试着在谷歌上搜索这些答案,但最终我得到的只是使用掘金的外部方法或使用常规轮班的人。我尝试了许多使用左移位枚举或Sendkey.Send(“{LSHIFT}”)发送左移位的方法,但没有一种对我有效。我想知道是否有合适的方式发送左换档键 这是我目前的代码: public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lPa

我试图将一个密钥发送到Firefox中的另一个开放进程中。 我本应该把左换档键给你的,但这是没有运气的

我试着在谷歌上搜索这些答案,但最终我得到的只是使用掘金的外部方法或使用常规轮班的人。我尝试了许多使用左移位枚举或
Sendkey.Send(“{LSHIFT}”)
发送左移位的方法,但没有一种对我有效。我想知道是否有合适的方式发送左换档键

这是我目前的代码:

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键的列表,但无论哪种方式,它们都会作为错误“无效键”弹出

谢谢。

使用带有“VK_LSHIFT”虚拟密钥代码的API:

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

我认为使用
SendKeys
不可能做到这一点。可能会对你有所帮助。我也看到了这篇文章,但它似乎对我不起作用。我认为这在
SendKeys
中是不可能的。也许对你有帮助。我也看到了这篇文章,但它似乎对我不起作用。简单的附带问题。。当我发送
keybd_事件时(VK_LSHIFT,0,0,0)我插入一个常规的
SendKeys.Send(“a”)这确实给了我一个“A”,我正在为OEMNUM5尝试这个,即“|”或“\”。虽然我需要的是反斜杠,但Key Send不能识别反斜杠
SendKeys.Send(“\\”)使用的转义并且根本不发送。有什么想法吗?@RobertWesterveld使用VK_OEM_102(0xE2)键代码作为反斜杠。下面是系统使用的虚拟密钥代码列表:简单的附带问题。。当我发送
keybd_事件时(VK_LSHIFT,0,0,0)我插入一个常规的
SendKeys.Send(“a”)这确实给了我一个“A”,我正在为OEMNUM5尝试这个,即“|”或“\”。虽然我需要的是反斜杠,但Key Send不能识别反斜杠
SendKeys.Send(“\\”)使用的转义并且根本不发送。有什么想法吗?@RobertWesterveld使用VK_OEM_102(0xE2)键代码作为反斜杠。以下是系统使用的虚拟密钥代码列表: