Как установить хук на другой процесс?
от вопрос уже есть ответ здесь:
Захват клавиш клавиатуры в фоновом режиме 2 ответаИтак, у меня есть консольное приложение C # с формой, которое я хочу открыть с помощью горячих клавиш. Скажем для примераCtrl + < открывает форму. Итак, я получил код для обработки globalkeylistener сейчас, но, похоже, мне не удалось его реализовать. Он сделал цикл while, чтобы предотвратить закрытие программы, и я попытался получить ввод от пользователя с помощью метода kbh_OnKeyPressed.
Я попытался реализовать это так:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Globalkey
{
static class Program
{
[DllImport("user32.dll")]
private static extern bool RegisterHotkey(int id, uint fsModifiers, uint vk);
private static bool lctrlKeyPressed;
private static bool f1KeyPressed;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LowLevelKeyboardHook kbh = new LowLevelKeyboardHook();
kbh.OnKeyPressed += kbh_OnKeyPressed;
kbh.OnKeyUnpressed += kbh_OnKeyUnpressed;
kbh.HookKeyboard();
while(true) { }
}
private static void kbh_OnKeyUnpressed(object sender, Keys e)
{
if (e == Keys.LControlKey)
{
lctrlKeyPressed = false;
Console.WriteLine("CTRL unpressed");
}
else if (e == Keys.F1)
{
f1KeyPressed = false;
Console.WriteLine("F1 unpressed");
}
}
private static void kbh_OnKeyPressed(object sender, Keys e)
{
if (e == Keys.LControlKey)
{
lctrlKeyPressed = true;
Console.WriteLine("CTRL pressed");
}
else if (e == Keys.F1)
{
f1KeyPressed = true;
Console.WriteLine("F1 pressed");
}
CheckKeyCombo();
}
static void CheckKeyCombo()
{
if (lctrlKeyPressed && f1KeyPressed)
{
Application.Run(new Form1());
}
}
}
}