我想给程序定义一个热键,就是程序没有焦点时也能通过热键执行。查了api函数,找到RegisterHotKey函数。其中有几个问题,请老鸟指教。procedure TMainForm.FormShow(Sender: TObject);
begin
apphwnd:=GetModuleHandle('shoot'); //此处能得到程序的句柄吗???
if RegisterHotKey(apphwnd,0,MOD_CONTROL+MOD_SHIFT,ord('C')) then
MessageBox(0,'Error!','Error',MB_OK or MB_ICONERROR);
end;procedure TMainForm.WMSysCommand(var Msg: TWMSysCommand); //这样监听热键行吗???
begin
if (Msg.CmdType=SC_HOTKEY) then //此处如何得到热键???
MessageBox(apphwnd,'Hot ok','ok',MB_OK)
else
DefaultHandler(Msg);
end;我刚学“消息”,很多地方不懂,还请各位高手耐心指教。 先谢了。
begin
apphwnd:=GetModuleHandle('shoot'); //此处能得到程序的句柄吗???
if RegisterHotKey(apphwnd,0,MOD_CONTROL+MOD_SHIFT,ord('C')) then
MessageBox(0,'Error!','Error',MB_OK or MB_ICONERROR);
end;procedure TMainForm.WMSysCommand(var Msg: TWMSysCommand); //这样监听热键行吗???
begin
if (Msg.CmdType=SC_HOTKEY) then //此处如何得到热键???
MessageBox(apphwnd,'Hot ok','ok',MB_OK)
else
DefaultHandler(Msg);
end;我刚学“消息”,很多地方不懂,还请各位高手耐心指教。 先谢了。
解决方案 »
- FastReport2.5 主项数据1 求助!!虚拟数据集 记录数 怎么在page 的(OnBeforePrint)事件动态写记录
- 为什么我的程序运行一段时间后就监听了从1027-5000的全部端口?
- 求助,谁帮我下个东西
- 开发圆角Panel的问题,老闪!
- 任务管理器
- image类型怎样压缩保存到数据库,读出时解压释放
- 请教一个很菜的问题self.perform(WM_KEYDOWN,VKRETURN,0);(对不起,小弟没分了。)
- 关于dbgrideh的问题!还得请大家帮忙啊!
- 请问用什么样的数据库系统比较好!!
- 关于Delphi7内嵌TChromium的问题
- 如何干预一个线程的挂起、继续、停止?
- 如何遍历硬盘上的所有文件?
BOOL RegisterHotKey(
HWND hWnd, // window to receive hot-key notification
int id, // identifier of hot key
UINT fsModifiers, // key-modifier flags
UINT vk // virtual-key code);
参数 id为你自己定义的一个ID值,对一个线程来讲其值必需在0x0000 - 0xBFFF范围之内,对DLL来讲其值必需在0xC000 - 0xFFFF 范围之内,在同一进程内该值必须唯一
参数 fsModifiers指明与热键联合使用按键,可取值为:MOD_ALT MOD_CONTROL MOD_WIN MOD_SHIFT
参数 vk指明热键的虚拟键码
首先(举个例子):
RegisterHotKey(handle,globaladdatom('hot key'),MOD_ALT,vk_f12);
然后在form中声明一个函数(过程):
procedure hotkey(var msg:tmessage);message wm_hotkey;
过程如下:
procedure TForm1.hotkey(var msg:tmessage);
begin
if (msg.LParamHi=VK_F12) and (msg.LParamLo=MOD_ALT) then
begin
form1.show;
SetForegroundWindow(handle);
end;
end;
这样,不管你在什么地方,窗口就会显示出来。
当然,你要GlobalDeleteAtom;unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
aatom:atom;
procedure hotkey(var msg:tmessage);message wm_hotkey;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
aatom:=globaladdatom('hot key');
RegisterHotKey(handle,aatom,MOD_ALT,vk_f12);
end;procedure TForm1.hotkey(var msg:tmessage);
begin
if (msg.LParamHi=VK_F12) and (msg.LParamLo=MOD_ALT) then
SetForegroundWindow(handle);
end;