unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Imaging.pngimage, Vcl.ExtCtrls,
Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls, Vcl.DBCtrls, System.StrUtils; type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDblClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
procedure Remote(key: Integer);
public
{ Public declarations }
procedure WndProc(var Message: TMessage); override;
procedure MyCopyData(var message: TWMCopyData); message WM_COPYDATA;
end; var
Form1: TForm1; implementation {$R *.dfm} procedure SendMyKeyDown(key: Integer);
var
data: TCopyDataStruct;
str: string;
begin
str:= '下'+ IntToStr(key);
data.dwData := ;
data.cbData := Length(str) + ;
data.lpData := PChar(str);
SendMessage(Application.MainForm.Handle, WM_COPYDATA, , LongWord(@data));
end; procedure SendMyKeyUp(key: Integer);
var
data: TCopyDataStruct;
str: string;
begin
str:= '上'+ IntToStr(key);
data.dwData := ;
data.cbData := Length(str) + ;
data.lpData := PChar(str);
SendMessage(Application.MainForm.Handle, WM_COPYDATA, , LongWord(@data));
end; procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Visible := False;
Button2.Visible := False;
Button3.Visible := False;
Button4.Visible := False; SendMyKeyDown(Ord('A'));
SendMyKeyUp(Ord('A'));
end; procedure TForm1.Button2Click(Sender: TObject);
begin
Button1.Visible := False;
Button2.Visible := False;
Button3.Visible := False;
Button4.Visible := False; SendMyKeyDown(VK_CONTROL);
SendMyKeyUp(VK_CONTROL);
end; procedure TForm1.Button3Click(Sender: TObject);
begin
Button1.Visible := False;
Button2.Visible := False;
Button3.Visible := False;
Button4.Visible := False; SendMyKeyDown(VK_SHIFT);
SendMyKeyUp(VK_SHIFT);
end; procedure TForm1.Button4Click(Sender: TObject);
begin
Button1.Visible := False;
Button2.Visible := False;
Button3.Visible := False;
Button4.Visible := False; SendMyKeyDown(VK_MENU);
SendMyKeyUp(VK_MENU);
end; procedure TForm1.FormCreate(Sender: TObject);
begin
self.KeyPreview := True;
end; procedure TForm1.FormDblClick(Sender: TObject);
begin
Label1.Caption := '';
Label2.Caption := '';
Label3.Caption := '';
Label4.Caption := ''; Button1.Visible := not Button1.Visible;
Button2.Visible := not Button2.Visible;
Button3.Visible := not Button3.Visible;
Button4.Visible := not Button4.Visible;
end; procedure TForm1.MyCopyData(var message: TWMCopyData);
var
data: PCopyDataStruct;
str: string;
key: Integer;
begin
data := message.CopyDataStruct;
str := string(PChar(data.lpData));
if StartsText('下', str) then
begin
key := StrToInt(StringReplace(str, '下', '', []));
keybd_event(key, MapVirtualKey(key, ), , );
end
else
begin
key := StrToInt(StringReplace(str, '上', '', []));
keybd_event(key, MapVirtualKey(key, ), KEYEVENTF_KEYUP, );
end;
end; procedure TForm1.Remote(key: Integer);
begin
//这里就是接收到的按键
end; procedure TForm1.WndProc(var Message: TMessage);
begin
inherited; case Message.Msg of
WM_KEYDOWN:
begin
Label1.Caption := Format('KeyDown: %d - %d', [message.WParam, message.LParam]);
Remote(message.WParam);
end;
WM_KEYUP:
begin
Label2.Caption := Format('KeyUp: %d - %d', [message.WParam, message.LParam]);
Remote(message.WParam);
end;
WM_SYSKEYDOWN:
begin
Label3.Caption := Format('SysKeyDown: %d - %d', [message.WParam, message.LParam]);
Remote(message.WParam);
end;
WM_SYSKEYUP:
begin
Label4.Caption := Format('SysKeyUp: %d - %d', [message.WParam, message.LParam]);
Remote(message.WParam);
end;
end;
end; end.

delphi 按键测试的更多相关文章

  1. ADSL_自动拨号源码(Delphi),已经测试通过

    下载地址: http://files.cnblogs.com/lwm8246/ADSL_%E8%87%AA%E5%8A%A8%E6%8B%A8%E5%8F%B7.rar

  2. [转]Delphi 控件属性和事件

    常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大 ...

  3. Delphi经验总结(1)

    先人的DELPHI基础开发技巧 ◇[DELPHI]网络邻居复制文件 uses shellapi; copyfile(pchar('newfile.txt'),pchar('//computername ...

  4. 【小技巧】9针USB转串口简易连通性测试,附25针转9针

    Part 1 前言 最近用SecureCRT连接串口,因为是笔记本用的USB转串口,好多次出现安装驱动OK,连接上了,但是没有串口打印.无法进行控制的问题:所以不清楚是USB串口的驱动问题,还是转接用 ...

  5. delphi 调用QQ邮箱发送邮件

    procedure TForm1.FormCreate(Sender: TObject); begin try IdSMTP1.AuthenticationType := atLogin; IdSMT ...

  6. delphi 各版本的特性

    delphi 各新版本特性收集 Delphi XE6新增了一些特性并增强了原有的功能,主要有以下几个方面:   IDE(整合开发环境)   Internet XML(扩展标记语言) Compiler( ...

  7. 《FPGA全程进阶---实战演练》第七章 让按键恢复平静

    1基础理论部分 A:“怎么按键按下去之后,结果不正常?”,B:“按键你消抖了吗?”A:“消什么抖,还要消抖?”,  B:“先检测按键变化,然后消抖过滤波动信号,最后输出稳定信号”,A:“我好像漏掉了什 ...

  8. Python3 tkinter基础 event keysym 查看按键的按键名

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. 【嵌入式】FS2410非操作系统外围资源测试

    在刚接触FS2410时,其实这个测试也没有多大意义,但是对于以后来说,当一个产品做成功时,产品测试还是一个必须经过的一个阶段,所以这个流程还是有必要走一下! 在非操作系统下,主要进行RTC测试,按键测 ...

随机推荐

  1. php的array数组 -------方法foreach循环时候,利用数组里值的引用地址(& )从而改变数组里的值

    /* * 把每个数组值后面都加个SQL然后返回数组 * foreach循环时候,直接用引用(&)的方式就能改变之前的数组 */public function array_foreach(){ ...

  2. ionic2 rc2 添加版本更新自动升级功能

    不废话,直接上代码 首先安装四个必备的插件: cordova plugin add cordova-plugin-app-version //获取APP版本 cordova plugin add co ...

  3. html之跳转锚

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Matlab_spectrogram_短时傅里叶分析_实现与讨论

    在语音与音乐处理过程中,常用到短时傅里叶变换(Short Time Fourier Transformation, STFT).在一些学习路径中,STFT也是学习小波之前的预备知识.本文简单实现了 M ...

  5. 二进制32位转十进制int

    public class BinaryToDecimal { public static int BinaryToDecimal(int binaryNumber){ int decimal = 0; ...

  6. 团队合作one

    一.项目介绍 为生活在长大的学生提供方快捷的生活服务,通过帖子发现自己志同道合的朋友,记录自己在长大点滴.本项目的意义在于锻炼团队的scrum能力,加强团队合作能力.确定本项目采用的技术方向:本项目整 ...

  7. linux 配置ftp服务器

    在Linux中搭建一个FTP服务器 [实现步骤] 1.检查安装vsftpd服务器 以root进入终端后(其他账户进入终端的可以用su root 输入密码后进入root 模式)之后,在终端命令窗口输入以 ...

  8. newinstance()和new有什么区别?

    在初始化一个类,生成一个实例的时候:newInstance() 和 new 有什么区别?用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两 ...

  9. Python入门 (一)

    本文是个人python学习笔记,学习资料为廖雪峰python教程,如需更多内容,请移步廖老师官方网站. 一 安装 官网下载安装包安装,安装好之后,在命令提示符输入python进入Python交互模式: ...

  10. 使用new来分配内存

    对指针的工作方式有一定的了解之后,来看看他如何实现在程序运行时分配内存.前面我们都将指针初始化为变量的地址(int * pt; pt = & a):变量是在编译时分配的有名称的内存,而指针只是 ...