У меня есть конкретное приложение, которое я могу найти с помощьюПолучить процессы или нити идентификатор глобального нажатия клавиши с помощью SetWindowsHookEx
Process.GetProcesses()
и фильтрацию ProcessName. Я хотел бы отфильтровать все события нажатия клавиш этого процесса, к сожалению, в качестве последнего параметра можно передать только необязательный идентификатор потока в SetWindowsHookEx.
Вот почему я подумал о фильтрации входящих событий, но я не могу найти способ получить информацию, откуда он пришел. Есть ли решение для этого?
Обратный вызов-информация предоставляется в пределах LowLevelKeyboardProc иметь другую внутри-структуру LPARAM: KBDLLHOOKSTRUCT
На клавиши подходит к окну на переднем плане. Поэтому вам нужны GetForegroundWindow() и GetWindowThreadProcessId(). –
@ Hans Passant: Это было полезно. Пожалуйста, отправьте ответ, чтобы я мог отметить это как решение. 'Process process = Process.GetProcesses() . Где (x => x.ProcessName ==" MyProcessName ") .FirstOrDefault(); // ... Ручка IntPtr = GetForegroundWindow(); uint processID = GetWindowThreadProcessId (дескриптор, IntPtr.Zero); if (p2.Threads.OfType(). Любой (x => x.Id == Convert.ToInt32 (processID))) // success' –
isHuman
Просто разместите решение самостоятельно и отметьте его как ответ. –