Delphi中如何监视键盘输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中如何监视键盘输入相关的知识,希望对你有一定的参考价值。

如题,谢谢大虾们、

1. 请你参考这里的低级键盘勾子: http://wenwen.soso.com/z/q183235547.htm 2. 在 LowLevelKeyboardProc 回调函数里 ki.vkCode 的值就是键盘的虚拟键码 3. 特殊键可以用 ExtKeyDown 这个函数获得 参考技术A 后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。要作到这些,必须把当前进程变为一个系统服务,并且定义全局热键。
一、把当前进程变为一个系统服务:
目的是在任务列表中把程序隐藏起来。调用API函数RegisterServiceProcess实现。
后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。要作到这些,必须把当前进程变为一个系统服务,并且定义全局热键。
一、把当前进程变为一个系统服务:
目的是在任务列表中把€程序隐藏起来。调用API函数RegisterServiceProcess实现。
二、定义全局热键(本例中定义热键Ctrl+Del+R),步骤:
1、定义捕获Windows消息WM_HOTKEY的钩子函数,即:
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
2、向Windows加入一个全局原子 Myhotkey: GlobalAddAtom('MyHotkey'),
并保留其句柄。
3、向Windows登记热键:调用API函数RegisterHotKey实现。
三、源程序:
unit Unit1;
interface
uses
Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
热键标识ID
id: Integer;
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
Privat-Declarations
public
Public-Declarations
end;
var
Form1 : TForm1;
implementation
const RSP_SIMPLE_SERVICE=1;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external 'KERNEL32.DLL';
$R *.DFM

捕获热键消息
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if msg.HotKey = id then
ShowMessage('Ctrl+Alt+R键被按下!');
form1.Visible :=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
Const
ALT、CTRL和R键的虚拟键值
MOD_ALT = 1;
MOD_CONTROL = 2;
VK_R = 82;
begin
首先判断程序是否已经运行
if GlobalFindAtom('MyHotkey') = 0 then
begin
注册全局热键Ctrl + Alt + R
id:=GlobalAddAtom('MyHotkey');
RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R);
end
else
halt;
end;

把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来
procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);
form1.Hide;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
退出时释放全局热键
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,id);
GlobalDeleteAtom(id);
end;
end.
四、说明:
在后台监控软件中使用以上功能,可真正实现隐蔽运行,热键调出,便于管理员进行管理。程序在Win98,Delphi5.0中运行通过。

如何在WinForm应用程序中持续监视用户输入

在我的WinForm应用程序中,我需要一个登录系统来启用/禁用某些功能。此登录使用由USB读卡器处理的磁卡进行,该读卡器适用于键盘仿真。如果我强制用户选择文本框,然后刷卡,我可以在文本框中接收代码然后处理它,但是如果我想在任何时刻获得此代码,如果文本框不是当前的,我该怎么办?选择控制?

我正在考虑一个后台控制台应用程序,只是为了通过Console.ReadLine()接收代码,但是当我专注于我的winform时它不起作用。

答案

只是我自己的类似应用程序(带指纹识别器)的概念:

  1. 创建Windows服务应用程序,它将监视您的USB读卡器设备;
  2. 将此服务与WinForms应用程序中的某些DLL库链接;
  3. 如果将检测到任何活动,请在链接的DLL库中调用正确的方法并执行所有请求的操作。

以上是关于Delphi中如何监视键盘输入的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 宏监视 Libreoffice 文档中的键盘输入?

delphi 键盘值

delphi键盘钩子没效果

delphi 键盘全局钩子

Delphi 软键盘

Windows 全局键盘挂钩 - Delphi