因为我的程序需要多开,多开之后前面开的程序热键就失效了。为此我想用2个思路解决。
1、如果检测到已经注册热键F2,则开始注册热键F3,依次类推。也就是假如我开3个程序,控制他们的热键分别是F2,F3,F4.
2、要么就全都用同一个热键F2,同时可以隐藏或重现。
请问这2种思路如何实现?谢谢。
再次跟上个贴子中的Bo_Sys和kaikai_kk说声抱歉!
1、如果检测到已经注册热键F2,则开始注册热键F3,依次类推。也就是假如我开3个程序,控制他们的热键分别是F2,F3,F4.
2、要么就全都用同一个热键F2,同时可以隐藏或重现。
请问这2种思路如何实现?谢谢。
再次跟上个贴子中的Bo_Sys和kaikai_kk说声抱歉!
解决方案 »
- Delphi写的ado+Access程序,运行时提示'找不到%1'
- 转了几次函数,数据丢失了
- delphi编写dll,要求:其他语言也可访问
- 新手,请教一个Delphi+Access的查询问题!
- delphi数据库设计的两个问题 on clientdataset and tquery
- 请问如何把字符串型(string)转换成色彩型(tcolor)变量呢?
- TDataSetProvider.GetRecords如何取出XML记录集
- Chart图表如何在运行期打开设计对话框?
- 怎样判断一个字符串是合法路径?
- 我应该用Delphi还是VS.NET?
- delphi 程序 关于托盘与进程
- 一个DBComboBox1控件问题!
我们入门的时候,也经常受批评即使不是多的话,也有可能跟别的软件热键产生冲突
这问题不用搞的太复杂,像QQ一样,在程序里面做个设置,让用户来设置快捷键
初始时快捷键是一样的,用户设置后就使用新的
自己建个工程测试一下,达到效果了再移植到自己的程序上面去吧在程序中注册热键就是用一个button,在click事件加上这2句即可:
UnRegisterHotKey(handle,_HotKey);
RegisterHotKey(Handle,_HotKey,0,vk_F2);//vk_F2变新热键
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
_HotKey:Integer;
procedure HotKey(var Msg:Tmessage);message WM_HOTKEY;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses ShellApi;{$R *.dfm}procedure doNotifyIconData(aType: String);
var
lpData: PNotifyIconData;
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.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 TForm1.HotKey(var Msg:Tmessage);
begin
if Msg.LParamHi=vk_F2 then
begin
if self.Visible then
begin
doNotifyIconData('del');
self.Visible:=false;
end else
begin
doNotifyIconData('add');
self.Visible:=true;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
_HotKey:=GlobalAddAtom('HotKey')-$C000;
RegisterHotKey(Handle,_HotKey,0,vk_F2); {取出用户设定的热键,把vk_F2变一下即可}
doNotifyIconData('add');
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,_HotKey);
end;end.
想请问下那个RegisterHotKey的bool返回值怎么看?
if ..... then (这里填什么呢?)
RegisterHotKey(Handle,_HotKey,0,vk_F3);
if not RegisterHotKey(...) then 失败