Как отправить левую клавишу Shift? - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь отправить ключ в другой открытый процесс в Firefox. Я должен отправить левую клавишу Shift, но это не повезло.

Я пытался найти эти ответы, но все, что я получал, это внешние методы с использованием самородков или людей, использующих обычную смену. Я перепробовал много способов отправки Left Shift с помощью Enum of 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);
}

Я видел списки с и списки без левой клавиши Shift, но в любом случае они появляются как ошибка «неверный ключ».

Спасибо.

1 Ответ

0 голосов
/ 16 сентября 2018

Использование 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);
}
...