当我的程序未激活时如何处理键盘快捷键?

2023-12-04

如果我像这样使用它可以用于多个事件吗?

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Clipbrd;

type
  TForm4 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure WMHotkey(var Message: TWMHotKey); message WM_HOTKEY;
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

const
  MY_ID = 123;
  MY_ID1 = 123;
  MY_ID2 = 123;

{$R *.dfm}

procedure TForm4.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, MY_ID, MOD_CONTROL, ord('1'));
   RegisterHotKey(Handle, MY_ID1, MOD_CONTROL, ord('2'));
    RegisterHotKey(Handle, MY_ID2, MOD_CONTROL, ord('3'));
end;

procedure TForm4.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle, MY_ID);
  UnregisterHotKey(Handle, MY_ID1);
  UnregisterHotKey(Handle, MY_ID2);
end;

procedure TForm4.WMHotkey(var Message: TWMHotKey);
begin
  if Message.HotKey = MY_ID then
  begin

    if not AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), true) then
      RaiseLastOSError;

    try
      Clipboard.AsText := 'text1';
      SendMessage(GetFocus, WM_PASTE, 0, 0);
    finally
      AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), false);
    end;

    if Message.HotKey = MY_ID1 then
  begin

    if not AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), true) then
      RaiseLastOSError;

    try
      Clipboard.AsText := 'text2';
      SendMessage(GetFocus, WM_PASTE, 0, 0);
    finally
      AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), false);
    end;

  if Message.HotKey = MY_ID2 then
  begin

    if not AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), true) then
      RaiseLastOSError;

    try
      Clipboard.AsText := 'text3';
      SendMessage(GetFocus, WM_PASTE, 0, 0);
    finally
      AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), false);
    end;

  end;
end;

end;
end;
end.

Use the RegisterHotKey功能。如果您希望应用程序不可见,您可能需要以下中的所有详细信息我对类似问题的回答.

尝试这个:

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Clipbrd;

type
  TForm4 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure WMHotkey(var Message: TWMHotKey); message WM_HOTKEY;
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

const
  MY_ID = 123;

{$R *.dfm}

procedure TForm4.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, MY_ID, MOD_CONTROL, ord('1'));
end;

procedure TForm4.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle, MY_ID);
end;

procedure TForm4.WMHotkey(var Message: TWMHotKey);
begin
  if Message.HotKey = MY_ID then
  begin

    if not AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), true) then
      RaiseLastOSError;

    try
      Clipboard.AsText := 'This is my own text!';
      SendMessage(GetFocus, WM_PASTE, 0, 0);
    finally
      AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), false);
    end;

  end;
end;

end.

当然,您需要使用此方法并对其进行修改,以使其适合您的特定情况。 (也就是说,您可能想要的不仅仅是一个在 Ctrl+1 上打印“这是我自己的文本!”的应用程序,但仅此而已。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我的程序未激活时如何处理键盘快捷键? 的相关文章

  • EIdOSSLUnderlyingCryptoError 和“使用 SSL 连接时出错。错误:14094410...”

    我在 OS X 上的 Delphi 10 1 Berlin 中遇到 Indy 组件问题 我正在使用TIdHTTP使用 HTTPS 连接到 Web 服务 问题是从 OS X 客户端连接到服务器 在 OS X 上运行时 我总是遇到同样的错误 P
  • 使用 StretchDIBits 使用 Delphi 6 处理条形码图像 - 输出中缺少条形线

    我的应用程序是在 Delphi 6 中开发的 由于后台处理和大量数据 它消耗大约 60MB 120MB 物理内存 这是一个资源密集型应用程序 该应用程序的功能之一是在进行某些处理后创建条形码图像 如果用户继续生成条形码 那么至少十分之一的条
  • Delphi - 相当于C#的三元运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi 中是否存在或者将来是否存在条件运算符 https stackoverflow com questions 2108609 is there or is there ever going
  • Delphi - 将物理路径(设备文件句柄)转换为虚拟路径

    我怎样才能转换像这样的路径 设备 HarddiskVolume3 Windows 进入其相应的虚拟路径 如本例中的 c Windows 我个人更喜欢原生方式 function GetHDDDevicesWithDOSPath TString
  • 在类之间调度事件

    我有一个自定义事件类 public class FFTDrawEvent extends Event public static const DRAW EVENT String drawEvent private var param Arr
  • Delphi 的免费加密库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在为 Delphi 2010 寻找一个免费且最新的加密库 该库实现 RSA 和 AES Rijnda
  • Tkinter 绑定 Mac OS“command+q”

    当我按 Command q 时 我试图 停止 根窗口退出 但这是不可能的 其他快捷键在我的 Mac 操作系统上有效 即使在 Windows Linux 中 Alt F4 绑定也可以 捕获 但在 Mac 操作系统中对我来说是不可能的 有任何想
  • QGraphicsView 和 eventFilter

    这个问题已经困扰我两天多了 所以我想我应该问一下 我在Win7上使用Qt 4 5 3 用VC2008编译 我有 MyGraphicsView 继承 QGraphicsView 和 MyFilter 继承 QObject 类 当我将 MyFi
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • 我需要避免尝试更新连接到 TSQLQuery 的 Delphi TClientDataset 中的非物理字段

    概要 我的代码正在尝试更新 Delphi XE 中的非物理字段TClientDataset 连接到TSQLQuery以其SQL属性集 作为运行时的结果创建Open命令 我有一个TClientDataset连接到一个TDatasetProvi
  • 如何追踪“地址 00000000”的访问违规

    我知道如何创建 map 文件来在错误消息包含实际地址时跟踪访问冲突错误 但是如果错误消息说怎么办 Access violation at address 00000000 Read of address 00000000 我从哪里开始寻找这
  • DataGridView SortCompare 事件不会触发

    使用 VS2008 C 和 NET 3 5 我正在使用数据绑定 DataGridView 控件来显示从 Web 服务读取的表格数据 在某些情况下 有一个数字列需要排序 我尝试了几种不同的方法来使其工作 但该列最终仍然按字母顺序排序 即 1
  • 在 Delphi 2007 中将具有透明度的位图保存为 PNG

    我有一个包含透明度信息的 Delphi 位图 32 位 我需要将其转换并保存为 PNG 文件 同时保留透明度 我目前拥有的工具是graphics32 Library GR32 PNG 由Christian Budde 提供 和PNGImag
  • DELPHI 和 WANT 或 NANT

    We use 巡航控制 net http confluence public thoughtworks org display CCNET Welcome to CruiseControl NET在 Delphi 2006 应用程序中进行持
  • 播放选定的音频,同时暂停/重置其他音频

    我有两个通过按钮的单击事件播放的音频元素 如果选择了另一个元素 我已成功地暂停其中一个元素 但还需要将暂停元素设置回 0 0 秒 即暂停和重置 我知道 Javascript 目前没有stop 导致的方法假设这将通过设置其来完成current
  • 当 Delphi 处于覆盖模式时,如何更改它的光标形状?

    当使用 Delphi 的任何版本时 我有时会碰巧按下插入键并打开覆盖模式 这通常是一个很大的麻烦 并且您进入覆盖模式的唯一指示是编辑器底部的小文本 当使用其他程序 首先想到的是 Notepad 时 当您处于插入模式时 文本光标是 当您处于覆
  • jQuery 选择器定位具有 id AND class 的元素不起作用

    我有以下事件处理函数 jQuery document on click button submitb function e alert jQuery 包含在 html 文档中 但是 如果我点击 div class submitb Go di
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • 调试器异常错误和内存超调

    我尝试运行以下代码 但它显示有关内存地址的错误 并显示一条消息 循环后 n 可能未定义 请看一看 var n max integer n integer r R1 f h0 Array of Real const h 0 00889 nip
  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf

随机推荐

  • 如何允许缺少 .d.ts 类型定义的模块?

    我正在使用一些不受欢迎的模块 例如Dyo and js sha3似乎没有任何类型 我现在并不真正关心第三方库中的类型 我不想花几个小时来输入这些类型 我主要将它用于服务器 以限制我的错误并在开发过程中更轻松地进行故障排除 I had a C
  • 从 JSONObjects 的 JSONArray 中删除除一个元素之外的所有元素

    我有一个像这样的 JSONArray org json a a b a c a d a e a f a g a 我想删除所有JSONObjects that do not有钥匙a 除了我幼稚的方法之外 还有更好的方法吗 Iterator o
  • Eclipse C++ 多个项目通用文件

    在 Eclipse CDT 中 我希望有几个 C 项目 projA projB projC 等 其中都包含一些 c cpp and or h来自公共目录的文件 这是我现有的文件结构 Workspace gt projA gt src gt
  • jQuery 将toggleClass 保存在cookie 或localStorage 中

    我正在尝试保存 cookie 或使用localStorage 以更好的为准 记住访问者何时单击加号按钮来显示 隐藏 div 任何人都可以协助使下面的代码与 cookie 一起使用或localStorage plus on click fun
  • 设计:注册登录尝试

    我有一个 Rails 3 0 项目使用devise我被要求在数据库中注册每次成功的登录和每次失败的尝试 来自devise我想我必须扩展文档FailureApp但这些示例只是重定向用户 根本没有使用该模型 在堆栈溢出我刚刚发现这个问题但仍未得
  • CultureInfo 的 2 个字母 ISO 国家/地区代码

    我有一个 Xamarin Forms 应用程序正在获取 GeoLocation 的 2 个字母的 ISO 国家 地区代码 我需要该应用程序以本地风格显示货币 因此 如果我将手机从英国带到日本 它会显示以日元格式设置的货币字段 设置十进制货币
  • Regex & BBCode - 完善嵌套报价

    我正在为我的网站编写一些 BBcode 我已经设法让大部分代码完美运行 但是 QUOTE 标签给了我一些悲伤 当我得到这样的东西时 QUOTE 1 QUOTE 2 This is a quote from someone else QUOT
  • 显示已过去时间

    我需要动态显示经过的时间 我的代码将根据间隔值弹出一条消息 public void button1 Click object sender EventArgs e this TopMost true DialogResult result1
  • Swift 线程 1:致命错误:init(coder:) 尚未实现(调用超级解决方案不起作用)

    嘿伙计们 我已经四处寻找 但仍然找不到解决我的问题的方法 我这里有一个自定义类 import UIKit DatasourceController is simply a UICollectionViewController that al
  • 使用套接字时发送当前值的 Unity 延迟

    Visual Studio 中的 client cs private void SendToServer string HeartRate SetHRTest HeartRate try s client GetStream StreamR
  • 通过 Javascript 预览 Html 文件上传

    我想为一篇文章展示预览之类的东西 所以通过 JS 获取详细信息 但问题来了
  • SVG onmouseover 对于具有重叠元素的组发生两次

    当将函数附加到onmouseoverSVG 组的事件
  • 如何隐藏图像的物理路径

    在我的应用程序中 我通过给出目录的物理路径来显示用户的图像 例如http www example com user images abcdefghijk jpg 但我不想向外部用户公开这个物理路径来访问直接文件 我想根据 gravtar 类
  • 如何在 scala 中将嵌套 JSON 转换为映射对象

    我有以下 JSON 对象 user id 123 data city New York timestamp 1563188698 31 session id 6a793439 6535 4162 b333 647a6761636b user
  • 如何从 hsearch 中删除元素

    我正在使用 GNU C 库提供的 hsearch r 函数 我发现虽然我可以使用 hsearch r 将元素添加到哈希表中并将操作作为 ENTER 传递 但我看不出有什么方法可以从哈希表中删除元素或条目 有人知道为什么会这样吗 我可以执行以
  • 使用 APP_INITIALIZER 延迟加载模块

    我们有一个应用程序 我们通过路由器延迟加载模块 我们需要在应用程序模块启动之前加载一些资源 但我们不想在路由器上使用解析 这就是为什么我们尝试创建一些提供程序工厂 APP INITIALIZER 来从服务器加载一些数据 然后在该延迟加载模块
  • 如何使 PopupWindow 居中?

    我创建了一个活动 其中添加了一个按钮 单击该按钮时会弹出一个弹出窗口 以下是 showPopup 方法的代码 private void showPopup LayoutInflater inflater LayoutInflater thi
  • Java:如何在单个线程中与多个客户端通信

    我有一个属于单个线程的套接字列表 但我想知道是否有一种可行的方式与这些客户端进行通信 读 写 我不想为每个客户端创建一个线程 因为可能有太多用户 并且为每个客户端创建一个线程可能成本太高 我想说蔚来是你最好的选择 查看有关通过套接字进行 N
  • 长时间运行的 ASP.NET 任务

    我知道有很多 API 可以执行此操作 但我也知道托管环境 ASP NET 对您可以在单独的线程中可靠地执行的操作设置了限制 我可能完全错了 所以如果我错了 请纠正我 但这就是我认为我所知道的 请求通常会在 120 秒后超时 这是可配置的 但
  • 当我的程序未激活时如何处理键盘快捷键?

    如果我像这样使用它可以用于多个事件吗 unit Unit4 interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs