Функция обратного вызова, используемая в SetWindowsHookEx, вызывается только один раз

Я нахожусь в процессе написания dll-внедренного глобального хука клавиатуры, но столкнулся с проблемой, которую я, кажется, не могу решить. До сих пор у меня есть одна программа, которая отвечает за загрузку DLL и вызов SetWindowsHookEx, и конечно же DLL для инъекции.

DLL выглядит так:

#include "stdafx.h"#include <stdio.h>
#include <windows.h>
#include <string>

using namespace std;

INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved) {
switch(Reason) {
case DLL_PROCESS_ATTACH:
//fprintf(file, "DLL attach function called.\n");
break;
case DLL_PROCESS_DETACH:
//fprintf(file, "DLL detach function called.\n");
break;
case DLL_THREAD_ATTACH:
//fprintf(file, "DLL thread attach function called.\n");
break;
case DLL_THREAD_DETACH:
//fprintf(file, "DLL thread detach function called.\n");
break;
}

return TRUE;
}

extern "C" __declspec(dllexport) int meconnect(int code, WPARAM wParam, LPARAM lParam) {

if (code == HC_ACTION)
{
FILE *file;
string c;
c += (char)wParam;
fopen_s(&file, "c:\\temp2.txt", "a+");
fprintf(file, c.c_str());
fclose(file);
}
return(CallNextHookEx(NULL, code, wParam, lParam));
}

Основная программа выглядит так:

#include <Windows.h>
#include <iostream>
#include <SDKDDKVer.h>

using namespace std;

void CheckForExit(HHOOK handle);

int main()
{

/*
* Load library in which we'll be hooking our functions.
*/
HMODULE dll = LoadLibrary(L"dllinject.dll");
if (dll == NULL) {
printf("The DLL could not be found.n");
//getchar();
return -1;
}

/*
* Get the address of the function inside the DLL.
*/
HOOKPROC addr = (HOOKPROC)GetProcAddress(dll, "meconnect");
if (addr == NULL) {
printf("The function was not found.n");
//getchar();
return -1;
}

DWORD id = GetCurrentThreadId();
HHOOK handle = SetWindowsHookEx(WH_KEYBOARD, addr, dll, 0);

if (handle == NULL) {
printf("The KEYBOARD could not be hooked.n");
}

/*
* Unhook the function.
*/
system("pause");
UnhookWindowsHookEx(handle);
return 0;
}

0

Решение

Задача ещё не решена.

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

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

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