Я новичок в 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
Для этого типа крючка требуется DLL, которая может быть введена в целевой процесс (ы), третий аргумент SetWindowsHookEx(). Такая DLL не может быть написана на C#, вам нужно будет изучить такой язык, как C или C++ или google * много * существующих веб-страниц об этом. Нам не нужна другая, спасибо за попытку внести свой вклад. –
Спасибо, моя цель - «написать журнал о мыши и клавиатуре», возможно, мне не нужно использовать локальные перехватчики, возможно ли это, если я попытаюсь получить позицию мыши из Global hook и отфильтровать ее с помощью ThreadID или HandleID? – Septimus
Да, вам нужно GetForegroundWindow(), чтобы узнать, какое окно получит сообщение мыши/клавиатуры. GetWindowProcessThreadId() сообщает вам, какой процесс принадлежит этому окну. Независимо от того, будет ли ваша антивирусная защита вашего пользователя такой кейлоггером, это вторичная проблема. –