SetWindowsHookEx总是返回0 安装失败
安装钩子老是失败......但钩自己又常郁闷,
搞全局的话老是返回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;
}