通过API和键盘钩子彻底屏蔽任务条和开始菜单

减小字体 增大字体 作者:佚名  来源:转载  发布时间:2011-02-18 12:38:49

在一些碰到过的多媒体软件编制过程中通常需要彻底屏蔽任务条,通常的办法是调用ShowWindow(h,SW_hide)来隐藏任务条,但是不能屏蔽开始菜单,通过键盘的win功能键还是可以打开开始菜单,所以配合键盘钩子,来屏蔽开始菜单。
library HIDE;

uses
  SysUtils,
  Classes,
  windows,
  messages;

var
hHk :HHOOK;
type
  PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
  KBDLLHOOKSTRUCT = record
    vkCode: DWORD;
    ScanCode: DWORD;
    Flags: DWORD;
    Time: DWORD;
    dwExtraInfo: DWORD;
  end;
{$R *.res}
function ycxsks( 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;

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;

function Enablehide:Boolean;stdcall;export; //外部调用
begin
if hHk = 0 then
  begin
    hHk := SetWindowsHookEx(13,@keyHookProc,HInstance,0);
    Result := True;
  end
else
  Result := False;
ycxsks(true);
end;

function Disablehide:Boolean; stdcall; export; //外部调用
begin
if hHk <> 0 then
  begin
    UnHookWindowsHookEx(hHk);
    hHk := 0;
    Result := True;
  end
else
  Result := False;
ycxsks(False);
end;

exports
Enablehide,
Disablehide;
end.

Tags:

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论