我用的是WH_KEYBOARD参数,,
if(!(hhk=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyProc,hInst,0)))
{ //安装钩子
return FALSE;
}LRESULT KeyProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if( wParam == VK_F12 )
{
UnhookWindowsHookEx(hhk);
}
return 1;//也就是屏蔽一切非系统键,,当按F12时解锁,,,但是不行,不知道为什么
//UnhookWindowsHookEx(hhk);无效,,????????????????????????} //这些都是在DLL文件里得!!!!!!!!
1. 我上面的程序为什么不能结束钩子!
2.用钩子的 return 1;屏蔽不料系统键 Alt Shift Delete Win Tab等等
这些系统键,即使我return 1;系统也对它们进行了处理!!
if(!(hhk=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyProc,hInst,0)))
{ //安装钩子
return FALSE;
}LRESULT KeyProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if( wParam == VK_F12 )
{
UnhookWindowsHookEx(hhk);
}
return 1;//也就是屏蔽一切非系统键,,当按F12时解锁,,,但是不行,不知道为什么
//UnhookWindowsHookEx(hhk);无效,,????????????????????????} //这些都是在DLL文件里得!!!!!!!!
1. 我上面的程序为什么不能结束钩子!
2.用钩子的 return 1;屏蔽不料系统键 Alt Shift Delete Win Tab等等
这些系统键,即使我return 1;系统也对它们进行了处理!!
系统键屏蔽不了啊 !!!!!!
请支援!!
这个不久是全局的么!!???
#define HOOK_API __declspec(dllexport)
#else
#define HOOK_API __declspec(dllimport)
#endif// This class is exported from the hook.dll
class HOOK_API CHook
{
public:
CHook(void);
// TODO: add your methods here.
};HOOK_API BOOL BeginR(); //开始记录按键;
HOOK_API BOOL StopR(); //结束记录extern HOOK_API int nHook;HOOK_API int fnHook(void);
#include "stdafx.h"
#include "hook.h"
#include "winuser.h"HINSTANCE hInst;
HHOOK hhk;
HHOOK hhm;LRESULT KeyProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if( wParam == VK_F12 )
{
StopR();
}
MessageBeep(-1);
return 1;}HOOK_API BOOL BeginR()
{ if(!(hhk=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyProc,hInst,0)))
{ //安装钩子
return FALSE;
}
return TRUE;
}HOOK_API BOOL StopR()
{
return UnhookWindowsHookEx(hhk);//释放钩子
} 若有问题请指出,谢谢
// 下面的代码表示这一部分在此DLL所有实例之间共享
// 低级键盘钩子一定是系统级的钩子
//
#pragma data_seg (".mydata")
HHOOK g_hHookKbdLL = NULL; // 钩子句柄
BOOL g_bBeep = FALSE; // 按下非法键时蜂鸣响铃
#pragma data_seg ()
#pragma comment(linker, "/SECTION:.mydata,RWS") // 告诉链接器:建立数据共享段//////////////////////////////////
// 低级键盘钩子
// 截获任务转换键:不传递直接返回
//
LRESULT CALLBACK MyTaskKeyHookLL(int nCode, WPARAM wp, LPARAM lp)
{
KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lp; if (nCode==HC_ACTION) {
BOOL bCtrlKeyDown =
GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) * 8) - 1); if ((pkh->vkCode==VK_ESCAPE && bCtrlKeyDown) || // Ctrl+Esc
// Alt+TAB
(pkh->vkCode==VK_TAB && pkh->flags & LLKHF_ALTDOWN) ||
// Alt+Esc
(pkh->vkCode==VK_ESCAPE && pkh->flags & LLKHF_ALTDOWN)||
(pkh->vkCode==VK_LWIN || pkh->vkCode==VK_RWIN)) { // 开始菜单
if (g_bBeep && (wp==WM_SYSKEYDOWN||wp==WM_KEYDOWN))
MessageBeep(0); // 蜂鸣
return 1; // 不再往CallNextHookEx传递,直接返回
}
}
return CallNextHookEx(g_hHookKbdLL, nCode, wp, lp);
}
你的参数错了,应该为:
SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyProc,hInst,0);May you succeed!
SetWindowsHookEx时用WH_KEYBOARD_LL相应的还有WM_MOUSE_LL
其他的和正常HOOK一样
我用它可以屏蔽Alt+Tab
其他的肯定也是好用的
( int idHook,HOOKPROC lpfn,
INSTANCE hMod,DWORD dwThreadId )----参数idHook表示勾子类型,它是和勾子函数类型一一对应的。比如,WH_KEYBOARD表示安装的是键盘勾子,WH_MOUSE表示是鼠标勾子等等。 ----Lpfn是勾子函数的地址。 ----HMod是勾子函数所在的实例的句柄。对于线程勾子,该参数为NULL;对于系统勾子,该参数为勾子函数所在的DLL句柄。 ---- dwThreadId 指定勾子所监视的线程的线程号。对于全局勾子,该参数为NULL。 ----SetWindowsHookEx返回所安装的勾子句柄。 你看看返回是否成功
另外
WH_KEYBOARD_LL只能在NT上用,,
是不是只能用这个参数???
谢谢楼上几位!!!
2000用装sp3么?
拥着个参数是否有什么要求!?
请高手指点!