首页
社区
课程
招聘
我快疯了 全局钩子你怎么就不能工作呢?
发表于: 2011-3-14 22:29 4683

我快疯了 全局钩子你怎么就不能工作呢?

2011-3-14 22:29
4683
*********************************DLL:::
#define _WIN32_WINNT 0x0500
#include<windows.h>
#include"DllMain.h"

#pragma data_seg (".shareddata")
    HHOOK g_hook=NULL;         //安装的鼠标勾子句柄
    HINSTANCE glhInstance=NULL; //DLL实例句柄
#pragma data_seg()

#pragma comment(linker,"/section:.shareddata,RWS")

BOOL APIENTRY DllMain(HMODULE hMoudle,DWORD msg,LPVOID lpReserved)
{

switch(msg)
{
case DLL_PROCESS_ATTACH:

         

       
        break;
case DLL_PROCESS_DETACH:
        break;
}
        glhInstance=hMoudle;

        return true;
}

void __declspec(dllexport) WINAPI InstallHook()
{
        g_hook=SetWindowsHookEx(WH_KEYBOARD_LL,GetMsgProc,glhInstance,0);
}

LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam)
{
        //Sleep(1000);
       
//return CallNextHookEx(hHook,code,wParam,lParam);
        return TRUE;
}
******************************EXE:

#include<windows.h>
#include<stdio.h>
#pragma comment(lib, "TestHookDll.lib")

void  WINAPI InstallHook();

int main()
{
InstallHook();

int c;
scanf("%i",c);

return 0;

}

调用InstallHook 毫无反应 毫无反应啊!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 859
活跃值: (309)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
2
你要什么反应啊
2011-3-14 23:08
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
应该勾到键盘消息 然后键盘响应不了啊 结果键盘依然能用。。
2011-3-15 00:36
0
雪    币: 306
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
return 0;
2011-3-15 01:38
0
雪    币: 31
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
*********************************DLL:::
#define _WIN32_WINNT 0x0500
#include<windows.h>
#include"DllMain.h"

#pragma data_seg (".shareddata")
    HHOOK g_hook=NULL;         //安装的鼠标勾子句柄
    HINSTANCE glhInstance=NULL; //DLL实例句柄
#pragma data_seg()

#pragma comment(linker,"/section:.shareddata,RWS")

BOOL APIENTRY DllMain(HMODULE hMoudle,DWORD msg,LPVOID lpReserved)
{

switch(msg)
{
case DLL_PROCESS_ATTACH:

   

  
  break;
case DLL_PROCESS_DETACH:
  break;
}
  glhInstance=hMoudle;

  return true;
}

void __declspec(dllexport) WINAPI InstallHook()
{
  g_hook=SetWindowsHookEx(WH_KEYBOARD_LL,GetMsgProc,glhInstance,0);
}

LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam)
{
  //Sleep(1000);
  
//return CallNextHookEx(hHook,code,wParam,lParam); 这俩句式注释掉了么?
  return TRUE;
}
******************************EXE:

#include<windows.h>
#include<stdio.h>
#pragma comment(lib, "TestHookDll.lib")

void  WINAPI InstallHook();//这个是在DLL中的吧!!

int main()
{
InstallHook();//调用DLL中的函数,LoadLibrary()获得DLL句柄,然后GetProcAddress得到挂钩函数地址。定义个函数指针,然后调用挂钩函数。
int c;
scanf("%i",c);
这是不得加个消息循环啊?
        while(GetMessage(&msg,0,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
return 0;

}

你试试改了看下,行不行!
2011-3-15 09:59
0
雪    币: 4423
活跃值: (3078)
能力值: ( LV10,RANK:175 )
在线值:
发帖
回帖
粉丝
6
return > 0 就对了,没错
除非你的 TRUE 被定义成了 -1 ?
还有可以把 SetWindowsHookEx 函数 HOOK 的类型换一下,试试WH_KEYBOARD
2011-3-15 10:27
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
还是不行!!!
另外我遇到一个问题:
我显示调用Dll,能得到dll句柄,但得不到函数地址。
        HMODULE hMod=  LoadLibrary("TestHookDll.dll");
        if(hMod==NULL)printf("%i\n",0);
         FARPROC pfn=GetProcAddress(hMod,"InstallHook");
        if(pfn==NULL)printf("%i\n",1);

而且我让DLL输出“InstallHook”,调用GetProcAddress(hMod,"InstallHook"); 不行
但是在如果让DLL按“?InstallHook@***”的方式输出符号的话,调用GetProcAddress(hMod,"?InstallHook**")就行了(而且还是没有钩子效果),这是怎么回事啊?

小弟曾用汇编写HookDLL能正常工作,现在却遇到了好多问题。。
2011-3-15 17:11
0
雪    币: 152
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我是新手。我是路过的。。
2011-3-15 18:22
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
终于好了 感谢大家代码是没有大问题的,但是我在拷贝dll过程中将一个旧版本的靠近了debug目录,之后的新版本拷在了工程目录,结果一直得不出结果,粗心大意害死人
2011-3-15 18:40
0
游客
登录 | 注册 方可回帖
返回
//