注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

delphi如何实现老板键功能  

2014-03-22 18:32:11|  分类: delphi xe5 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

因为我们还要在程序退出的时候,消除这个热键, 所以需要声明一个全局变量: 
HotKeyId: Integer; 

第一步: 

在窗口的create事件中,加入以下代码 
HotKeyId := GlobalAddAtom(‘MyHotKey’) - $C000;
注: HotKeyId的合法取之范围是0x0000到0xBFFF之间, GlobalAddAtom函数得到的值
在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。

第二步: 

在上面的代码下面加入: 
RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8);  
热键的辅助按键包括Mod_Ctrl 、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows
键,即其键面上有Windows标志的那个键,其值为Mod_win。
上面 的代码注册了一个热键:ALT+F8。当然如果你希望象TAKEIT那样,只用F8, 就这么写:

RegisterHotKey(Handle, hotkeyid, 0, VK_F8);  

注:handle是一个特殊的变量,它表示当前窗口的句柄。

这个函数你应该能句举一反三了吧。
原理:
一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应
用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消
息的格式为:  

idHotKey = (int) wParam; // 该参数在设置系统级的热键有用,一般不予使用
fuModifiers = (UINT) LOWORD(lParam);  //热键的辅助按键
uVirtKey = (UINT) HIWORD(lParam); //热键的键值 

第三步: 

注册了热键,就该写下响应代码了。 

首先,在程序头部分的private段中加入声明 (作用是声明这个过程,和声明变量类似。
关于如何声明函数、过程,请请参考各自的帮助文件或其它资料): 

procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY; 

然后在程序中加入如下代码: 
procedure TFmain.HotKeyDown(var Msg: Tmessage);
begin
  if (Msg.LparamLo = MOD_ALT) AND (Msg.LParamHi = VK_F8) then // 假设热键为ALT+F8
  begin
    ShowWindow(Application.Handle, SW_show);
    ShowWindow(Self.Handle, SW_show);
  end else
  if Msg.LParamHi = VK_F8 then // 假设热键为F8
  begin
    ShowWindow(Application.Handle, SW_hide);
    ShowWindow(Self.Handle, SW_hide);
  end;
end;

最后一步: 

在窗口的close事件中加入 
UnRegisterHotKey(handle, HotKeyId); //注销HotKey, 释放资源。

unit Main;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    HotKeyId_show,HotKeyId_hide : Integer;
    procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY; 
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  HotKeyId_show := GlobalAddAtom('MyHotKey_show') - $C000;//设置老板键
  RegisterHotKey(Handle, HotKeyId_show, 0, VK_F8);   //注册老板键F8

  HotKeyId_hide := GlobalAddAtom('MyHotKey_hide') - $C000;//设置老板键
  RegisterHotKey(Handle, HotKeyId_hide, MOD_ALT, VK_F8);   //注册老板键ALT+F8
end;

procedure TForm1.HotKeyDown(var Msg: Tmessage);
begin
  if (Msg.LparamLo = MOD_ALT) AND (Msg.LParamHi = VK_F8) then // 假设热键为ALT+F8
  begin
    ShowWindow(Application.Handle, SW_show);
    ShowWindow(Self.Handle, SW_show);
  end else
  if Msg.LParamHi = VK_F8 then // 假设热键为F8
  begin
    ShowWindow(Application.Handle, SW_hide);
    ShowWindow(Self.Handle, SW_hide);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Handle, HotKeyId_show);
  UnRegisterHotKey(Handle, HotKeyId_hide);
end;

end.
  评论这张
 
阅读(327)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017