您好,匿名用户
随意问技术百科期待您的加入

windows钩子初级问题

0 投票

初学windows钩子遇到了问题,前来请教

问题概述:想监视按键,但按下键盘后调用不到DLL里的回调函数。

下面是钩子用到的DLL的源码:

#include <objbase.h>
#include <iostream>
using namespace std;

extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	cout << "KeyboardProc() is involked!" << endl;

	return CallNextHookEx(0, nCode, wParam, lParam);
}

BOOL APIENTRY DllMain(HANDLE hModel, DWORD dwReason, void* lpReserved)
{
	switch (dwReason)
	{
		case DLL_PROCESS_ATTACH:
			cout << "dll is attached!" << endl;
			break;
		case DLL_PROCESS_DETACH:
			cout << "dll is detached!" << endl;
			break;
		default:
			break;
	}

	return true;
}

下面是主程序的源码:

#include <windows.h>
#include <iostream>
using namespace std;

void main()
{
	HINSTANCE hInst = LoadLibrary("testdll.dll");

	if (NULL == hInst)
	{
		return;
	}

	HOOKPROC hkprcSysMsg = (HOOKPROC)GetProcAddress(hInst, "_KeyboardProc@12");
	cout << "hkprcSysMsg = " << hkprcSysMsg << endl;

	static HHOOK hhookSysMsg = SetWindowsHookEx(WH_KEYBOARD, hkprcSysMsg, hInst, 0);
	cout << "hhookSysMsg = " << hhookSysMsg << endl;

	Sleep(5000);

	UnhookWindowsHookEx(hhookSysMsg);
}

注:DLL中KeyboardProc的函数名是_KeyboardProc@12,我用dumpbin看过了。运行时hkprcSysMsg和hhookSysMsg都不是0。

现在的问题是运行起来后我按键调不到函数KeyboardProc(即打印不出"KeyboardProc() is involked!"这句话)。

请指点,谢谢。

用户头像 提问 2014年 1月21日 @ Cassiopeia 上等兵 (317 威望)
分享到:

你的回答

隐私保护: 您的邮箱仅用于发送系统通知。
请输入验证码:
    图片验证码看不清?
登录注册后不会被要求输入验证码。

提一个问题:

相关问题

0 投票
1 回复 39 阅读
0 投票
0 回复 19 阅读
用户头像 提问 2013年 10月27日 @ Malphite 上等兵 (306 威望)
0 投票
0 回复 3 阅读
用户头像 提问 2014年 5月29日 @ Poppy 上等兵 (395 威望)
0 投票
1 回复 60 阅读
用户头像 提问 2012年 12月1日 @ Karma 上等兵 (229 威望)
0 投票
1 回复 40 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...