unit Unit1;
// download by http://www.codefans.net
interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
StdCtrls, ExtCtrls; type
TForm1 = class(TForm)
lbl1: TLabel;
lbl2: TLabel;
edt1: TEdit;
edt2: TEdit;
btn1: TButton;
btn2: TButton;
lst1: TListBox;
// ListBox1: TListBox;
// Button1: TButton;
// Button2: TButton;
// Edit1: TEdit;
// Edit2: TEdit;
// Label1: TLabel;
// Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure edt1Change(Sender: TObject);
procedure edt1KeyPress(Sender: TObject; var Key: Char);
procedure lst1DblClick(Sender: TObject);
private
function Keyhookresult(lP: integer; wP: integer): pchar;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hookkey: string;
hooktimes: word;
hHook: integer;
implementation
{$R *.DFM} function TForm1.Keyhookresult(lP: integer; wP: integer): pchar;
begin
result := '[Print Screen]';
{ VK_0 thru VK_9 are the same as ASCII '0' thru '9' ($30 - $39) }
{ VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A) }
case lp of
: result := '[Alt]'; //不能识别
: result := '`';
: Result := '';
: result := '';
: result := '';
: result := '';
: result := '';
: result := '';
: result := '';
: result := '';
: result := '';
: result := '';
: result := '-';
: result := '=';
: result := 'Q';
: result := 'W';
: result := 'E';
: result := 'R';
: result := 'T';
: result := 'Y';
: result := 'U';
: result := 'I';
: result := 'O';
: result := 'P';
: result := '[';
: result := ']';
: result := '\';
: result := 'A';
: result := 'S';
: result := 'D';
: result := 'F';
: result := 'G';
: result := 'H';
: result := 'J';
: result := 'K';
: result := 'L';
: result := ';';
: result := '''';
: result := 'Z';
: result := 'X';
: result := 'C';
: result := 'V';
: result := 'B';
: result := 'N';
: result := 'M';
: result := ',';
: result := '.';
: result := '/';
: result := '[Right-Shift]';
: result := '[Space]';
: result := '[Esc]';
: result := '[F1]';
: result := '[F2]';
: result := '[F3]';
: result := '[F4]';
: result := '[F5]';
: result := '[F6]';
: result := '[F7]';
: result := '[F8]';
: result := '[F9]';
: result := '[F10]';
: result := '[F11]';
: result := '[F12]';
: Result := '[Left-Shift]';
: result := '[CapsLock]';
: result := '[Backspace]';
: result := '[Tab]';
:
if wp > then
result := '[Right-Ctrl]'
else
result := '[Left-Ctrl]';
: result := '[Num /]';
: result := '[NumLock]';
: result := '[Print Screen]';
: result := '[Scroll Lock]';
: result := '[Pause]';
: result := '[Num0]';
: result := '[Num.]';
: result := '[Num1]';
: result := '[Num2]';
: result := '[Num3]';
: result := '[Num4]';
: result := '[Num5]';
: result := '[Num6]';
: result := '[Num7]';
: result := '[Num8]';
: result := '[Num9]';
: result := '[*5*]';
: result := '[Num *]';
: result := '[Num -]';
: result := '[Num +]';
: result := '[Insert]';
: result := '[Delete]';
: result := '[Home]';
: result := '[End]';
: result := '[PageUp]';
: result := '[PageDown]';
: result := '[UP]';
: result := '[DOWN]';
: result := '[LEFT]';
: result := '[RIGHT]';
: result := '[Enter]';
end;
end; //钩子回调过程
function HookProc(iCode: integer; wParam: wParam; lParam: lParam): LResult; stdcall;
var
s:string;
begin
result:=;//zl add
if (PEventMsg(lparam)^.message = WM_KEYDOWN) then
begin
//事件消息,键盘按下
s:=format('Down:%5d %5d ',[PEventMsg(lparam)^.paramL,PEventMsg(lparam)^.paramH])
+Form1.Keyhookresult(peventMsg(lparam)^.paramL, peventmsg(lparam)^.paramH);
Form1.lst1.Items.Add(s);
end
else if (PEventMsg(lparam)^.message = WM_KEYUP) then
begin
//键盘按键
s:=format(' Up:%5d %5d ',[PEventMsg(lparam)^.paramL,PEventMsg(lparam)^.paramH])
+Form1.Keyhookresult(PEventMsg(lparam)^.paramL,PEventMsg(lparam)^.paramH);
Form1.lst1.Items.Add(s);
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
hooktimes := ;
hHook := ;
end; procedure TForm1.btn1Click(Sender: TObject);
begin
inc(hooktimes);
if hooktimes = then
begin
hookkey := TimeToStr(now) + ' ';
hHook := SetWindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, );
MessageBox(, '键盘监视启动', '信息', MB_ICONINFORMATION + MB_OK);
end;
end; procedure TForm1.btn2Click(Sender: TObject);
begin
UnHookWindowsHookEx(hHook);
hHook := ;
if hooktimes <> then
begin
MessageBox(, '键盘监视关闭', '信息', MB_ICONINFORMATION + MB_OK);
end;
hooktimes := ;
end; procedure TForm1.edt1Change(Sender: TObject);
var
i:DWORD;
begin
if length(edt1.text)<> then exit;
//映射虚拟键
i:=MapVirtualKey(ord(edt1.text[]), );
edt2.text:=format('%d %x',[i,i]);
end; procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
edt1.text:='';
end; procedure TForm1.lst1DblClick(Sender: TObject);
begin
lst1.clear;
end; end.

hook键盘钩子_非dll的更多相关文章

  1. hook键盘钩子 带dll

    library Key; uses SysUtils, Classes, HookKey_Unit in 'HookKey_Unit.pas'; {$R *.res} exports HookOn,H ...

  2. 基于C#实现的HOOK键盘钩子实例代码

    本文所述为基于C#实现的HOOK实例,该实例可用来屏蔽系统热键.程序主要实现了安装钩子.传递钩子.卸载钩子等功能.在传递钩子中:<param name="pHookHandle&quo ...

  3. 2.添加键盘钩子。向进程中注入dll

    学习笔记 1.首先要建立mfc的动态链接库.在def文件中放入要导出的函数名. 2.添加函数如下 //安装钩子 //HHOOK SetWindowsHookEx( // int idHook,//钩子 ...

  4. 钩子编程(HOOK) 安装进程内键盘钩子 (1)

    摘要:钩子能够监视系统或进程中的各种事件消息.截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生.完毕特定的功能,比方截获键盘.鼠标的输入.屏幕取词 ...

  5. C#键盘钩子 鼠标钩子

    最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> ...

  6. C#鼠标键盘钩子

    using System;using System.Collections.Generic; using System.Reflection; using System.Runtime.Interop ...

  7. C# 键盘钩子

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  8. 什么是HOOK(钩子):消息拦截与处理

    对于Windows系统,它是建立在事件驱动机制上的,说白了就是整个系统都是通过消息传递实现的.hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并 ...

  9. WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例

    键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键时,可以考虑使用键盘钩子,如大家常用qq的截图快捷键,那么在WPF里怎么去 ...

随机推荐

  1. Java笔记--泛型

    1.泛型解决元素存储的安全性问题:解决获取数据元素时,需要类型强转的问题. --泛型的核心思想:把一个集合中的内容限制为一个特定的数据类型. 2.泛型的使用 1)在集合中使用 2)自定义泛型类.泛型接 ...

  2. django-腾讯paas-appengine阅读

    1 重写View基类的dispatch函数 api/baseview.py 在一个post请求中,在header中,CONTENT_TYPE为application/json,然后在request.b ...

  3. 适配器之SimpleAdapter

    前言: 在写适配器时,SimpleAdapter会经常使用到,虽然他比ArrayAdapter复杂,但是也提供了更多的功能 正文: 我们接下来先从SimpleAdapter中较为简单的显示两行文本开始 ...

  4. I0.0 上升边沿 清空 MW10~MW58 联系多个知识点融合

    编写程序 在I1.2 的上升边沿 触发 MW8+1的程序 实现方式1 M1.1 为中间变量 对应的STL语句表 执行结果 OK 已经仿真 . 现在尝试第2种方法 实现方式2: M1.1也是中间变量 S ...

  5. HihoCoder第十周:后序遍历

    也就在大二学数据结构的时候知道了树的前序遍历.后序遍历.中序遍历.之后就忘了,在之后就是大四研究生老师考我,我当时还不知道,真够丢人的.自此之后,知道了如何通过其中两个得到第三个,但是也没有编程实现过 ...

  6. HihoCoder第十四周:无间道之并查集

    #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息--额,说远了,总之,小Hi和小H ...

  7. spctl命令返回的结果输入到文本中

    说一下我遇到的问题. mac自动打包完之后上传到苹果商店公正,公正后需要检查一下公正的结果, spctl -a -v LBCast.app #查看是否公证成功   显示如下表示公证成功了,有Notar ...

  8. Python基础笔记:函数:调用函数、定义函数、函数的参数、递归函数

    一.定义一个求二元一次方程的根的函数 #Sublime Text import math def ee(a,b,c): delta=b*b-4*a*c if delta<0: return 'n ...

  9. Andriod studio 汉化教程

    1.找到安装目录,D:\Program Files\Android\Android Studio\lib,先保存resources_en,并且把它的名字改为resources_cn.jar 2.下载汉 ...

  10. Python 35个内置函数,你都ok吗?

    Python一共有60多个内置函数,今天先梳理其中35 个 1 abs() 绝对值或复数的模 . In [1]: abs(-6)Out[1]: 6 2 all() 接受一个迭代器,如果迭代器的所有元素 ...