Global Hooks (неактивная программа) - PullRequest
1 голос
/ 07 января 2012

Я создаю программу, которая позволяет вставлять текст, но будет похоже, что вы печатаете его, когда он вставляется, Paste Typer.

Я хочу использовать Ctrl + b, чтобы установить вставку,но у меня проблемы с горячими клавишами.

Я думаю, что мне нужно использовать хук WH_KEYBOARD_LL и включить этот файл user32, но я обычно получаю ошибки, когда добавляю его и пространство имен.

Я подошел ближе всего к этому:http://thedarkjoker94.cer33.com/?p=111 - но, похоже, он не работает с Ctrl, alt и другими модификаторами, даже когда я использовал KeyData.

Мне нужен способ сделать горячую клавишу, котораябудет работать, даже если программа не является активным окном.Это приложение для создания форм Windows в Microsoft Visual C # 2010.

Существует множество тем StackOverlow, но они устарели и не достаточно полны, чтобы я мог что-то запустить.

1 Ответ

5 голосов
/ 07 января 2012

Вы говорите о HookManager ?

Я использую его успешно следующим образом:

HookManager.KeyDown += new KeyEventHandler(HookManager_KeyDown);

и

void HookManager_KeyDown(object sender, KeyEventArgs e)
{
    if (Keyboard.IsKeyDown(Keys.LWin)) // Is the Left-Windows Key down and ...
        switch (e.KeyCode)
        {
            case Keys.O: 
                // ...
                e.Handled = true;
                break;
            case Keys.H: 
                // ...
                e.Handled = true;
                break;
        }
}

Я создалКласс клавиатуры здесь представляет собой код:

// Used: http://www.pinvoke.net/default.aspx/user32.getasynckeystate
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Win32.Devices
{
    public class Keyboard
    {
        [DllImport("user32.dll")]
        static extern ushort GetAsyncKeyState(Keys vKey);

        public static bool IsKeyDown(Keys key)
        {
            return 0 != (GetAsyncKeyState(key) & 0x8000);
        }
    }
}
...