如何使用热键在windows中激活应用程序?(100分)

  • 主题发起人 主题发起人 sensenya
  • 开始时间 开始时间
S

sensenya

Unregistered / Unconfirmed
GUEST, unregistred user!
在windows中,可以用win+r激活‘运行’,如何使用热键激活其它的应用程序?
 
Win+E 资源管理器 :-)

你是要激活自己的应用程序么?
 
可以编一个基于HOOK的程序运行在后台
 
可以给快捷方式设快捷键,或者是上面的办法.
 
用到3个API函数

BOOL RegisterHotKey(
HWND hWnd, //响应该热键的窗口句柄
Int id, //该热键的唯一标识
UINT fsModifiers, //该热键的辅助按键
UINT vk //该热键的键值
);

为了得到唯一标识,我们还将用到另一个API函数

ATOM GlobalAddAtom(

LPCTSTR lpString //自己设定的一个字符串

);

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

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

end;

最后一步:

在窗口的close事件中加入

UnRegisterHotKey(handle, HotKeyId); //注销HotKey, 释放资源。

 
挂上 WH_KEYBOARD 这型的 HOOK
 
I have a component.
<a href=http://www.21jx.com/~haoxg/newsoft/hotkey.zip>hotkey.zip</a>
 
; 我想知道能不能修改注册表之类的来激活热键运行自己的程序?
 
不改注册表是不行的!
 
sensenya:请自觉提前问题或结束帖子!
 
去深度历险去找个钱达智编的钩子程序吧。
 
接受答案了.
 
后退
顶部