在线等候~~~~关于屏蔽按键的问题~请赐教
请问那位大哥可以告诉我如何在windows2000/XP下屏蔽WIN键,在线等候! 问题点数:100、回复次数:6Top
1 楼xuv2002(XuWei)回复于 2003-08-04 09:46:59 得分 50
钩子
程序代码如下
下面得代码锁定了左右 win 键值
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused
extern "C" __declspec (dllexport) bool __stdcall GetKBState(bool disable);
HHOOK OldHook=NULL;
HINSTANCE hInst=NULL;
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam);
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if (reason==DLL_PROCESS_ATTACH){
hInst = hinst;
}
else if(reason==DLL_PROCESS_DETACH)
if (OldHook)
UnhookWindowsHookEx(OldHook);
return 1;
}
bool __stdcall GetKBState(bool disable)
{
//这个函数是用来启动钩子,参数disable 为true 启动 否则钩子关闭
if (disable) {
if (OldHook == NULL)
OldHook = SetWindowsHookEx(WH_KEYBOARD_LL,
(HOOKPROC)KeyProc, hInst, NULL);
return OldHook != NULL;
}
else {
if (OldHook && UnhookWindowsHookEx(OldHook))
OldHook = NULL;
return OldHook == NULL;
}
}
//这段代码就是我用来屏蔽Winnt 系统的键盘的钩子处理函数
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *key = (KBDLLHOOKSTRUCT*)lParam;
//下面就是需要响应得键值
switch(key->vkCode){
case 91:
case 92: return 1; //左右WIN键的键值,想屏蔽其他键也可将其键值写在这里,return 1 表示屏蔽
default :
return CallNextHookEx(OldHook,code,wParam,lParam);//或是return 0
}
}
Top
2 楼oldboot(至尊无上)回复于 2003-08-04 19:44:45 得分 0
//这段代码就是我用来屏蔽Winnt 系统的键盘的钩子处理函数
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *key = (KBDLLHOOKSTRUCT*)lParam;
//下面就是需要响应得键值
switch(key->vkCode){
case 91:
case 92: return 1; //左右WIN键的键值,想屏蔽其他键也可将其键值写在这里,return 1 表示屏蔽
default :
return CallNextHookEx(OldHook,code,wParam,lParam);//或是return 0
}
}
###################怎么声明啊?
Top
3 楼xuv2002(XuWei)回复于 2003-08-05 10:06:54 得分 30
在bcb 新建面板里面选择DLL Wizard 来生成一个dll 工程
上边就是生成一个dll 的程序代码
上边的程序
可以改一改,去掉那个函数
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused
//extern "C" __declspec (dllexport) bool __stdcall GetKBState(bool disable);
//这个函数可以去掉
HHOOK OldHook=NULL;
HINSTANCE hInst=NULL;
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam);
//这里实现声明钩子函数
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if (reason==DLL_PROCESS_ATTACH){
hInst = hinst;
OldHook = SetWindowsHookEx(WH_KEYBOARD_LL,
(HOOKPROC)KeyProc, hInst, NULL);
//导入dll 时候就启动钩子
}
else if(reason==DLL_PROCESS_DETACH)
if (OldHook)
UnhookWindowsHookEx(OldHook);
//释放dll 的时候关闭钩子
return 1;
}
//KeyProc 就是钩子处理的函数
//其函数原型如下:
/*
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
);
The KeyboardProc hook procedure is an application-defined or library-defined callback function the system calls whenever an application calls the GetMessage or PeekMessage function and there is a keyboard message (WM_KEYUP or WM_KEYDOWN) to be processed.
上边的意思大概就是说钩子捕捉到的WM_KEYUP KEYDOWN 消息 都交给这个函数处理
*/
//这段代码就是用来屏蔽Winnt 系统的键盘的钩子处理函数
//有关于这方面的可以到msdn 或是 bcb 的win32 帮助里面
//按 KeyboardProc 关键字 和SetWindowsHookEx 关键字 查询
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *key = (KBDLLHOOKSTRUCT*)lParam;
//下面就是需要响应得键值
switch(key->vkCode){
case 91:
case 92: return 1; //左右WIN键的键值,想屏蔽其他键也可将其键值写在这里,return 1 表示屏蔽
default :
return CallNextHookEx(OldHook,code,wParam,lParam);//或是return 0
}
}
Top
4 楼oldboot(至尊无上)回复于 2003-08-05 20:26:00 得分 0
怎么用button控制他的开启和关闭啊?
Top
5 楼xuv2002(XuWei)回复于 2003-08-05 20:54:13 得分 20
直接可以这样(采用后面的一种编写dll 的方法,前面一种太麻烦,用不着)
开启钩子
LoadLibrary("xxx.dll"); 这个xxx.dll 就是你用上边代码生成的dll
关闭
使用FreeLibrary("xxx.dll");
Top
6 楼Yans(跟贴是一种友谊)回复于 2003-08-06 09:37:38 得分 0
怎样屏蔽ctrl+alt+del按键呢?不管在windows的任何版本下。Top




