SetWindowsHookEx总是返回0 安装失败

liuyh83 2010-10-13 10:46:29
安装钩子老是失败......但钩自己又常郁闷,
搞全局的话老是返回0,GetLastError()也是返回0....各位大帮忙看看什么原因...
调试工具VS2008
#pragma once

// 以下宏定义要求的最低平台。要求的最低平台
// 是具有运行应用程序所需功能的 Windows、Internet Explorer 等产品的
// 最早版本。通过在指定版本及更低版本的平台上启用所有可用的功能,宏可以
// 正常工作。

// 如果必须要针对低于以下指定版本的平台,请修改下列定义。
// 有关不同平台对应值的最新信息,请参考 MSDN。
#ifndef WINVER // 指定要求的最低平台是 Windows Vista。
#define WINVER 0x0600 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINNT // 指定要求的最低平台是 Windows Vista。
#define _WIN32_WINNT 0x0600 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINDOWS // 指定要求的最低平台是 Windows 98。
#define _WIN32_WINDOWS 0x0410 // 将此值更改为适当的值,以适用于 Windows Me 或更高版本。
#endif

#ifndef _WIN32_IE // 指定要求的最低平台是 Internet Explorer 7.0。
#define _WIN32_IE 0x0700 // 将此值更改为相应的值,以适用于 IE 的其他版本。
#endif

#define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
// Windows 头文件:
#include <windows.h>
#include <WinUser.h>
#include <stdio.h>
#include <stdlib.h>
// TODO: 在此处引用程序需要的其他头文件


#define Dll_Export extern "C" __declspec(dllexport)

HINSTANCE hModule=NULL;
UINT Msg=0;
HMODULE hInstLibrary =NULL;
UINT WM_HXWDLLWX_QQBTX=NULL;
LPCTSTR Str=NULL;
HHOOK g_hook=NULL;
typedef int (*ULPRET)(LPCTSTR);
Dll_Export long CALLBACK HookProc(int code, WPARAM wp,LPARAM lp);
BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved )
{

switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//hModule=hModule;

hInstLibrary= LoadLibrary("hxwdllwx.dll");
WM_HXWDLLWX_QQBTX=RegisterWindowMessage("WM_HXWDLLWX_QQBTX");
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
if(hInstLibrary!=NULL)
{
FreeLibrary(hInstLibrary);
}
break;
case DLL_THREAD_DETACH:

break;
}
hModule=(HINSTANCE)hModule; //得到DLL实例
return TRUE;
}

/*
*功能:设置系统钩子
*hookType -- 钩子类型
*hookproc -- 钩子回调函数
*/

//Dll_Export HHOOK SetHook( int hookType,int threadId)
Dll_Export HHOOK SetHook()
{
char ch[10];
//return g_hook=SetWindowsHookEx(hookType, HookProc,GetModuleHandle("Mydll.dll"), threadId);
HINSTANCE ahModule=GetModuleHandle("Mydll.dll");
g_hook=SetWindowsHookEx(WH_CALLWNDPROC, HookProc,hModule, 0);
//g_hook=SetWindowsHookEx(WH_KEYBOARD_LL, HookProc,ahModule, 0);
itoa(GetLastError(),ch,10);
strcat(ch,"aaaa");
MessageBox(NULL,ch,NULL,0);
return g_hook;
}

/**/ /*
*功能:注销钩子
*hook -- 钩子句柄
*/
Dll_Export BOOL UnHook()
{
if (g_hook != NULL)
return UnhookWindowsHookEx(g_hook);
else
return 0 ;
}

Dll_Export long CALLBACK HookProc(int code, WPARAM wp,LPARAM lp)
{
CWPSTRUCT *pWp = (CWPSTRUCT*)lp;

if(WM_HXWDLLWX_QQBTX==pWp->message)
{
if(hInstLibrary!=NULL)
{
ULPRET fpFun =(ULPRET)GetProcAddress(hInstLibrary,"DLLGetPubString");

if(Str!=NULL)
{
(*fpFun)(Str);
}
}
}
return CallNextHookEx(g_hook,code,wp,lp);
}


Dll_Export int WINAPI SetPubString(LPCTSTR tmpStr)
{
Str=tmpStr;

return 1;
}
...全文
507 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcfjs 2013-05-28
  • 打赏
  • 举报
回复
楼主解决了麽?我这里两个程序也是执行那句,但是有一个成功(网上的程序),一个失败(我写的)...求解啊
liuyh83 2010-10-14
  • 打赏
  • 举报
回复
其实不长关键就是看这段
g_hook=SetWindowsHookEx(WH_CALLWNDPROC, HookProc,hModule, 0);
都不知那出问题了...

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧