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

在一些碰到过的多媒体软件编制过程中通常需要彻底屏蔽任务条,通常的办法是调用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.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值