请问如何拦截Ctrl、Shift、Alt、Win键?
目的是不让它执行1、如果利用keyDown或keyUP事件判断Ctrl、Shift、Alt:
如:判断Shift值为3(即按了Ctrl+Shift),若按了Ctrl+Shift虽然判断了,但它已经执行了(即已经切换了输入法)。现想既要禁用它,也不让它执行2、至于Win键(即Ctrl与Alt中间那个)我就无从下手不知道SendMessage这个函数能不能实现???????
请大家帮帮忙
目的是不让它执行1、如果利用keyDown或keyUP事件判断Ctrl、Shift、Alt:
如:判断Shift值为3(即按了Ctrl+Shift),若按了Ctrl+Shift虽然判断了,但它已经执行了(即已经切换了输入法)。现想既要禁用它,也不让它执行2、至于Win键(即Ctrl与Alt中间那个)我就无从下手不知道SendMessage这个函数能不能实现???????
请大家帮帮忙
我朋友的主页,上面有一个屏蔽win键的程序,可以看看怎么做的。
另外欢迎访问我的主页:http://hesicong2004.533.net
可以锁住 win2000 和winxp
你好,你能给这样的VC的源程序(实例)我吗[email protected]谢谢
我有VC实现的源代码。
VC中用低级键盘钩子实现屏蔽WIN键,以及ALT+TAB键。
用hook我试了不能实践,请帮忙解决
kugou123(酷狗 闭关学习VC++):
请贴VC的代码,让我学习一下
谢谢
但是热键,例如CtrlAltDel,CtrlAtlEsc等等要用远程注入热键处理程序的窗口过程的办法来捕获和处理
http://blog.csdn.net/biku/archive/2004/06/26/27156.aspx
请帮忙
HINSTANCE hInstance = NULL;void WINAPI StartHook();
void WINAPI StopHook();
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
hInstance = (HINSTANCE)hModule;
return TRUE;
}LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
return true;
}void WINAPI StartHook()
{
hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstance, 0);
}void WINAPI StopHook()
{
UnhookWindowsHookEx(hHook);
}
1、打开注册表编辑器。
2、打开下面所示位置。在右侧新建一个“二进制值”,键名为"Scancode Map",将其值设为"00 00 00 00 00 00 00 00 03 00 00 00 00 00 5B E0 00 00 5C E0 00 00 00 00"。
3、重新启动计算机。位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout支持的操作系统: NT 2000 二、禁止使用任务管理器(屏蔽alt+ctrl+del组合): 在Windows NT/2000/XP系统下,任何用户都可以通过任务管理器查看当前系统的状况,包括CPU、内存使用情况和当前系统中的进程。可以通过注册表禁止非管理员用户使用任务管理器。操作步骤如下:
1、打开注册表编辑器。
2、打开下面所示位置。在右侧窗口中新建DWORD值,命名为"DisableTaskMgr",将数值设为"1"。
3、无需重新启动即可生效。再使用CTRL+ALT+DEL调用任务管理器时,会出现禁用消息框。位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System支持的操作系统: NT 2000 XP
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Sub Command1_Click()
Call EnableWindow(Me.hwnd, 0)
Me.Caption = "现在拒绝KeyPress, MouseClick"
Dim i As Long
For i = 1 To 100
Call Sleep(100)
DoEvents '虽有DoEvents,会发现,按Form的任何地方都没有反应
Next i
Me.Caption = "现在解除了"
Call EnableWindow(Me.hwnd, 1)
End Sub
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
DWORD dwExtraInfo;
} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;HHOOK hHook = NULL;
HINSTANCE hInstance = NULL;void WINAPI StartHook();
void WINAPI StopHook();
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
hInstance = (HINSTANCE)hModule;
return TRUE;
}LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
KBDLLHOOKSTRUCT* kb = (KBDLLHOOKSTRUCT*)lParam;
bool exp = kb->vkCode == 91 || kb->vkCode == 92 || kb->vkCode >= 160 && kb->vkCode <= 165;
if (exp) return TRUE;
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}void WINAPI StartHook()
{
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
}void WINAPI StopHook()
{
UnhookWindowsHookEx(hHook);
}//.defEXPORTS
StartHook @1
StopHook @2
编译后与VB的工程文件放在同一目录中。
下面是VB的调用部分,非常简单,像用普通的API一样。' 加两个CommandButton。
Option Explicit
Private Declare Sub StartHook Lib "MaskKey.dll" ()
Private Declare Sub StopHook Lib "MaskKey.dll" ()Private Sub Command1_Click()
StartHook
End SubPrivate Sub Command2_Click()
StopHook
End SubPrivate Sub Form_Unload(Cancel As Integer)
StopHook
End Sub
[email protected]
[email protected]
我现在正碰到这问题啊
~~~~~~~~~~~~~~~~~~~~~~~~~~
马上,今明两天的事,写完后给大家链接。 :D
在Win9X下用SystemParametersInfo
在NT平台用底层键盘钩子
修改注册表可以实现屏蔽win键.可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard下创建一个二进制的值ScancodeMap,使它的值为:
00,00,00,00,00,00,00,00,03,00,00,00,00,00,5b,e0,00,00,5c,e0,00,00,00,00
在VB中,可以用操作注册表的API函数来实现.