读书人

Delphi编写的服务中怎么实现定义全局快

发布时间: 2012-12-30 10:43:15 作者: rapoo

Delphi编写的服务中如何实现定义全局快捷键?
RT
在Delphi编写的服务中,如何实现定义一个全局快捷键并相应?
[解决办法]
Delphi编写的服务中怎么实现定义全局快捷键
上个图让你看看吧,代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, RXShell;
type
TFrmKey = class(TForm)
Label1: TLabel;
BitBtn1: TBitBtn;
RxTrayIcon1: TRxTrayIcon;
ComboBox1: TComboBox;
BitBtn2: TBitBtn;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
//procedure WMHotKey(var Msg: TWMHotKey);
_HotKey:Integer;
procedure HotKey(var Msg:Tmessage);message WM_HOTKEY;
end;
var
FrmKey: TFrmKey;
implementation

uses ShellApi;

{$R *.dfm}
procedure doNotifyIconData(aType: String);
var
lpData: PNotifyIconData; //引用单元 uses ShellApi;
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := FrmKey.Handle;
lpData.hIcon := Application.Icon.Handle;
lpData.uID :=0;
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
if (aType = 'add') then
Shell_NotifyIcon(NIM_ADD, lpData)
else if (aType = 'del') then
Shell_NotifyIcon(NIM_DELETE, lpData);
dispose(lpData);
end;
procedure TFrmKey.HotKey(var Msg:Tmessage);
begin
{ if ((Msg.LParamHi=vk_F1) or (Msg.LParamHi=vk_F2) or (Msg.LParamHi=vk_F3) or (Msg.LParamHi=vk_F4) or
(Msg.LParamHi=vk_F5) or (Msg.LParamHi=vk_F6) or (Msg.LParamHi=vk_F7) or (Msg.LParamHi=vk_F8) or
(Msg.LParamHi=vk_F9) or (Msg.LParamHi=vk_F10) or (Msg.LParamHi=vk_F11) or (Msg.LParamHi=vk_F12)) then
begin }
if self.Visible then
begin
doNotifyIconData('del');
self.Visible:=false;
end
else
begin
doNotifyIconData('add');
self.Visible:=true;
end;
//end;
end;
procedure TFrmKey.FormCreate(Sender: TObject);
begin
//初始化功能键列表 F1---F12
ComboBox1.Clear;
ComboBox1.Items.Add('请选择功能热键');
ComboBox1.Items.Add('F1');
ComboBox1.Items.Add('F2');
ComboBox1.Items.Add('F3');
ComboBox1.Items.Add('F4');


ComboBox1.Items.Add('F5');
ComboBox1.Items.Add('F6');
ComboBox1.Items.Add('F7');
ComboBox1.Items.Add('F8');
ComboBox1.Items.Add('F9');
ComboBox1.Items.Add('F10');
ComboBox1.Items.Add('F11');
ComboBox1.Items.Add('F12');
ComboBox1.ItemIndex:=0; //定义到F1上

self.Position:=poDesktopCenter; //窗体 居中显示
end;
procedure TFrmKey.BitBtn1Click(Sender: TObject);
begin
_HotKey:=GlobalAddAtom('HotKey')-$C000;

case ComboBox1.ItemIndex of
1:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F1 ';
RegisterHotKey(Handle,_HotKey,0,vk_F1); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
2:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F2 ';
RegisterHotKey(Handle,_HotKey,0,vk_F2); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
3:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F3 ';
RegisterHotKey(Handle,_HotKey,0,vk_F3); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
4:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F4 ';
RegisterHotKey(Handle,_HotKey,0,vk_F4); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
5:
begin
RegisterHotKey(Handle,_HotKey,0,vk_F5); {取出用户设定的热键,把vk_F2变一下即可}
Label1.Caption:='键盘输入检测快捷键 热键为:F5 ';
doNotifyIconData('add');
end;
6:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F6 ';
RegisterHotKey(Handle,_HotKey,0,vk_F6); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
7:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F7 ';
RegisterHotKey(Handle,_HotKey,0,vk_F7); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
8:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F8 ';
RegisterHotKey(Handle,_HotKey,0,vk_F8); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
9:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F9 ';
RegisterHotKey(Handle,_HotKey,0,vk_F9); {取出用户设定的热键,把vk_F2变一下即可}


doNotifyIconData('add');
end;
10:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F10 ';
RegisterHotKey(Handle,_HotKey,0,vk_F10); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
11:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F11 ';
RegisterHotKey(Handle,_HotKey,0,vk_F11); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
12:
begin
Label1.Caption:='键盘输入检测快捷键 热键为:F12 ';
RegisterHotKey(Handle,_HotKey,0,vk_F12); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;
end;

end;
procedure TFrmKey.BitBtn2Click(Sender: TObject);
begin
UnRegisterHotKey(handle,_HotKey);//注消热键
end;
end.
如果还是不懂的话,可以关注一下我的QQ号,我将完整代码传给你的
[解决办法]
没做过,但是我在想,服务程序运行在SYSTEM下,工作在不同的桌面
定义热键能有用?
[解决办法]
无外乎就是 监听键盘
响应消息

读书人网 >.NET

热点推荐