要定义一个全局热键,通常有三个步骤:     
  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. linux安装rzsz(lrzsz)

    lrzsz是一个unix通信套件提供的,X,Y和ZModem文件传输协议,可以用在Windows与linux系统之间的文件传输,体积小速度快,可以与xshell工具配合使用. (1)在线安装 yum ...

  2. 【Android】3.9 覆盖物功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 百度地图SDK所提供的地图等级为3-19级(3.7.1版本中有些部分已经提供到了21级),所包含的信 ...

  3. C++ 智能指针 shared_ptr

    今天晚上去旁听了C++高级编程的课,其中提到智能指针.第一反映还以为是auto_ptr呢,一听才知道是share_ptr这个.哦,原来是C++11特性.大致的原因是auto_ptr有一点缺陷,而sha ...

  4. ny55 懒省事的小明

    懒省事的小明 时间限制:3000 ms  |            内存限制:65535 KB 难度:3 描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而 ...

  5. 《SPARK/TACHYON:基于内存的分布式存储系统》-史鸣飞(英特尔亚太研发有限公司大数据软件部工程师)

    史鸣飞:大家好,我是叫史鸣飞,来自英特尔公司,接下来我向大家介绍一下Tachyon.我事先想了解一下大家有没有听说过Tachyon,或者是对Tachyon有没有一些了解?对Spark呢? 首先做一个介 ...

  6. 修改mysql root账户登录密码

    打开mysql.exe(如果你配置了path的话,打开cmd即可)键入: mysqladmin -u root -p password [你的新密码][回车] 然后会要求你输入你当前的密码,就修改成功 ...

  7. hdu2199(高精度二分模版)

    Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and ...

  8. 基于jQuery点击圆形边框弹出图片信息

    分享一款基于jQuery点击圆形边框弹出图片信息.这是一款鼠标经过图片转换成圆形边框,点击可弹出文字信息.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id=&q ...

  9. 为gridview的每个单元格添加鼠标悬停提示文本(tooltip)

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)    {        for (int i ...

  10. 【WPF/MVVM】把鼠标事件写到Controller层

    要使用Mouse Event,最快捷的方法便是前台控件直接绑定事件,然后再后台代码中实现. 在MVVM中,View层的后台代码无法调用Contrller层的函数.(反过来可以Controller –& ...