HOOK的热键已经可以正常截获,但是不知道该怎么让主窗口显示/隐藏

wrksky 2006-07-31 03:42:41
DLL中的主代码如下:
function KeyboardHookHandler(iCode: Integer;wParam:
WPARAM; lParam: LPARAM): LRESULT;stdcall;export;
const _KeyPressMask=$80000000;
//var
//f:textfile;
//temp:string;
begin
result:=0;
if iCode<0 then
Result:=CallNextHookEx(hHook,iCode,wParam,lParam);
//侦测Ctrl+Alt+F12组合键
if ((lParam and _KeyPressMask)=0)
and (GetKeyState(vk_Control)<0)
and (getKeyState(vk_menu)<0) and (wParam=vk_F12) then
begin
if HideHook then
begin
showmessage('HideHook:true;显示');
showWindow(hbefore,SW_SHOW);
hideHook:=false;
end
else
begin
showmessage('HideHook:false;隐藏');
showWindow(hbefore,SW_HIDE);
hideHook:=true;
end
end;
end;
//-这里hbefore是由调用程序传过来的,程序窗口句柄。
function EnableHideHook(hFrmHandle:longint):BOOL; export;
begin
Result:=false;
if hHook<>0 then
exit;//已经有一个HOOK存在
hHook:=SetWindowsHookEx(WH_KEYBOARD,KeyboardHookHandler,HInstance,0);
hbefore:=hFrmHandle;
Result:=hHook<>0;
end;
=====================
//调用程序代码
procedure THideForm.Button1Click(Sender: TObject);
begin
if EnableHideHook(HideForm.Handle) then
showMessage('HotKy Testing...');
end;
=====================
现在问题是,只有调用程序为当前窗口,才能正常显示/隐藏该窗口,否则发送的showMessage(),就没有用处。
请大家帮忙解决。
...全文
273 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixuemao 2006-08-02
  • 打赏
  • 举报
回复
hahafan(注意!此人前途迷茫)正解,以楼主的代码来说直接在主程序RegisterHotKey就可以了,没必要用钩子
zhaoyu_me 2006-08-02
  • 打赏
  • 举报
回复
用RegisterHotKey在Win98下运行游戏时有时好像不能响应,在XP下倒是可以,我以前就遇到过这种情。
不知道直接用GetKeyState是否可以,做个死循环不停地Getkeystate,不知能否在游戏状态下也能用,现在没机会测试,搂主可以试试看
wrksky 2006-08-01
  • 打赏
  • 举报
回复
楼上的回答不错,比较满意。我先试试第一种方法。分随后给您。
hahafan 2006-08-01
  • 打赏
  • 举报
回复
实现钩子的dll对于每个被注入的进程都有一个独立的映射,也就是说每个进程中的钩子都是相对独立的。在注册钩子时传入的hbefore不会被所有的钩子共享,所以会出现这个问题。
解决可以有不同的途径:
1.不传入handle,而是在钩子中通过FindWindow得到需要操作窗口的handle
2.传入handle,开辟一块进程间共享的内存保存该值
3.只是想给自己的开发的软件增加一些快捷健功能的话,那不必用钩子来实现这样的功能,在程序里面使用GetKeyState就可以了,不用写dll,只是需要放在一个定时器里面。
wrksky 2006-08-01
  • 打赏
  • 举报
回复
楼上的能不能说的详细些
jackie168 2006-07-31
  • 打赏
  • 举报
回复
Mark

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧