首页
社区
课程
招聘
[原创]Win键屏蔽
发表于: 2006-12-29 13:57 9886

[原创]Win键屏蔽

2006-12-29 13:57
9886

这个在Unpack已经发过了.
为了更多的人看到,也发看雪吧.
还是那句话,麻雀虽小,但涉及的东西也不少了.
HOOK的应用.
分为VC和ASM两个版本.ASM写米写HOOK部分,原因是我导出时函数名米让编译器改变.
都在这一个包里了.

2006/12/27重写,同时移植了asm版
感谢我的好友Jampe
贴VC一部分代码.主要都在附件了.


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
不错。
2006-12-29 14:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
收藏一份,顺便问LZ知道如何屏蔽系统的Ctrl+Alt+Del组合按键吗
2006-12-29 15:32
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4

#define _WIN32_WINNT 0x0400 //使用PKBDLLHOOKSTRUCT结构必须包含

这句应该放在"#include <windows.h>"的前面.
2006-12-29 21:20
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
很奇怪的是,程序必须创建窗口,hook才起作用.
没有窗口或控制台的情况键盘屏蔽无效,而且还使键盘反应迟钝.
2006-12-29 21:40
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
精简版
#pragma comment(linker,"/SUBSYSTEM:windows /ENTRY:main")
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <stdio.h>
HHOOK g_hh;
LRESULT CALLBACK KeybordProc(int code,WPARAM wp,LPARAM lp)
{
	if(code==HC_ACTION&&wp==WM_KEYDOWN)
	{
		PKBDLLHOOKSTRUCT pKey=(PKBDLLHOOKSTRUCT)lp;
		if(pKey->vkCode==VK_LWIN||pKey->vkCode==VK_RWIN)
			return TRUE;
	}
	return CallNextHookEx(g_hh,code,wp,lp);
}
void main()
{
	HHOOK g_hh=SetWindowsHookEx(WH_KEYBOARD_LL,KeybordProc,(HINSTANCE)0x400000,0);
	if(!g_hh) return;
	MessageBox(0,"Now hooking your win keys...","HOOK",0);
	UnhookWindowsHookEx(g_hh);
}
2006-12-29 21:48
0
雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
玩魔兽时Win键老碍事,正打算把Win键挖了呢。
这下省了
2006-12-30 04:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不错  收藏一份
2006-12-30 09:31
0
雪    币: 253
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
最初由 dwing 发布
很奇怪的是,程序必须创建窗口,hook才起作用.
没有窗口或控制台的情况键盘屏蔽无效,而且还使键盘反应迟钝.

最初由 dwing 发布
精简版
[CODE]
#pragma comment(linker,"/SUBSYSTEM:windows /ENTRY:main")
#define _WIN32_WINNT 0x0400
#include <windows.h>
........

#define _WIN32_WINNT 0x0400
#include <windows.h>
已经改了.
在我这没有任何问题,
你的精简版虽然不错,但是多少有点问题,呵呵,具体什么问题.自己看吧.
keyboardproc and lowlevelkeyboardproc 是不同的...
2006-12-30 11:40
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
最初由 qxtianlong 发布
#define _WIN32_WINNT 0x0400
#include <windows.h>
已经改了.
在我这没有任何问题,
你的精简版虽然不错,但是多少有点问题,呵呵,具体什么问题.自己看吧.
........


你说错了,他用的就是低级钩子,跟函数名称没有关系,当然不做成DLL的话就只能阻挡自身的输入

另外如果有DI游戏用到WIN键(当然这只是个假设 ),那么钩子是无效的
如果DI的独占模式被开启,那么任何BLOCK都会失效

抛去权限不谈,最好的解决方法当然是写过滤驱动
2006-12-30 11:48
0
雪    币: 253
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
DI的话也容易,对于游戏工作者还难得到么.哇哈哈
不过我认为对消息的获得方式是不懂的.
虽然是用的WH_KEYBOARD_LL
2006-12-30 12:04
0
雪    币: 243
活跃值: (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
最初由 dwing 发布
很奇怪的是,程序必须创建窗口,hook才起作用.


This hook is called in the context of the thread that installed it. The call is made by sending a message to the thread that installed the hook. Therefore, the thread that installed the hook must have a message loop.

最初由 dwing 发布

没有窗口或控制台的情况键盘屏蔽无效,而且还使键盘反应迟钝.


The hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key:
HKEY_CURRENT_USER\Control Panel\Desktop

The value is in milliseconds. If the hook procedure does not return during this interval, the system will pass the message to the next hook.
2006-12-31 17:54
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
最初由 edisonH 发布
This hook is called in the context of the thread that installed it. The call is made by sending a message to the thread that installed the hook. Therefore, the thread that installed the hook must have a message loop.

The hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key:
........

Thanx!
2006-12-31 20:23
0
游客
登录 | 注册 方可回帖
返回
//