[Windows Hook] 屏蔽键盘按键
//该例程为在系统级屏蔽一些系统键、如WIN、TAB、CAP、POWER、SLEEP、HOME等!
//屏蔽组合键下面例程不适用!(比如CTRL+ESC需要在钩子函数中用(p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $) <> )进行判断,也不难,这里只是举个简单的例子)
unit KeyBlocker; interface uses
SysUtils, Classes, Windows, Messages; const
WH_KEYBOARD_LL = ; type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = packed record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
Time: DWORD;
dwExtraInfo: DWORD;
end; TBlockKeyEvent = procedure(VirtualKey: Cardinal) of object; TKeyBlocker = class
private
FEnabled: Boolean;
FCustomKey:Cardinal;
FOnBlockKey: TBlockKeyEvent;
procedure SetEnabled(const Value: Boolean);
procedure SetCustomKey(const Value: Cardinal);
procedure DoBlock(VirtualKey: Cardinal);
procedure UpdateKeyBlock;
public
constructor Create;
destructor Destroy; override;
property CustomKey: Cardinal read FCustomKey write SetCustomKey default ;
property Enabled: Boolean read FEnabled write SetEnabled default False;
property OnBlockKey: TBlockKeyEvent read FOnBlockKey write FOnBlockKey;
end; implementation { TKeyBlocker } var
KeyboardHook: HHOOK = ;
FKeyBlocker: TKeyBlocker = nil;//设计这一变量的作用就是能在LowLevelfunction中访问类成员变量!
//LowLevelfunction为系统回调函数,为确保在系统调用时存在,就必须把之设计为一个类函数或静态函数,使之在编译期就能生成地址,如果设计为虚函数,系统就晕了 constructor TKeyBlocker.Create;
begin
inherited;
FKeyBlocker := Self;
end; destructor TKeyBlocker.Destroy;
begin
Enabled := False;
FKeyBlocker := nil;
inherited;
end; procedure TKeyBlocker.DoBlock(VirtualKey: Cardinal);
begin
if Assigned(FOnBlockKey) then
FOnBlockKey(VirtualKey);
end; procedure TKeyBlocker.SetCustomKey(const Value: Cardinal);
begin
FCustomKey := Value;
end; procedure TKeyBlocker.SetEnabled(const Value: Boolean);
begin
FEnabled := Value;
UpdateKeyBlock;
end;
//核心部分
function LowLevelKeyboardFunc(nCode: INTEGER; w_Param: WPARAM;
l_Param: LPARAM): LRESULT; stdcall;
var
boolKey: Boolean;
p: PKBDLLHOOKSTRUCT;
begin
boolKey := False;
p := nil;
if nCode = HC_ACTION then
begin
case w_Param of
WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP:
begin
p := PKBDLLHOOKSTRUCT(l_Param);
if (p.vkCode = FKeyBlocker.FCustomKey) then
boolKey := True;
end;
end;
end; if boolKey and (p <> nil) then
begin
FKeyBlocker.DoBlock(p.vkCode);
Result := ;
Exit;
end; Result := CallNextHookEx(, nCode, w_Param, l_Param);
end;
//装载hook与卸载hook
procedure TKeyBlocker.UpdateKeyBlock;
begin
if KeyboardHook <> then Exit;
case FEnabled of
True:
KeyboardHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardFunc, HInstance, );
False:
UnhookWindowsHookEx(KeyboardHook);
end;
end; end.
----------------------------------------------------------------
//调用程序 procedure BlockProc(VirtualKey: Cardinal);
begin
//to do ..
end;
procedure TForm1.btn1Click(Sender: TObject);
var
KeyBlockerTest:TKeyBlocker;
begin
KeyBlockerTest:=TKeyBlocker.Create;
KeyBlockerTest.CustomKey:=VK_CAPITAL;
KeyBlockerTest.OnBlockKey:=BlockProc;
KeyBlockerTest.Enabled:=true;
end;
[Windows Hook] 屏蔽键盘按键的更多相关文章
- js屏蔽键盘按键
3.1屏蔽键盘所有键 <script language="javascript"> <!-- function document.onkeydown(){ eve ...
- C# 获取键盘钩子,屏蔽键盘按键
static int hHook = 0; public delegate int HookProc(int nCode, int wParam, IntPtr lParam); //LowLevel ...
- 钩子编程(HOOK) 屏蔽全部按键、鼠标及系统功能键 (4)
摘要:上篇文章<钩子编程(HOOK) 安装系统全局钩子>已经具体的解说了全局钩子的安装.本文将增强一下钩子的功能.实现屏蔽全部按键鼠标与系统功能键.要实现这个功能.须要安装两个全局钩子,& ...
- windows hook + pyhook3 + python win32api hook + C 键盘hook
安装pyhook3见:https://www.cnblogs.com/lqerio/p/12096710.html 使用见:https://www.cnblogs.com/lqerio/p/12106 ...
- windows系统下修改键盘按键的映射
待解决的问题: 在windows系统下,在某些情况下,我们感觉键盘的按键位置不是特别方便,因此想重新映射它. 比如:要实现如下重新映射(我就有这样的需求),怎么办? Esc键 修改为 CapsLock ...
- python 模拟windows键盘按键的封装
代码:在执行的时候,把光标放在指定的地方,在此例中,点击运行后把光标放到结果区域,粘贴的时候是粘贴到光标所在的问题,如过是运行脚本在web元素输入框中输入的话,不能移动光标到其他位置 #encodin ...
- python 在windows下监听键盘按键
python 在windows下监听键盘按键 使用到的库 ctypes(通过ctypes来调用Win32API, 主要就是调用钩子函数) 使用的Win32API SetWindowsHookEx(), ...
- JS实现屏蔽键盘操作
第一种:当页面初始加载的时候,屏蔽掉当前页面所有的键盘 $(document).ready(function () { document.body.onkeydown = function (even ...
- UI自动化测试(四)AutoIT工具使用和robot对象模拟键盘按键操作
AutoIT简介 AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/ ...
随机推荐
- SSL/TLS Server supports TLSv1.0
远程登录服务器后打开注册表编辑器,点开HKEY-LOCAL-MACHINE,SYSTEM,CURRENTCONTROLSET下的Control 找到SecurityProviders下的SCHANNE ...
- Deinstall卸载RAC之Oracle软件及数据库+GI集群软件
Deinstall卸载Oracle软件及数据库+GI集群软件 1. 本篇文档应用场景: 需要安装新的ORACLE RAC产品,系统没有重装,需要对原环境中的RAC进行卸载: #本篇文档,在AIX 6. ...
- JavaBasic_02
Java的基础框架 3W:What How Why What:一个东西是什么,具备什么样的功能 怎么用 How: 怎么做?功能如何实现 读源代码(jdk)->学习很多,优雅的编程技巧建立在wha ...
- 利用scrapy下载图片保存到本地
1.先声明一下,起始位置已经是将所有的图片链接都能到pipelines.py中 2.创建一个类,继承于ImagesPipeline,因此也就需要导入ImagesPipeline from scrapy ...
- AE旋转
精准对位: 好几个图层上的旋转点在一个位置上: 方法1:勾选网格,定点. 方法2:按住ctrl+r 调出尺寸.拖参考线,焦点自动吸附功能. 选中四张或者选中第一张,按shift键,选中最后一张(即可 ...
- gogs打造自己的git
推荐docker安装 //下载镜像 docker pull gogs/gogs // 创建容器 docker run -d --name=gogs -p 10022:22 -p 3000:3000 - ...
- 《DSP using MATLAB》Problem 6.23
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- python-基础-文件
一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件, 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 打开文件的模式有: r ,只读模式[默认模式 ...
- LeetCode - Top K Frequent Words
Given a non-empty list of words, return the k most frequent elements. Your answer should be sorted b ...
- vim 自动注释
开启了自动注释和自动缩进对粘帖代码不方便 关闭自动注释 :set fo-=r 关闭自动缩进(这个对C/C++代码好像无效) :set noautoindent 关闭C语言缩进 :set noc ...