键盘钩子无法屏蔽windows键。昨天弄了一个晚上。

按照孙鑫《vc++深入详解》hook那一章写的代码,部分代码是:
Hook工程的:
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F2==wParam)
{
SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hMouse);
UnhookWindowsHookEx(g_hKeyboard);
}
return 1;
}
void SetHook(HWND hwnd)
{
g_hWnd=hwnd;
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);
g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
}
还有一个Hook.def文件,之后生成了一个dll,
然后新建了一个对话框工程HookTest,部分代码:
_declspec(dllimport) void SetHook(HWND hwnd);
BOOL CHookTestDlg::OnInitDialog()
{ ....
SetHook(m_hWnd);
// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control
}
以上就是主要的代码了,我在网上看了几个,也是利用键盘hook实现的,只不过有的是用WH_KEYBOARD_LL钩子,但是我在xp中捕获不到。
看过这本书的应该都见过这个程序吧!
大家看看要怎么改才能屏蔽windows键呢??
要是有原来写过的,发给我也可以,我邮箱edgarwin_198858@126.com
谢谢大家了!!没有财富值了。。。

应该用低级键盘钩子。
我写了个示例程序,请下载。
http://cid-3ba16e78a53d2d3d.skydrive.live.com/self.aspx/VC++/KeyboardHook.zip
(请不要使用迅雷直接下载)
以下是部分参考代码,记得在在 stdafx.h中添加这一句,否知VC6编译不通过。
/*
stdafx.h文件的开头
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define _WIN32_WINNT 0x0500 //在 stdafx.h中添加这一句

#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
*/

/****************************************************************************
低级键盘钩子
****************************************************************************/
HHOOK LowLevelKeyboardHook=NULL; //钩子句柄

//低级键盘钩子
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam)
{
if (nCode<0 ) return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam);

if (wParam==WM_KEYDOWN)
{
int KeyCode=((KBDLLHOOKSTRUCT *) lParam )->vkCode;
trace( KeyCode );

if ( KeyCode == 91 )
{
trace("You Press the Win Key");
return 1;
}
}

return CallNextHookEx(LowLevelKeyboardHook,nCode,wParam,lParam); //传递钩子信息
}

void CDemoDlg::OnButton1()
{
//start Low Level Keyboard hook
LowLevelKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
ASSERT(LowLevelKeyboardHook);

}

void CDemoDlg::OnButton2()
{
//stop Low Level Keyboard hook
VERIFY(UnhookWindowsHookEx(LowLevelKeyboardHook));

}
温馨提示:内容为网友见解,仅供参考
无其他回答

键盘钩子无法屏蔽windows键。昨天弄了一个晚上。
endif \/\/ _MSC_VER > 1000 define _WIN32_WINNT 0x0500 \/\/在 stdafx.h中添加这一句 define VC_EXTRALEAN \/\/ Exclude rarely-used stuff from Windows headers \/ \/ 低级键盘钩子 \/ HHOOK LowLevelKeyboardHook=NULL; \/\/钩子句柄 \/\/低级键盘钩子 LRESULT CALLBACK LowLevelKeyboardProc(int ...

怎样屏蔽键盘上的WIN键
在窗口的右侧找到“关闭Windows键热键”并双击打开。在打开的窗口中选择已启用,然后点击确定即可。

c#键盘钩子怎么做到防止游戏屏蔽
要钩子防止被游戏屏蔽,方式其实也简单,用另外一个程序盖上.例如.所谓全局钩子.你不要在游戏加载时加载.可以尝试完全修改键盘按键逻辑.再例如..不要直接尝试与游戏对接.游戏的反外挂其实也简单.反你的钩子更简单.反你钩子只需要定义出键盘本身的偏移量对比即可..亲.别忘了.游戏自己本身就能设置改键 那...

易语言api屏蔽win键
具体来说,屏蔽Win键的功能通常涉及到系统级的键盘钩子技术。通过设置一个低级别的键盘钩子,程序可以捕获并处理所有的键盘输入事件。当检测到Win键被按下时,钩子函数可以选择性地忽略这个按键事件,从而达到屏蔽Win键的效果。在易语言中,这通常需要使用外部库或者通过DLL命令调用等方式来实现对Windows API...

电脑键盘失灵如何修复
1.更新BIOS至最新版本,更新Windows Update。2.在设备管理器中重新安装驱动程序 2-1. 在Windows搜寻栏输入[设备管理器]①,然后点选[打开]②。请点击输入图片描述 2-2. 卸载键盘的驱动程序。点击[键盘]装置类型旁边的三角形③。于[键盘名称]点击鼠标右键④,并点选[卸载设备]⑤。请点击输入图片描述 ...

C#中如何屏蔽系统热键
这个有点类似我当时做的机房管理系统里面的锁屏。我当时是和别人合作,我们用api+hook做的。每一个键都有固定的值,c#可以接收这些值,因为我们是锁屏,所以把这些值都屏蔽掉了。你要屏蔽热键的话,我觉得你可以把这些键的值存进数组,然后用循环遍历找这些是否匹配,匹配的话把它屏蔽掉 ...

XP系统键盘windows键被屏蔽了怎么恢复
2、 编写一个键盘驱动程序;本文例子程序使用的方法。 3、 用自己的程序代替任务管理器程序TaskMgr.exe。 屏蔽Ctrl+Alt+Del解决方案的具体实现细节请参考本文的例子代码。 下面让我们来解决屏蔽任务切换键序列的问题,这些键序列包括Alt+Tab、Ctrl+Esc、Alt+Esc、VK_LWIN\/VK_RWIN以及任务栏。在很早以前的Window 3.1...

键盘钩子能屏蔽Alt+Tab组合键吗
用低级键盘钩子!能够屏蔽所有键!包括 ctrl+alt+delete g_LowLevelKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);低级键盘钩子 更底层 。而且可以放在exe程序里即可。不需要放在dll里。

用低层键盘钩子可以屏蔽所有按键吗?
可以的.但这样就会出现一个问题.

钩子拦截组合键
int id, \/\/ hot key identifier UINT fsModifiers, \/\/ key-modifier options UINT vk \/\/ virtual-key code );注册热键,然后处理 WM_HOTKEY 消息,记得 用BOOL UnregisterHotKey(HWND hWnd, \/\/ handle to window int id \/\/ hot key identifier );撤消注册的热键。

相似回答