[代码]Delphi实现双击左CTRL键调用记事本
2011-07-12 16:04
387 查看
要实现对双击左CTRL键的监控,必须玩钩子了。
代码很简单,新建VCL Form的工程,在窗体上放两个按钮,分别叫做 btnHook 和 btnUnHook。
调用就是 BeginHook 和 EndHook 这两个函数,窗体代码如下:
既然调用记事本都搞定了,干些其他的事儿自然不在话下了。
这段代码完全可以封装为一个模块,将监控的按键、间隔时间及回调函数当作参数传入即可。
Technorati 标签: Delphi,Hook,CTRL
代码很简单,新建VCL Form的工程,在窗体上放两个按钮,分别叫做 btnHook 和 btnUnHook。
调用就是 BeginHook 和 EndHook 这两个函数,窗体代码如下:
unit frmTestHookWinKey; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI; type TForm1 = class(TForm) btnHook: TButton; btnUnHook: TButton; procedure btnHookClick(Sender: TObject); procedure btnUnHookClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var KeyHook: HHook; HitTime: Cardinal; // 击键的间隔时间 HitThreshold: Integer; // 击键的间隔时间门限 function HookKey(Code: integer; wParam: wParam; lParam: lParam): LRESULT; stdcall; type PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; KBDLLHOOKSTRUCT = record vkCode: DWORD; ScanCode: DWORD; Flags: DWORD; Time: DWORD; dwExtraInfo: DWORD; end; begin // 如果左 CTRL 键按下 if (Code = HC_ACTION) and (PKBDLLHOOKSTRUCT(lParam).vkCode = VK_LCONTROL) and (wParam = WM_KEYDOWN) then begin if HitTime > 0 then begin HitTime := GetTickCount - HitTime; // 取得间隔时间 if HitTime <= HitThreshold then begin // 如果间隔时间在门限时间之内,则调用记事本 WinExec('notepad.exe', SW_SHOWNORMAL); HitTime := 0; end else HitTime := GetTickCount; end else HitTime := GetTickCount; end; Result := CallNextHookEx(KeyHook, Code, wParam, lParam); end; procedure BeginHook; begin KeyHook := SetWindowsHookEx(13 {=WH_KEYBOARD_LL}, @HookKey, HInstance, 0); end; procedure EndHook; begin UnhookWindowsHookEx(KeyHook); end; procedure TForm1.btnHookClick(Sender: TObject); begin BeginHook; end; procedure TForm1.btnUnHookClick(Sender: TObject); begin EndHook; end; procedure TForm1.FormCreate(Sender: TObject); begin HitTime := 0; HitThreshold := 200; // 200 ms end; end.
既然调用记事本都搞定了,干些其他的事儿自然不在话下了。
这段代码完全可以封装为一个模块,将监控的按键、间隔时间及回调函数当作参数传入即可。
Technorati 标签: Delphi,Hook,CTRL
相关文章推荐
- delphi中用代码实现注册Ocx和Dll(有点怪异,使用CallWindowProc来调用指定函数DllRegisterServer)
- java代码实现鼠标双击出现画图-----------paint()方法由系统自动调用,且一定是小写的字母p
- delphi实现调用dll中的窗体 代码
- datagridview 多行选择的代码实现 替换ctrl+鼠标左键
- HTML5调用手机摄像头拍照的实现思路及代码
- MySQL定时器开启、调用实现代码
- android的HAL第一种调用hal方法中的Framework层代码的实现:
- JS调用C#后台代码---JS实现DataGrid“全选”、“反选”、调用后台代码批量删除数据
- MySQL定时器开启、调用实现代码
- 使用库函数API和C代码中嵌入汇编代码两种方式实现对sysinfo的系统调用
- android 指纹识别调用实现方法及示例代码
- 双击ALV调用事务代码并传入参数
- 使用PInvoke实现C#调用非托管C代码DLL库
- js 匿名调用实现代码
- 一行代码完成 调用系统相册 和 视频,语音库,选择图片,视频,和音频文件。在选择界面实现了录制视频和录制音频功能。 截图
- PHP异步调用socket实现代码
- php调用C代码的实现方法
- Windows核心编程 中部分代码 Delphi 实现
- Phpcms v9 实现首页|列表页|内容页调用点击量的代码
- c# 调用.bat文件的实现代码