Удерживание кнопки Alt с помощью сообщений Windows

Как я могу, с сообщениями Windows, удерживать кнопку ALT?

Есть ли WM_KEYHOLD или что-то подобное?

Это код снимка экрана, но я думаю, что-то не так. Я думаю, что коды клавиш, которые я использую, плохие, для 0x70 он посылает F1. и для 0x46 это посылает раздражающий звук окон.

    const uint WM_SYSKEYDOWN = 260;
    const uint VK_MENU = 18;//virtual key code of Alt key
    const uint VK_SNAPSHOT = 44;//virtual key code of Snapshot key

    [DllImport("User32.Dll")]
    public static extern long PostMessage(IntPtr hWnd, UInt32 wMsg, long wParam, long lParam);

    [DllImport("user32.dll")]
    public static extern IntPtr FindWindow(String sClassName, String sAppName);

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetForegroundWindow();

    private void timer1_Tick(object sender, EventArgs e)
    {
        IntPtr hwnd = GetForegroundWindow();
        //PostMessage(hwnd, WM_SYSKEYDOWN, VK_MENU, 1);
        PostMessage(hwnd, WM_SYSKEYDOWN, VK_SNAPSHOT, 1);
    }

2 ответа

Решение

Документы, связанные DanielB, ссылаются на бит 29 lParam, определяющий статус ALT, вы пробовали это?

Бит 29 - код контекста. Значение равно 1, если клавиша ALT нажата, пока клавиша нажата; это 0, если сообщение WM_SYSKEYDOWN отправлено в активное окно, потому что ни одно окно не имеет фокус клавиатуры.

В моем понимании, этого должно быть достаточно, чтобы отправить WM_SYSKEYDOWN / WM_KEYDOWN, смотри документы

Другие вопросы по тегам