读书人

经过HOOK来实现隐藏任务栏

发布时间: 2013-02-24 17:58:56 作者: rapoo

通过HOOK来实现隐藏任务栏
首先HOOK就需要创建一个DLL,这个我就不讲了

例如我们创建的DLL叫:HIDEWINDOWBAR

我们再定义一个全局的 句柄:HKHandle :HHOOK;

还有一个结构体

type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
dwExtraInfo: DWORD;
end;



然后开始写代码

首先一个函数是隐藏任务栏

function YCRWL( yc:Boolean): Boolean;stdcall; //隐藏-显示任务条

var
h:THandle;
begin
if yc = True then
begin
h:=FindWindow('Shell_TrayWnd',nil);
ShowWindow(h,SW_hide); //隐藏任务条
end else
begin
h:=FindWindow('Shell_TrayWnd',nil);
ShowWindow(h,SW_SHOW); //显示任务条
end;
Result:=true;
end;



下面是定义的两个对外导出的函数

1:function Enablehidewindowsbar:Boolean;stdcall;export; //外部调用

begin
if hHk = 0 then
begin
hHk := SetWindowsHookEx(13,@keyHookProc,HInstance,0);
Result := True;
end
else
Result := False;
ycxsks(true);
end;

2:function disEnablehidewindowsbar:Boolean; stdcall; export; //外部调用

begin
if hHk <> 0 then
begin
UnHookWindowsHookEx(hHk);
hHk := 0;
Result := True;
end
else
Result := False;
ycxsks(False);

end;

exports

Enablehidewindowsbar, disEnablehidewindowsbar;



下面是HOOK函数

主要是现实了都按键的控制



function keyHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
//调用键盘钩子,屏蔽左右win功能键
var
p: PKBDLLHOOKSTRUCT;
y: integer;
begin
if nCode<0 then
Result:= CallNextHookEx(hHk,nCode,WParam,LParam)
else
begin
y := 0;
case WParam of
WM_KEYDOWN,WM_SYSKEYDOWN: //按键后判断所按键
begin
p:=PKBDLLHOOKSTRUCT(Lparam);
if p^.vkCode = VK_LWIN then
y := 1;
if p^.vkCode = VK_RWIN then
y := 1;
end;
WM_KEYUP,WM_SYSKEYUP: //松开按键后判断所按键
begin
p:=PKBDLLHOOKSTRUCT(Lparam);
if p^.vkCode = VK_LWIN then
y := 1;
if p^.vkCode = VK_RWIN then
y := 1;
end;
end;
if y=1 then
Result:=1 //如果为WIN功能键则屏蔽
else
Result:= CallNextHookEx(hHk,nCode,WParam,LParam); //其他键放下一个钩子
end
end;

有了这些,可以自己拼接成一个单元,这里就不讲了
本文地址:http://www.xszlo.com/article/2012-12-03/7570.html,转发请保留这个地址,谢谢

读书人网 >编程

热点推荐