2016-04-03 2 views
0

Я новичок в WindowHooks, и моя цель - «Захватывать мышь, клавиатуру и находить информацию из другого процесса», тогда я думаю, что попытаюсь ее зацепить. Я делаю приложение Window с помощью C# (я не использую DLL).SetWindowsHooks to Hook Другие программы

if(hHook == 0) 
{ 
MouseHookProcedure = new HookProc(mainForm.MouseHookProc); 
hHook = SetWindowsHookEx(WH_MOUSE,MouseHookProcedure,(IntPtr)0,GetCurrentThreadID()) 
if(hHook == 0) 
MessageBox.Show("SetWindowsHookEx Failed"); 
return; 

с

MH_MOUSE = 7; 

и MouseHookProc является публичным статическим ИНТ в окна приложения (я написал это внутри окна приложения). Крючок работает, но только сам по себе, но мне нужно, чтобы он перехватывал другой процесс. Я попытался измениться с GetCurrentThreadID() на GetWindowThreadProcessID(hWnd, NULL), но он не работает, и я не знаю почему. Что-то не так с кодом? р/с: Я не знаю много о Window Крючки, я узнаю его из MSDN, вот link

+0

Для этого типа крючка требуется DLL, которая может быть введена в целевой процесс (ы), третий аргумент SetWindowsHookEx(). Такая DLL не может быть написана на C#, вам нужно будет изучить такой язык, как C или C++ или google * много * существующих веб-страниц об этом. Нам не нужна другая, спасибо за попытку внести свой вклад. –

+0

Спасибо, моя цель - «написать журнал о мыши и клавиатуре», возможно, мне не нужно использовать локальные перехватчики, возможно ли это, если я попытаюсь получить позицию мыши из Global hook и отфильтровать ее с помощью ThreadID или HandleID? – Septimus

+0

Да, вам нужно GetForegroundWindow(), чтобы узнать, какое окно получит сообщение мыши/клавиатуры. GetWindowProcessThreadId() сообщает вам, какой процесс принадлежит этому окну. Независимо от того, будет ли ваша антивирусная защита вашего пользователя такой кейлоггером, это вторичная проблема. –

ответ

0

Гм, я не знаю, если это ответ вы ищете ...

Но в вашем коде вместо setWindowsHookEx() вы написали swtWindowsHookEx().

Возможно, если вы исправите это, вы получите то, что ищете.

ура и счастливое программирование!

+0

спасибо, это моя ошибка: D – Septimus

0

Спасибо за Ханс Пассант, я использовал глобальные крючки, чтобы взять всю информацию, а затем GetForegroundWindow(), чтобы проверить, что с ручками списка у меня был. Таким образом, мне не нужно использовать DLL, но я все еще могу получить сообщение Mouse/keyboard для записи журнала ключей.

Смежные вопросы