要定义一个全局热键,通常有三个步骤:     
  1、定义Windows的消息WM_HOTKEY的HOOK链,即

             procedure MyShortCut(Var Message:TMessage);Message WM_HOTKEY;         
  2、向Windows加入一个全局原子hotkey:GlobalAddAtom(’hotkey’),   并保留其句柄          
  3、向Windows登记热键链:   RegisterHotKey   函数原形如下     
    BOOL RegisterHotKey(     
              HWND   hWnd,        //   连接热键的窗口句柄     
              int   id,            //   全局原子句柄    
              UINT   fsModifiers,       //   热键修饰标志     
              UINT   vk           //   虚拟键盘码

              );     
  这里,fsModifiers是指虚拟键盘码vk结合何种键一起生成WM_HOTKEY的消息,它是下列三值的组合:          
    MOD_ALT      //   ALT   键必须按下
    MOD_CONTROL   //   CTRL   键必须按下    
    MOD_SHIFT     //   SHIFT   键必须按下    
  有了这些准备,你就可以定义自己喜欢的方式了。

  下面是一个范例,当CTRL+Q在任何时候被按下时,都会打出“你好,Crtl+Q被按下”的信息。     
  

type

    TForm1   =   class(TForm)

    procedure   FormCreate(Sender:   TObject);

    procedure   FormDestroy(Sender:   TObject);

    protected

    procedure   myshortcut(var   message:   TMessage);   message WM_HOTKEY;

    private

  { Private-Deklarationen   }

    public

  { Public-Deklarationen   }

  end;

  var

   Form1:   TForm1;

   id:Integer;

  implementation

    {$R   *.DFM}

  procedure   TForm1.myshortcut(var   message:   TMessage);

  begin

   ShowMessage(’你好,Crtl   +   Q   被按下’);

  end;

  procedure   TForm1.FormCreate(Sender: TObject);

  begin

    id:=GlobalAddAtom(’hotkey’);

    RegisterHotKey(Handle,id,MOD_CONTROL,88);     // 88是Q的ASCII值

  end;

  退出时候取消热键定义:

  procedure   TForm1.FormDestroy(Sender: TObject);

  begin

   UnRegisterHotKey(Handle,id);

  end;

delphi程序热键的更多相关文章

  1. delphi程序中定义热键

    delphi程序中定义热键   用到3个API函数          BOOL RegisterHotKey        (        HWND hWnd,        //响应该热键的窗口句 ...

  2. 一名Delphi程序员的开发习惯

    一名Delphi程序员的开发习惯 有关开发习惯的一些想法,如鲠在喉,不吐不快.究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些 建议,或者参考(希望不是误 ...

  3. Fastreport使用经验(转)在Delphi程序中访问报表对象

    Fastreport使用经验(转) 在Delphi程序中访问报表对象 最基本的方法就是frxReport1.FindObject. 然后把返回的对象强制转换成它的类型,当然,在报表中必须真的有这么个东 ...

  4. delphi 程序全屏显示无标题栏,覆盖整个屏幕

    delphi 程序全屏显示无标题栏,覆盖整个屏幕,这个在做工控机或屏保时有用的,所以记下 procedure TMainFrm.FormCreate(Sender: TObject); begin w ...

  5. 远程控制篇:在DELPHI程序中拨号上网

    用MODEM拨号上网,仍是大多数个人网民选择上网的方式.如果能在我们的应用程序中启动拨号连接(如IE浏览器程序中的自动拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,运行拨号网络),提高我 ...

  6. 问题-delphi 程序在某电脑中显示???问号 乱码

    问题现象:delphi 程序在某电脑中显示???问号 乱码 问题原因:因为语言的原因.不同的国家可能显示的编码不一样. 问题处理:“控制面板”>“区域和语言选项”>“区域选项”>“标 ...

  7. 让delphi程序不受WINDOWS日期格式的影响

    http://www.cnblogs.com/hnxxcxg/archive/2013/01/30/2882672.html 如果WINDOWS系统的短日期格式为“yyyy/m/d”,执行下面的代码会 ...

  8. 让delphi程序不受WINDOWS日期格式的影响(使用SetLocaleInfo函数和Application.UpdateFormatSettings)

    如果WINDOWS系统的短日期格式为“yyyy/m/d”,执行下面的代码会报错:2013-01-29 00:00:00不是合法的日期procedure TFrmQuerySale.FormShow(S ...

  9. Delphi程序调用C#.Net编译的DLL并打开窗体(详解)

    Delphi程序调用C#.Net编译的DLL并打开窗体(详解)最近用C#.Net写了一个公用模块, 本以为仅提供给.Net程序使用, 但是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是D ...

随机推荐

  1. U3D正播反播动画剪辑

    正播就是直接play item.animation.Play("a"); 反播: item.animation.Play("a"); item.animatio ...

  2. SD卡WAV音乐播放器(quartus11.0)(FAT32)(DE2-115)

    准备工具:格式工厂,Windows录音机,SD卡(小于等于2G),音箱 首先,选一首MP3,用格式工场转化成WAV格式.可以看到转化后的文件变得很大,因为WAV就是AD采样值加个文件头,所以数据量巨大 ...

  3. [svc][op]ssh交互yes问题解决-expect

    Expect是Unix系统中用来进行自动化控制和测试的软件工具C67默认未安装:使用需要安装: yum install expect -ywhich expect #查看安装路径 核心命令: [roo ...

  4. SICP-Exercise 1.5

    Exercise 1.5.  Ben Bitdiddle has invented a test to determine whether the interpreterhe is faced wit ...

  5. TreeView 高速单击时不运行AfterCheck时间

    解决方法1: 在AfterCheck事件中,通过System.Threading.Thread.Sleep()来控制函数的运行的最短时间.保证函数运行时间必须大于某个值 解决方法2: 编写列TreeV ...

  6. nyoj311 完全背包 经典背包问题

    完全背包 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是w. ...

  7. electron 的中文文档的地址 以及 窗口改变的步骤

    electron的中文文档的地址: http://www.kancloud.cn/wizardforcel/electron-doc/137791 1.如何创建窗口和改变窗口: import { Br ...

  8. C语言 · 上帝造题五分钟

    算法提高 上帝造题五分钟   时间限制:1.0s   内存限制:256.0MB      问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n ...

  9. KafkaStream时间戳问题CreateTime = -1引起的程序中断

    Exception in thread "app-8835188a-e0a0-46da-ac2a-6820ec197628-StreamThread-1" org.apache.k ...

  10. MySql: ”Commands out of sync“Error (Connect/C++)

    使用 Connector/C++ 查询 Mysql , 连续调用存储过程时 会出现如下: Commands out of sync; you can't run this command now,st ...