dll代码如下:    //我要实现锁定键盘的,所以用的是全局的钩子HHOOK g_KeyHook = NULL;//保存键盘钩子的句柄
LRESULT CALLBACK KeyHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
return true;       //这里用来锁定键盘功能
}
BOOL UmaFunction::SetKeyBoard()   //UmaFuntion为一个类
{ if(g_KeyHook == NULL)
{ g_KeyHook =    ::SetWindowsHookEx(WH_KEYBOARD,KeyHookProc,::GetModuleHandle(_T("UmaFunction")),0);

return TRUE;
}
主程序
UmaFuntion fun;
fun.SetKeyBoard();我觉得应该没有问题啊,我之前这样写了可以用,现在的问题是安装成功了,可是钩子函数系统不自动回调造成不可以实现,我郁闷了好久,也没有结果啊。

解决方案 »

  1.   

    #include<windows.h>LRESULT CALLBACK LowLevelKeyboardProc(
    int nCode,
    WPARAM wParam,
    LPARAM lParam
    )
    {
    return 1;
    }int _tmain(int argc, _TCHAR* argv[])
    {
    MSG msg;
    SetWindowsHookExW(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandleW(0),0);
    while(GetMessageW(&msg,0,0,0))DispatchMessageW(&msg);
    return 0;
    }
      

  2.   

    我测试过g_KeyHook是正确的,已经不为NULL了,用getlasterror测试过,这段代码放到一个新工程里面,同样也是dll,和程序,功能就可能实现,我想不通,这个功能之前是可以用的,现在不能了,代码没有做过改变,你上面说的方法我也试过不行啊。在下钩子的过程我全部测试过,没有问题,只是函数没有反应。我怀疑是工程坏了。你觉得呢。
    现在我说一下,我做的这个项目,这些代码是如何做的.
    一个支持MFC的dll,代码就是上面的那段。
    主程序是一个MFC,只不过去掉了界面(项目不要),主程序以服务的方式启动,通过dll导入类,声明对象,点调的方式来完成功能,这样写一直都是可以实现的,不知道为什么现在却实现不了,很是郁闷。上面的那段代码,放在一个dll,和主程序为MFC的程序中,就可以实现锁键盘功能。你觉得是什么问题。
      

  3.   

    锁键盘可以用WH_KEYBOARD_LL,这样不需要dll,你可以看#2的代码
    你刚才说以服务的方式启动,不知道你有没有为UI做特殊处理,比如设置为交互式服务,因为服务通常情况是不能做和用户交互有关的事情
      

  4.   

    我已经为UI做特殊处理了,这里已经可以和桌面进行交互了,我这还有一个隐藏界面通过钩子锁定特殊按键实现都是可以的,这些处理我全部做了,因为这些功能在去年已经全部实现,给老板看过了,可今天来了钩子不能用了,想不通,因为我就是按照模块来的,并且是来实现全局的,和所有线程相关,必须要用到DLL,你之前有没有遇到过这样的问题啊我的QQ710912527  交流一下啊。
      

  5.   

    你创建一个新的工程执行#2的代码,全局的WH_KEYBOARD_LL是不需要dll的
      

  6.   

    兄弟,我试过了你的方法,是可以实现的,可是我们现在项目组里采用的是一个dll,在它里面还有很多其他功能,框架应该这样设计了,没有方法改变了,这个DLL,是个类,里面包含了很多功能(包括这个锁键盘的),不能改变。我很想和你交流一下经验,请加下QQ710912527  谢谢。
      

  7.   

    可以把代码放在dll,用一个特定的exe去执行它
    您将添加以下好友:天道酬勤
    对方需要你回答一下验证问题:
    我的真实名字?