全面禁止WINDOWS
?牐犚棺烂妗⑷挝窭副匦胫溃弊烂娴谋尘巴计崭障韵郑⒁庹馐钡钠聊皇敲挥凶烂嫱急旰腿挝窭傅模簿褪撬担嵌际窃谙低称舳蟛抛叭胂低车模⒉皇窍低车暮诵牟糠帧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;??
?牐犠ⅲ荷饔酶梅椒ā?