Я написал небольшое приложение, чтобы знать, когда происходит событие. В main.c процедура ловушки устанавливается, затем программа ждет 10 секунд и снимает ловушку. Во время паузы я (пытаюсь) генерировать какое-то событие, и для каждого должно быть напечатано «x» в log.txt. Я прочитал аргумент ловушки в MSDN, я работаю с Mingw из командной строки, на Win7 ... и (возможно) извините за мой плохой английский: '(.
Я в основном искал учебники, но ничего не нашел.
// my DLL's code
#include <windows.h>
#include <stdio.h>
#include "dll_header.h"
EXPORT LRESULT CALLBACK hookproc (int nCode, WPARAM wParam, LPARAM lParam){
FILE *fp = fopen ("log.txt", "wb");
fprintf(fp, "\nx");
fclose(fp);
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
FILE *fp = fopen ("log.txt", "wb");
fprintf(fp, "\nOk, the DLL is called");
fclose(fp);
return TRUE;
}
и
// this is the main.c
#include <windows.h>
#include "dll_header.h"
#include <stdio.h>
EXPORT LRESULT CALLBACK hookproc(int nCode, WPARAM wParam, LPARAM lParam);
int main(){
HMODULE hm = LoadLibrary ("lib.dll");
printf("\n%x", hm); // for my feedback
HHOOK hh = SetWindowsHookEx (WH_KEYBOARD, hookproc, hm, 0);
printf("\n%x", hh); // for my feedback
Sleep(10000);
BOOL b = UnhookWindowsHookEx (hh);
printf("\n%x", b); // for my feedback
return 0;
}
Я думаю, что есть ошибка obvios, потому что код очень прост, поэтому в log.txt я нахожу только строку «Ok, DLL вызывается» для каждого типа хука (не только для WH_KEYBOARD). Ты можешь мне помочь?
EDIT:
Хорошо, я изменил мод "fopen" с помощью w / a ... почему я должен написать цикл обработки сообщений? Это не процедура winows, разве система не вызывает процедуру подключения для каждого события? Я не могу понять, почему моя подключаемая процедура не вызывается, можете ли вы изменить мой код, чтобы я знал, когда вызывается подключаемая процедура ??
ps .: я читаю статьи о подключении из msdn, знаете ли вы другое хорошее / лучшее место для изучения этого?