Я написал какую-то программу. Он перехватывает пользовательский ввод через SetWindowsHookEx. и это работает очень хорошо.
и тогда я хочу узнать, как реализовать WindowsHook в другом потоке, для изучения C #.
но я недавно на C #, поэтому не могу найти ответ.
помоги мне.
спасибо.
1012 * редактировать *
вот мой класс InputHook. некоторые коды были сокращены.
public class InputHooker
{
public delegate IntPtr inputHookedDelegate(int nCode, IntPtr wParam, IntPtr lParam);
public inputHookedDelegate keyHookHandler;
public InputHooker()
{
keyHookHandler = onKeyHooked;
}
public void StartInputHook()
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
curKeyHookID = SetWindowsHookEx(WH_KEYBOARD_LL, keyHookHandler, GetModuleHandle(curModule.ModuleName), 0);
}
}
private IntPtr onKeyHooked(int nCode, IntPtr wParam, IntPtr lParam)
{
return CallNextHookEx(curKeyHookID, nCode, wParam, lParam);
}
}
И я попробовал, как следующий код;
MyInputHooker = new InputHooker();
Thread myInputHookThread = new Thread(new ThreadStart(MyInputHooker.StartInputHook));
myInputHookThread.Name = "UOCInputHookThread";
myInputHookThread.Priority = ThreadPriority.Normal;
myInputHookThread.Start();
но это не работает. (SetWindowsHookEx был успешно завершен, но onKeyHooked не вызывается при нажатой клавиатуре.) Вместо этого следующий код работает очень хорошо.
MyInputHooker = new InputHooker();
MyInputHooker.StartInputHook();