帮我看看这段代码

puhuofeie 2003-11-24 04:56:12
我用的是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;系统也对它们进行了处理!!

...全文
31 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
酒红绿叶 2003-11-27
  • 打赏
  • 举报
回复
WH_KEYBOARD_LL这个参数再2000,xp中都可以用把!!
2000用装sp3么?
拥着个参数是否有什么要求!?
请高手指点!
酒红绿叶 2003-11-25
  • 打赏
  • 举报
回复
GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) * 8) - 1);

这句话是什么意思!!??
另外
WH_KEYBOARD_LL只能在NT上用,,
是不是只能用这个参数???
谢谢楼上几位!!!
lovenoend 2003-11-24
  • 打赏
  • 举报
回复
HHOOK SetWindowsHookEx
( int idHook,HOOKPROC lpfn,
INSTANCE hMod,DWORD dwThreadId )

----参数idHook表示勾子类型,它是和勾子函数类型一一对应的。比如,WH_KEYBOARD表示安装的是键盘勾子,WH_MOUSE表示是鼠标勾子等等。

----Lpfn是勾子函数的地址。

----HMod是勾子函数所在的实例的句柄。对于线程勾子,该参数为NULL;对于系统勾子,该参数为勾子函数所在的DLL句柄。

---- dwThreadId 指定勾子所监视的线程的线程号。对于全局勾子,该参数为NULL。

----SetWindowsHookEx返回所安装的勾子句柄。

你看看返回是否成功
888atao 2003-11-24
  • 打赏
  • 举报
回复
用系统低级的钩子完成能实现的
SetWindowsHookEx时用WH_KEYBOARD_LL相应的还有WM_MOUSE_LL
其他的和正常HOOK一样
我用它可以屏蔽Alt+Tab
其他的肯定也是好用的
broadoceans 2003-11-24
  • 打赏
  • 举报
回复
SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyProc,hInst,0);
你的参数错了,应该为:
SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyProc,hInst,0);

May you succeed!
broadoceans 2003-11-24
  • 打赏
  • 举报
回复
////////////////////////////////////////////////
// 下面的代码表示这一部分在此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);
}

酒红绿叶 2003-11-24
  • 打赏
  • 举报
回复
是写在DLL里面的



#ifdef HOOK_EXPORTS
#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);//释放钩子
}



若有问题请指出,谢谢
yintongshun 2003-11-24
  • 打赏
  • 举报
回复
全局钩子必须写在DLL里面的
酒红绿叶 2003-11-24
  • 打赏
  • 举报
回复
if(!(hhk=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyProc,hInst,0)))


这个不久是全局的么!!???
酒红绿叶 2003-11-24
  • 打赏
  • 举报
回复
我是写在DLL里面了,,可是不行啊!!!!
系统键屏蔽不了啊 !!!!!!
请支援!!
vcforever 2003-11-24
  • 打赏
  • 举报
回复
全局钩子必须写在DLL里面!
tyzyx 2003-11-24
  • 打赏
  • 举报
回复
gz
broadoceans 2003-11-24
  • 打赏
  • 举报
回复
将钩子做成dll动态链接库形式即可

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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