全屏程序的系统功能屏蔽处理

全屏程序的系统功能屏蔽处理

作者:彭学周(Favory.Peng

      

    我们在编写全屏应用程序时有时不希望受到一些系统功能的影响,例如:左右的“WIN键”,“Ctrl+ESC”,“Atl+F 4 ,任务栏,桌面菜单以及桌面右键菜单等等;因此我们需要通过代码屏蔽这些功能;

本文代码编辑环境: Delphi 7.0

所涉及到的技术:键盘HOOK,系统窗口查找与隐藏,消息过滤

 

1、屏蔽和开启任务栏和系统桌面以及桌面右键菜单

procedure ShowTrayBarAndDesktop(const YesNo:boolean);

  var

    h,wndHandle:THandle;

    OldValue:Longbool;

  begin

    h:=FindWindow('ProgMan',nil);

    h:=GetWindow(h,GW_CHILD);

    wndHandle:=FindWindow('Shell_TrayWnd',nil);

    if  (YesNo=True)  then

    begin  //显示

       ShowWindow(h,SW_SHOW);

       ShowWindow(wndHandle,SW_SHOW);

       SystemParametersInfo(Spi_screensaverrunning,0,@OldValue,0); //开启按键

    end

    else begin //隐藏

       ShowWindow(h,SW_HIDE);

       ShowWindow(wndHandle,SW_HIDE);

       SystemParametersInfo(Spi_screensaverrunning,1,@OldValue,0); //屏蔽按键

    end;       

  end;

关键函数:FindWindowGetWindowShowWindow

 

2、屏蔽按键“Atl+F 4 ,此处可以不必使用HOOK技术,直接过滤消息就可以实现

编写消息响应函数相同参数的过程:

procedure Tinitializing.AppMessage(var Msg:TMsg;var Handled:Boolean);

begin

  Handled:=False;

  case Msg.message of

  WM_SYSKEYDOWN:

    if (Msg.wParam=VK_F4) then

      Handled:=True;

  end;

end;

在窗口创建事件中加入:

Application.OnMessage:=AppMessage;

 

3、屏蔽“WIN键”,“Ctrl+ESC”,“ALT+TAB”系统功能按钮,利用键盘HOOK处理

定义数据结构:

type

  PKBDLLHOOKSTRUCT   =   ^TKBDLLHOOKSTRUCT;

  TKBDLLHOOKSTRUCT   =   record

      vkCode,

      scanCode,

      flags,

      time:          DWORD;

      dwExtraInfo:   Pointer;

  end;

const

  WH_KEYBOARD_ll = 13;

 

定义键盘HOOK处理函数:

function LowLevelKeyBoardPro(nCode:integer;WParam:WPARAM;LParam:LPARAM):LRESULT;stdcall;

var

  fEatKeystroke:BOOL;

  p:PKBDLLHOOKSTRUCT;

begin

  Result:=0;

  fEatKeystroke := False;

  p:=PKBDLLHOOKSTRUCT(LParam);

  if (nCode=HC_ACTION) then

  begin

    case wparam of

        WM_KEYDOWN,

        WM_SYSKEYDOWN,

        WM_KEYUP,

        WM_SYSKEYUP:            featkeystroke:=(p.vkcode=VK_Lwin)or(p.vkcode=VK_Rwin)or(p.vkcode=VK_apps)or(p.vkcode=VK_ESCAPE)or(p.vkcode=VK_TAB);

    end;

  end;

  if   featkeystroke=true then

       result:=1;

  if   ncode <>0 then

       result := callnexthookex(0,ncode,wparam,lparam);

end;

在窗口创建事件中加入:

var

  hhklowlevelkybd:HHOOK;

begin

       hhklowlevelkybd := SetWindowsHookEx(WH_KEYBOARD_ll,LowLevelKeyBoardPro,HInstance,0);

end;

 

4、让程序随Windows系统启动

Uses 中加入: Registry;

在窗口创建事件中加入:

var

  reg:TRegistry;

begin

  reg := TRegistry.Create;

  try

    reg.RootKey := HKEY_LOCAL_MACHINE;

    if reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/Run',False) then

    begin

      reg.WriteString('FavoryAPP','"' + ParamStr(0) + '"');

      reg.CloseKey;

    end; 

  finally

    reg.Free;

  end;

end;

 

对于全屏程序的系统功能屏蔽我就提出这几点,希望对大家有所帮助!同时也希望大家能积极补充!与大家分享你的经验!

//=================================================

作者:Favory.Peng(彭学周)  2008-10-09

本文到此结束,有不足之处,希望各位高手指教,谢谢!

 

项目名称: SoundContrl框架 版本号: v1.0.1 第一作者: Jef 地址: 中国/江苏 日期: 20091213 电子邮箱: dungeonsnd@126.com 版权: 1.您可以修改及免费使用本程序。 2.修改之后附上您的个人信息发送到上面的作者邮箱,作者负责在全面测试后发布您修改后的新版本。 3.您使用本程序而导致任何伤害以及经济损失,由过错方依法承担所有责任,一概与第一作者及合作单位无关。 4.如果您使用本程序则表示您已经同意此版本协议!否则请勿使用! 项目功能: 这个框架主要演示创建一个全屏应用程序的一种方法,并且屏蔽掉常见系统键。 版本历史: v1.0.1 20091213第一版本 运行步骤: 直接用VisualStudio 2008运行SoundContrl里面的程序,会发现全屏屏蔽掉了系统键。 如何使用: 进行项目开发,可以先建立项目,然后把本解决方案框架拷贝到新建项目中即可。 也可以自己根据需要修改。 其它: 框架分为两部分: 1.Hk.dll. 负责创建全局的低级别的键盘钩子. 钩子回调函数中屏蔽了常见的系统键,如 WinKey,Alt+Tab,Ctrl+Esc,Alt+Esc。(此种方法WinXP下无法屏蔽Ctrl+Alt+Del组合键。) 2.SoundContrl a. 程序演示了如何创建一个全屏程序,并且没有菜单栏、工具栏、状态栏,这些菜单工具及状态都需要程序设计者自己创建。 b. 另外,作为一个全屏程序,必须 要处理有关的系统键,否则用户按了系统键会影响到你的程序。FullScreenDemo调用了Hk.dll创建了键盘钩子,运行程序会自动全屏且无任何按钮,只能通过程序的中预 留(见View类)的Esc键来退出,或者打开任务管理器先在程序上右击选择最小化(不应该直接结束任务或结束进程,因为那样可能无法自动移除键盘钩子),接着在任务栏上 已经最小化的程序图标上右击选择关闭即可关闭应用程序。 友情提示,如果需要MFC原来的菜单只要到MainFram.cpp里面取消我注释掉的即可。另外发布应用程序要把Hk.dll一同发布。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值