Глобальная клавиатура Hook Spy?

Я пишу быстрый инструмент на C #, предназначенный для виртуальной клавиатуры. На данный момент я использую SendKeys. Я хочу знать, будут ли клавиатурные шпионы захватывать ключи, поэтому я нашел этот код но у меня не установлен MFC, поэтому я не могу скомпилировать или запустить его

Как я могу набрать ключ, если SendKeys регистрируется кейлоггерами или как получить код (фрагмент ниже), запущенный в одном exe-файле для тестирования моего кода?

#include <Windows.h>

static UINT uMsg = 0;
static HWND hWndMain = 0;
static HHOOK hKeyHook = NULL ;
#pragma data_seg()

HINSTANCE hInstance = 0;
HOOKPROC lpfnHookProc = 0;

LRESULT __stdcall KeyboardFunc (int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL bPassToChain;
char szDebug [100];

// Check for exception cases...
if (nCode < 0)
return (CallNextHookEx (hKeyHook, nCode, wParam, lParam));
if (nCode == HC_NOREMOVE)
return (CallNextHookEx (hKeyHook, nCode, wParam, lParam));

switch (wParam)
{
case VK_F2:
wsprintf (szDebug, "F2 key message, lparam = 0x%X\n", lParam);
OutputDebugString (szDebug);

// only send on keydown, not keyup (autorepeat)
if (HIWORD (lParam) & 0xC000)
{
OutputDebugString ("F2 Keyup\n");
}
else
{
wsprintf (szDebug, "Sending F2 keydown message %d to hwnd 0x%X\n",
uMsg, hWndMain);
OutputDebugString (szDebug);
PostMessage (hWndMain, uMsg, 0, 0);
}
bPassToChain = FALSE;
break;

default :
bPassToChain = TRUE ;
break ;
}

if (bPassToChain)
return (CallNextHookEx (hKeyHook, nCode, wParam, lParam));
else
return TRUE ; // We have processed this key
}

BOOL __stdcall InstallExampleKeyboardHook (HWND hWnd, UINT uMyMsg)
{
hWndMain = hWnd ;
uMsg     = uMyMsg;
lpfnHookProc = (HOOKPROC) KeyboardFunc ;
hKeyHook = SetWindowsHookEx (WH_KEYBOARD, lpfnHookProc, hInstance, NULL);

if (hKeyHook)
return TRUE ;
else
return FALSE ;
}

0

Решение

Это ничего не про MFC. Прямой нативный код на C ++. Если у вас есть Visual Studio, вы сможете быстро создать консольное приложение c ++, скопировать и вставить этот код, а также скомпилировать и протестировать. Если нет, то получите бесплатный, но большой Windows SDK. Менее дружественный, чем VS, но есть компилятор, поэтому он должен направить вас в правильном направлении.

Низкоуровневые хуки не совсем удобны для отладчика, поэтому вам может потребоваться отследить или выйти из системы некоторых полезных утверждений.

Отредактировано: чтобы получить дескриптор модуля, вам понадобится что-то вроде этого:

HookModule = LoadLibrary(ModulePath);

HookProc HookFunction = GetProcAddress(HookModule, "GetMessageCallBack");

GetMessageHookHandle = SetWindowsHookEx(HookType.WH_GETMESSAGE, HookFunction, HookModule, 0);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]