全面禁止WINDOWS

Author: 许昭鹏 Date: 2001年 17期

?牐犞钗慌笥眩闶欠裨泄娼筗indows的想法呢?就是诸如禁止Windows桌面、任务栏(包括工具栏的快速启动区域、右下角的通知区域、开始按钮、任务按钮等)、系统按键(包括“Ctrl+Alt+Del”、“Alt+Tab”、“Ctrl+Esc”、“Start-button”等等)、屏幕保护,还有最后的禁止关机。禁止就是不能对它们进行操作,你要是不愿意禁止,你还可以隐藏,把这些统统隐藏起来。
  ?牐犚棺烂妗⑷挝窭副匦胫溃弊烂娴谋尘巴计崭障韵郑⒁庹馐钡钠聊皇敲挥凶烂嫱急旰腿挝窭傅模簿褪撬担嵌际窃谙低称舳蟛抛叭胂低车模⒉皇窍低车暮诵牟糠帧Mü韵低车鼻八写疤宓乃阉骺梢灾溃嵌际谴疤? (当然,并不是普通的窗体),且都拥有自己的句柄,这样,我们就可以用ShowWindow(Wnd, SW_HIDE)来隐藏它们,或者用EnableWindow(Wnd, False)来禁止它们,是不是很简单。关键是要获得它们的句柄,这可以用FindWindow获得,而用FindWindow必须知道所找窗体的类名。下面先列出我们要用到的类名:
  ?牐燬hell_TrayWnd    任务栏整条
  ?牐燭rayNotifyWnd    任务栏的右下角通知区域
  ?牐燘utton           任务栏上的开始按钮
  ?牐燫eBarWindow32    任务栏的工具栏和任务按钮
  ?牐燭rayClockWClass  通知区域的小时钟
  ?牐燬hellDll_DefView  桌面图标
  ?牐燩rogman          程序管理器
  #2?牐?1. 禁止/隐藏整条任务栏
  ?牐爌rocedure TForm1.Button1Click(Sender: TObject);
  ?牐燰ar Wnd: THandle;??
  ?牐燽egin
  ?牐燱nd:= FindWindow('Shell_TrayWnd', nil);
  ?牐?//用下面这一句实现隐藏
  ?牐爄f Wnd <> 0 then ShowWindow(Wnd, SW_HIDE);?牔?
  ?牐?//用下面这一句实现禁止
  ?牐爄f Wnd <> 0 then EnableWindow(Wnd, False);?牔?
  ?牐爀nd;
  ?牐牻购鸵刈詈弥挥靡桓觯蛭亓耍阄薮θグ矗扔诮梗唤沽耍?去了作用,藏不藏都无关紧要。最后别忘了恢复正常必须用ShowWindow(Wnd, SW_SHOW)和EnableWindow(Wnd, True)。
  ?牐犠ⅲ阂韵?2~6只列出如何使用FindWindow
  #2?牐?2. 隐藏任务栏的右下角通知区域
  ?牐燱nd:= FindWindow?煟ǎ?Shell_TrayWnd', nil);
  ?牐燱nd:=FindWindowEx?煟╓nd, HWND(0),'TrayNotifyWnd', nil);
  #2?牐?3. 禁止/隐藏任务栏上的开始按钮
  ?牐燱nd:=FindWindow?煟ǎ?Shell_TrayWnd', nil);
  ?牐燱nd:=FindWindowEx?煟╓nd, HWND(0),?牐?Button', nil);
  #2?牐?4. 禁止/隐藏任务栏的工具栏和任务按钮
  ?牐燱nd:=FindWindow?煟ǎ?Shell_TrayWnd', nil);
  ?牐燱nd:=FindWindowEx?煟╓nd, HWND(0), 'ReBarWindow32', nil);
  #2?牐?5. 隐藏通知区域的小时钟
  ?牐燱nd:=FindWindow?煟ǎ?Shell_TrayWnd', nil);
  ?牐燱nd:=FindWindowEx?煟╓nd, HWND(0), 'TrayNotifyWnd', nil);
  ?牐燱nd:=FindWindowEx?煟╓nd, HWND(0),'TrayClockWClass', nil);
  #2?牐?6. 禁止/隐藏桌面图标
  ?牐燱nd:=FindWindow?煟ǎ?Progman', nil);
  ?牐燱nd:=FindWindowEx?煟╓nd, HWND(0), 'ShellDll_DefView', nil);
  ?牐犚陨?2~6可以直接代入1的Button1Click过程中,以实现相应的功能。并且注意2和5只能隐藏,不能禁止(不信?你可以试试,没有危险的,Hehe)。
  #2?牐?7. 在任务栏中隐藏本程序的按钮
  ?牐燰ar XWndLong: integer;
  ?牐燽egin
  ?牐燲WndLong:= GetWindowLong(Application.Handle,GWL_EXSTYLE);
  ?牐燬howWindow(Application.Handle,SW_HIDE);    //必须先隐藏程序窗口
  ?牐燬etWindowLong(Application.Handle,GWL_EXSTYLE, XWndLong or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW or WS_EX_TOPMOST);
  ?牐燬howWindow(Application.Handle, SW_SHOW);    //设置按钮隐藏后再恢复窗口
  ?牐爀nd;
  ?牐牷指窗磁ハ允居肧etWindowLong(Application.Handle,GWL_EXSTYLE, XWndLong);
  ?牐牪⑶胰匀恍枰礁鯯howWindow,将Application.Handle改成其它程序的句柄还可以隐藏其它程序。
  #2?牐?8. 从关闭程序对话框(按“Ctrl+Alt+Del”时出现)中隐藏本程序:
  ?牐犗仍诔绦蛑械膇mplementation前加上这么一句
  ?牐爁unction RegisterServiceProcess(dwProcessID,dwType:integer):integer; stdcall;external 'KERNEL32.DLL'; //调用系统的外部API函数
  ?牐犎缓笠赜肦egisterServiceProcess(GetCurrentProcessID, 1);
  ?牐牷指聪允居肦egisterServiceProcess(GetCurrentProcessID, 0);
  #2?牐?9. 禁止系统键(包括“Ctrl+Alt+Del”、“Alt+Tab”、“Ctrl+Esc”、“Start-button”等等)
  ?牐爌rocedure TForm1.Button1Click(Sender:TObject);
  ?牐爒ar  pv: integer;
  ?牐燽egin
  ?牐燬ystemParametersInfo(SPI_SCREENSAVERRUNNING,1, @pv,0);?牔?
  ?牐爀nd??
  ?牐牷指从肧ystemParametersInfo(SPI_SCREENSAVERRUNNING,0, @pv,0);??
  #2?牐?10. 禁止屏幕保护
  ?牐犗仍黾右还倘缦拢?
  ?牐爌rocedure TForm1.AppMessage(var msg:TMsg; var Handled: boolean);?牔?
  ?牐燽egin
  ?牐爄f(msg.message = wm_SysCommand)and(msg.wParam = sc_ScreenSave)then
  ?牐燽egin
  ?牐燞andled:= True;??  //禁止屏幕保护
  ?牐燤essageBeep(0);??   //加入自己的处理
  ?牐燤essageDlg('Screen-saver is Disabled!', mtWarning,[mbOk], 0);?牔?
  ?牐爀nd;??
  ?牐爀nd;??
  ?牐犎缓笥茫?
  ?牐爌rocedure TForm1.Button1Click(Sender:TObject);?牔?
  ?牐燽egin
  ?牐燗pplication.OnMessage := AppMessage;??  //开启禁止功能
  ?牐爀nd;??
  ?牐牴乇战构δ苡肁pplication.OnMessage:= nil;??
  ?牐犠⒁猓绦虮匦氪τ诨疃ㄇ疤ǎ┳刺蛭τ诤筇ㄊ蔽薹ń鼗衿聊槐;た嫉南ⅰ?
  #2?牐?11. 禁止关机及退出程序
  ?牐犗仍黾右还倘缦拢?
  ?牐爌rocedure TForm1.AppCloseQuery(Sender:TObject; var CanClose: Boolean);begin
  ?牐燙anClose:= False;?? //禁止关机及退出程序
  ?牐燤essageBeep(0);?牔?
  ?牐燤essageDlg('You Can't shutdown Windows or this application!', mtWarning,[mbOk], 0);?牔?
  ?牐爀nd;??
  ?牐犎缓笥茫?
  ?牐爌rocedure TForm1.Button1Click(Sender:TObject);?牔?
  ?牐燽egin
  ?牐燜orm1.OnCloseQuery:= AppCloseQuery;??  //开启禁止功能
  ?牐爀nd;??
  ?牐牴乇战构δ苡肍orm1.OnCloseQuery:= nil;??
  ?牐犠ⅲ荷饔酶梅椒ā?