哪位大虾帮个忙,关于hotkey的,谢谢!(30分)

  • 主题发起人 主题发起人 菜中菜
  • 开始时间 开始时间

菜中菜

Unregistered / Unconfirmed
GUEST, unregistred user!
象QQ的系统参数设置HOTKEY一样,在任何情况下能激活的热键...<br><br>程序用3个HOTKEY,可以自定义的那种... <br><br>哪位能贴一下CODE,谢谢!!!
 
{按Ctrl+Alt+Z调出记事本}<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; RegisterHotkey(handle,GlobalAddAtom('Hotkey1'),mod_control+<br>&nbsp; &nbsp; mod_Alt,ord('Z')); &nbsp; //定义热键Ctrl+Alt+Z<br>end;<br><br>procedure TForm1.WMHOTKEY(var msg: TWMHOTKEY);<br>begin<br>&nbsp; WinExec('notepad',SW_show);<br>end;<br><br>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>begin<br>&nbsp; UnRegisterHotkey(handle,GlobalAddAtom('Hotkey1'));<br>end;
 
不能自定义啊?怎么用HOTKEY插件,并且随时都能激活?<br>
 
var<br>&nbsp; HotkeyId :Integer;<br><br>&nbsp; HotkeyId:=GlobalAddAtom(Pchar('UserDefineHotKey'))-$C000; //减去$C000是为了保证取值范围的限制<br>&nbsp; RegisterHotkey(Handle,Hotkeyid,MOD_CONTROL or MOD_Alt, $41);//敏感键为ctrl+Alt+A<br><br>&nbsp; UnRegisterhotkey(Handle,HotkeyId);<br>&nbsp; DeleteAtom(HotKeyID);<br>
 
我有个控件,AMHotkey,D5,D6都能用。你要吗?
 
to yzhshi: 我需要的是能自定义的...<br>TO COZO:DELPHI里不是有HOTKEY控件吗?那个能用吗?
 
对这个问题讨论得够多啦!<br>给个联系方式发给你一个!前一阵子做过了!
 
怎么用汇编写呀?
 
有的话请发我信箱里,谢谢!!<br><br>E-mail: k@sohu.com<br>QQ:245022
 
QQ是用DLL做的这个功能,里面有个钩子啊,我想做这样的东西应该没有问题的,你要的话<br>告诉我,我写一下,好久没有试试身手了,呵呵!!!!<br>my e-mail address:tufeiping@sina.com<br>
 
请晶晶帮着写一个,然后把CODE发到 k@sohu.com<br><br>谢谢.......<br><br>顺便问一下,hotkey控件是做什么用的?为什么需要用dll实现呢?
 
菜中菜:你要的代码和程序我刚写好,发给你了,接收啊!呵呵<br>hotkey是做什么的?我也不知道,可能是和我写的那个DLL差不多的意思吧,至少功能一样。<br>至于为什么要用DLL来实现热键功能简单说明如下:<br>我们做的每个程序都可以在主窗体上设置HOTKEY,但这个键只有当这个程序的窗体处于当前<br>窗体(焦点位于这个程序的主窗体上)!如果这个程序我们将它缩小,或是启动别的程序,<br>使别的程序变成当前窗口,那么我们就不可以用刚才那个HOTKEY的功能了,这是因为HOTKEY<br>是属于进程的一个函数,要象QQ那样,无论是QQ为当前窗口,还是隐藏的,我们都可以用<br>Alt+Ctrl+Z来打开QQ,这就要在系统中安装钩子,这个钩子负责监视所有的键盘触发消息,<br>而钩子函数的安装最典型的方法就是“DLL注入”,通过“DLL注入”方法我们还可以用钩子<br>实现很多有意思的功能!
 
非常感谢晶晶!!!!!!!<br><br>我刚学delphi没几天,很菜啊<br>我这里有程序,是f12激活的code,没用dll<br><br>继续问:<br>我现在想做的是,把下面这个程序改成用户用hotkey控件可以及时自定义快捷健...<br>就是用HOTKEY控件读入快捷键,然后将其SCANCODE赋与key,我想这就应该可以实现了<br>我用showmessage(inttostr(hotkey1.HotKey));查看SCANCODE的,查出F12是123,确实可以实现<br>CTRL+ALT+X的SCANCODE 是49240,我把KEY:=123 改成KEY:=49240后,用C-A-X却无法激活程序,不知何故?<br><br>//code<br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp; &nbsp; procedure FormClose(Sender: TObject; var Action: TCloseAction);<br>&nbsp; private<br>&nbsp; &nbsp; procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br>&nbsp; ID:integer;<br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>var key:integer;<br>begin<br>&nbsp; &nbsp; id:=GlobalAddAtom('MyHotkey');<br>&nbsp; &nbsp; key:=123;//scancode of F12 is 123<br>&nbsp; &nbsp; RegisterHotKey(handle,id,0,key);<br>end;<br><br>procedure TForm1.WMHotKey (var Msg : TWMHotKey);<br>begin<br>&nbsp; if msg.HotKey = id then showmessage('You pressed F12');<br>end;<br>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>begin<br>&nbsp; &nbsp;UnRegisterHotKey(handle,id);<br>&nbsp; &nbsp;GlobalDeleteAtom(id);<br>end;<br><br>end. <br>
 
代码中你是向系统注册热键,请注意RegisterHotKey()函数的用法,你可以查找帮助,上面<br>是这样写的:BOOL RegisterHotKey(<br>&nbsp; &nbsp; HWND hWnd, // window to receive hot-key notification<br>&nbsp; &nbsp; int id, // identifier of hot key<br>&nbsp; &nbsp; UINT fsModifiers, // key-modifier flags<br>&nbsp; &nbsp; UINT vk // virtual-key code//注意这里写的,是“虚拟键”的键值<br>虚拟键值为49240??没有啊,当然函数就返回false了。这种方法我很少用,不好!!
 
你应该这样写:<br>RegisterHotkey(handle,GlobalAddAtom('Hotkey'),mod_control+mod_Alt,ord('X'));<br>再在消息处理代码中加入你要处理的winexec()就可以了!!!! &nbsp;
 
BOOL RegisterHotKey(<br>&nbsp; &nbsp; HWND hWnd, // window to receive hot-key notification<br>&nbsp; &nbsp; int id, // identifier of hot key<br>&nbsp; &nbsp; UINT fsModifiers, // key-modifier flags<br>&nbsp; &nbsp; UINT vk // virtual-key code<br>参数UINT fsModifiers就是你要设定的组合键了,用0表示不用组合键!可以结束这个问题<br>的讨论了,发分吧!!呵呵
 
感动~~~~~~~~<br>晶晶,谢您了~~~~~~~```````````````````````````````````````````````````````````````````````````````````````````````````````````````````
 
TO jingjing:<br>http://lilixp.topcities.com/hotkey.htm<br><br>我写好了,没用hook和dll,我把code也传了,你看看对不对<br><br>code的密码是turbo
 
看了,试了一下,不错啊!!!
 
我现在在考虑一个问题.....<br>交替、双击热键 实现靠什么<br>只能利用timer判断上次击剑内容与间隔?<br>还有别的方法了吗?<br><br>
 
后退
顶部