通过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,转发请保留这个地址,谢谢

你可能感兴趣的:(OO)