首页 文章

Windows Hook过程出现问题

提问于
浏览
0

我写了一个小应用程序来了解事件发生的时间 . 我在main.c中安装了钩子程序,然后程序等待10秒并取下钩子 . 在暂停期间,我(尝试)生成一些事件,并且对于每一个事件,在log.txt中打印“x”shuld . 我在msdn中读了钩子参数,我在命令行中使用Mingw,在Win7上...(也许)抱歉我的BAD英语:'( . 我基本上搜索了教程,但我什么都没发现 .

// 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;
}

我认为有一个错误的错误,代码很容易,所以在log.txt中,我只找到每行类型的挂钩“Ok,DLL被调用”(不仅仅是WH_KEYBOARD) . 你能帮我吗?

EDIT:

好吧,我用w / a更改了“fopen”mod ...为什么我要写一个消息循环?这不是一个winows程序,系统不会为每个事件调用钩子程序吗?我无法理解为什么我的钩子程序没有被调用,你能修改我的代码所以我知道何时调用钩子程序?

ps . :我正在阅读关于从msdn挂钩的文章,你知道另一个好/更好的地方去学习吗?

1 回答

  • 2
    • 您正在安装系统范围的挂钩 - 该文件可以由多个进程打开和写入,所有这些进程都会覆盖其他进程创建的文件 .

    • 您没有消息循环,因此不会为您的应用程序调用该挂钩 . 调用GetMessage / PeekMessage时会触发WH_KEYBOARD

相关问题