钩子建立失败,SetWindowsHookEx总是返回值0!!
我是照着例子模仿做的,目的是注入记事本, F10呼出,键盘钩子。
程序没有提示任何错误或者警告, 但是就是卡在SetWindowsHookEx不动了,加上printf才输出错误值0,太奇怪了,大伙帮帮忙吧,谢谢了!
Dll Def部分:Output.def
LIBRARY "Dll_Functions"
EXPORTS
SetHook
Dll部分:Dll_Functions.dll.cpp
#include <windows.h>
#include <winuser.h>
#include <tchar.h>
#include <stdio.h>
#pragma data_seg("MySec")
HHOOK G_KeyHook = NULL;
HWND G_hWnd;
#pragma data_seg()
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam); //不加这句提示keyboardproc未声明
DWORD G_ThreadID = 0;
HANDLE G_hUIThread;
HHOOK SetHook(HWND hwnd, DWORD ThreadID)
{
G_hWnd = hwnd;
if(G_ThreadID != ThreadID)
{
G_KeyHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(TEXT("Dll_Functions.dll")), ThreadID);
printf("SetHook return : %ld\n",GetLastError()); //程序始终卡在这里,返回值输出为0!!!
if(G_KeyHook == 0)
{
printf("Hook attached error!\n %ld",GetLastError());
}
else
{
G_ThreadID = ThreadID;
return G_KeyHook;
}
}
else
{
printf("Hook had already been attached before!");
return 0;
}
return 0;
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(VK_F10 == wParam && ((DWORD)lParam & 0x40000000))
{
printf("F10 pressed, hook_KeyboardProc\n");
}
return CallNextHookEx(G_KeyHook, nCode, wParam, lParam);
}
测试部分:
头文件:TestExcute.h
#pragma comment(lib,"..\\Debug\\Dll_Functions.lib")
_declspec(dllimport) HHOOK SetHook(HWND hWnd,DWORD ThreadID);
执行:HookExecute.cpp
#include<windows.h>
#include <tchar.h> //UNICODE SUPPORT
#include <stdio.h>
#include"TestExcute.h"
void main()
{
HHOOK ExcuteHook;
HWND hwnd = ::FindWindow(TEXT("notepad"),NULL);
if( hwnd == NULL)
{
printf ("Not Run\n");
return;
}
DWORD ProcessID = 0;
DWORD ThreadID = GetWindowThreadProcessId(hwnd,&ProcessID);
ExcuteHook = SetHook(hwnd, ThreadID);
}