Сочетание клавиш с использованием C # - PullRequest
6 голосов
/ 02 июня 2011

Я хочу создать простое приложение, которое имеет клавиши отправки (например, сочетания клавиш) .Дело в том, что всякий раз, когда созданное приложение является неактивным окном, система все еще распознает нажатые клавиши пользователя, пока система работает.

Короче говоря, это просто как нажатие (окно + D), чтонемедленно показывать свой рабочий стол, когда вы находитесь в каком приложении / окне.

Может кто-нибудь помочь мне с тем, как я могу сделать это в C # 2005

Ответы [ 2 ]

5 голосов
/ 02 июня 2011

Используйте следующее:

[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
[DllImport("user32.dll")]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

и

[Flags]
public enum ModifierKeys : uint
{
    Alt = 1,
    Control = 2,
    Shift = 4,
    Win = 8
}

private ModifierKeys _getModifierKeys(bool isAlt, bool isCtrl, bool isShift, bool isWin)
{
    return (isAlt ? ModifierKeys.Alt : 0) |
            (isCtrl ? ModifierKeys.Control : 0) |
            (isShift ? ModifierKeys.Shift : 0) |
            (isWin ? ModifierKeys.Win : 0);
}

затем, чтобы зарегистрировать вашу горячую клавишу,

RegisterHotKey(hWndNotify, id,
                    (uint)_getModifierKeys(_isAlt, _isCtrl, _isShift, _isWin),
                    (uint)_key);

на хосте hWnd, прослушайте WM_HOTKEYREADY, затем проверьте совпадения с вашей горячей клавишей, используя

public bool Matches(ref Message m)
{
    Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
    ModifierKeys modifier = (ModifierKeys)((int)m.LParam & 0xFFFF);

    if ((key == Key) &&
        (modifier == Modifier))
    {
        return true;
    }

    return false;
}
2 голосов
/ 02 июня 2011

Может быть, это может помочь вам

http://www.codeproject.com/KB/cs/globalhook.aspx

...