用钩子实现快捷键的问题,高手千万要帮忙!
RegisterHotKey注册的全局快捷键在某些游戏下不起作用,用钩子有不知道怎么把消息传回应用程序,我用SendMessge传自定义消息或者WM_HOTKEY消息,但是当程序不是Active是,不管用什么方法都无法接受到消息,甚至把GetMessage换成PeekMessage都不行。
我DELPHI没系统地学过,只看了皮毛。希望能得到高手的帮助。
问题点数:0、回复次数:5Top
1 楼DongXF(孔雀东南飞)回复于 2003-11-01 09:14:56 得分 0
這個可以用全局鍵盤钩子实现,但一言兩語說不清,建議看書, 比如Delphi6 開發大全Top
2 楼RockEx(石头)回复于 2003-11-01 09:20:58 得分 0
自定义热键
...
public
procedure WMhotkeyhandle(var msg:Tmessage);message wm_hotkey;
...
var
hotkeyid:integer;
ifhide:boolean;
implementation
...
procedure TForm1.FormCreate(Sender: TObject);
...
ifhide := false;
hotkeyid := GlobalAddAtom('My HotKey')-$C000;
registerhotkey(handle,hotkeyid,mod_control or mod_alt,$4D);
//设定快捷键为Alt+Ctrl+M
...
procedure TForm1.FormHide(Sender: TObject);
...
ifhide := true;
...
procedure TForm1.Wmhotkeyhandle(var msg:Tmessage);
begin
if (msg.LParamHi=$4D) and (msg.lparamLo=mod_control or mod_alt) then
begin
msg.Result:=1;
if ifhide then begin
application.Restore;
ifhide := false;
end;
end;
end;
...
Top
3 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2003-11-01 09:49:08 得分 0
我不知道你是怎么回传消息的,是否传送到了正确的窗口,你可以通过在SendMessage的时候将hwnd参数设置为HWND_BROADCAST来向所有的窗口广播消息。Top
4 楼snakeli(李佳)回复于 2003-11-01 15:52:35 得分 0
以前有人问过这个问题,说是用HWND_BROADCAST可以实现,但是接受的窗口必须是Overlapped。这个我不太明白。我用的就是全局钩子。我只是奇怪为什么PostMessage到不活动的窗口,那个窗口就收不到消息。
昨天又发现用WM_COPYDATA可以实现,还有没有别的方法?Top
5 楼snakeli(李佳)回复于 2003-11-01 15:54:11 得分 0
在安装钩子的时候把Handle传过去,钩子函数里用PostMessage把消息传回应用程序Top




