首页 技术 正文
技术 2022年11月8日
0 收藏 637 点赞 1,520 浏览 3331 个字

【背景】

公司做视频影像采集,平时采集图像的时候都需要打开采集窗口,然后需要开着采集窗口来进行图像采集。同事问我能不能做一个全局快捷键,哪怕我没有操作也可以采集图像。说干就干,一直想做全局快捷键了,网上找了一些代码,凑合了一下,达到了实现的效果,同事反应使用效果不错。

【知识点】

本代码有如下Delphi知识可以参考学习:

1、Delphi ini文件的读取写入。

2、Delphi全局快捷键的检测和注册。

3、Delphi给指定窗体发送按键。

4、Delphi任务栏显示、隐藏自己的程序。

5、Delphi中给你的程序置顶.

【效果】

Delphi 中的全局快捷键+给指定窗体发送按键

【代码】

 unit U_Main; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, IniFiles; type
Tfrm_Main = class(TForm)
btn_Capture: TButton;
lbl_Tip: TLabel;
btn_Close: TButton;
procedure btn_CaptureClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormDestroy(Sender: TObject);
procedure btn_CloseClick(Sender: TObject);
private
aatom: ATOM; // 全局快捷键
procedure hotykey(var msg: TMessage); message WM_HOTKEY; // 定义全局热键消息事件
{ Private declarations }
public
{ Public declarations }
end; var
frm_Main: Tfrm_Main;
KeyValue: Integer; implementation {$R *.dfm} procedure Tfrm_Main.btn_CaptureClick(Sender: TObject);
var
h: THandle;
begin
h := FindWindow(nil, ('视频影像'));
if h > then
lbl_Tip.Caption := '视频影像已打开,可以采集!'
else
lbl_Tip.Caption := '视频影像未打开,不可采集!';
// SetForegroundWindow(h);
PostMessage(h, WM_KEYDOWN, VK_SPACE, ); end; procedure Tfrm_Main.hotykey(var msg: TMessage);
var
h: THandle;
begin
if TWMHotKey(msg).HotKey = aatom then
begin
// ShowMessage('s');
end; if (msg.LParamHi = KeyValue) then
begin
// 全局快捷键处理事件
// ShowMessage('视频影像采集开始');
h := FindWindow(nil, ('视频影像'));
if h > then
lbl_Tip.Caption := '视频影像已打开,可以采集!'
else
lbl_Tip.Caption := '视频影像未打开,不可采集!';
PostMessage(h, WM_KEYDOWN, VK_SPACE, );
end;
end; procedure Tfrm_Main.btn_CloseClick(Sender: TObject);
begin
Self.Close;
end; procedure Tfrm_Main.FormCreate(Sender: TObject);
var
Config: Tinifile;
begin // 读取位置
Config := Tinifile.Create(ExtractFilePath(Application.Exename)
+ 'Config.ini');
Self.Top := StrToInt(Config.ReadString('Config', 'strTop', ''));
Self.Left := StrToInt(Config.ReadString('Config', 'strLeft', ''));
KeyValue := StrToInt(Config.ReadString('Config', 'Key', '')); if KeyValue <> then
begin
case KeyValue of
:
btn_Capture.Caption := '【F1 视频图像采集】';
:
btn_Capture.Caption := '【F2 视频图像采集】';
:
btn_Capture.Caption := '【F3 视频图像采集】';
:
btn_Capture.Caption := '【F4 视频图像采集】';
:
btn_Capture.Caption := '【F5 视频图像采集】';
:
btn_Capture.Caption := '【F6 视频图像采集】';
:
btn_Capture.Caption := '【F7 视频图像采集】';
:
btn_Capture.Caption := '【F8 视频图像采集】';
:
btn_Capture.Caption := '【F9 视频图像采集】';
:
btn_Capture.Caption := '【F10 视频图像采集】';
:
btn_Capture.Caption := '【F11 视频图像采集】';
:
btn_Capture.Caption := '【F12 视频图像采集】'; end;
end; // 建立全局快捷键
if FindAtom('HotKey') = then
begin
aatom := GlobalAddAtom('HotKey');
end;
if RegisterHotKey(Handle, aatom, , KeyValue) then
begin
// MessageBox(Handle, '按F8', '提示', MB_OK);
end; lbl_Tip.Caption := '';
SetWindowPos(frm_Main.Handle, HWND_TOPMOST, frm_Main.Left, frm_Main.Top,
frm_Main.Width, frm_Main.Height, );
// 在任务栏隐藏
SetWindowLong(frm_Main.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); // btn_CaptureClick(Sender);
// 在任务栏显示
// SetWindowLong(frm_Main.Handle, GWL_EXSTYLE, WS_EX_APPWINDOW);
end; procedure Tfrm_Main.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle, aatom);
GlobalDeleteAtom(aatom);
end; procedure Tfrm_Main.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Config: Tinifile;
begin
if (ssleft in Shift) then
begin
ReleaseCapture;
Perform(WM_syscommand, $F012, );
end; // 读取位置
Config := Tinifile.Create(ExtractFilePath(Application.Exename)
+ 'Config.ini'); Config.WriteString('Config', 'strTop', IntToStr(Self.Top));
Config.WriteString('Config', 'strLeft', IntToStr(Self.Left)); end; end.
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,486
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,126
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,287