首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言全局键盘钩子(大牛)

2012-06-21 
关于C语言全局键盘钩子(在线等大牛)写了一个关于C语言全局钩子的代码,但是敲键盘没反映啊…………C/C++ code//

关于C语言全局键盘钩子(在线等大牛)
写了一个关于C语言全局钩子的代码,但是敲键盘没反映啊…………

C/C++ code
// dllmain.cpp : 定义 DLL 应用程序的入口点。#include "stdafx.h"#include <windows.h>#include "Hook.h"#include <stdio.h>static HHOOK hkb=NULL;HINSTANCE hins; //钩子函数所在模块的句柄BOOL APIENTRY DllMain( HMODULE hModule,                       DWORD  ul_reason_for_call,                       LPVOID lpReserved                     ){    switch (ul_reason_for_call)    {    case DLL_PROCESS_ATTACH:        installhook();        break;    case DLL_THREAD_ATTACH:    case DLL_THREAD_DETACH:    case DLL_PROCESS_DETACH:        break;    }    return TRUE;}//第一个参数指定钩子的类型,因为我们只用到键盘操作所以设定为WH_KEYBOARD;//第二个参数将钩子函数的入口地址指定为KeyboardProc,当钩子钩到任何消息后便调用这个函数,即当不管系统的哪个窗口有键盘输入马上会引起KeyboardProc的动作;//第三个参数是钩子函数所在模块的句柄;//最后一个参数是钩子相关函数的ID用以指定想让钩子去钩哪个线程,为0时则拦截整个系统的消息;BOOL installhook(){    printf("install hook\n");    hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);    if (hkb = NULL)    {        printf("set windows hook failed!\n");    }    else    {        printf("set windows hook ok!\n");    }    return TRUE;}LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){        printf("process has been executed\n");        if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))        {            printf("%c has been pressed!\n", wParam);            switch(wParam) //键盘按键标识            {                case 'G':                    MessageBox(NULL, TEXT("g has been pressed!"), TEXT("message"), MB_OK);                    break; //当数字键1被按下            }        }        LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );        return RetVal;}


[解决办法]
据说全局钩子必须放在DLL中实现。
[解决办法]
探讨

据说全局钩子必须放在DLL中实现。

热点排行