??Shell_TrayWnd 任务栏整条
??TrayNotifyWnd 任务栏的右下角通知区域
??Button 任务栏上的开始按钮
??ReBarWindow32 任务栏的工具栏和任务按钮
??TrayClockWClass 通知区域的小时钟
??ShellDll_DefView 桌面图标
??Progman 程序管理器
??1. 禁止/隐藏整条任务栏
??procedure TForm1.Button1Click(Sender: TObject);
??Var Wnd: THandle;?
??begin
??Wnd:= FindWindow('Shell_TrayWnd', nil);
??//用下面这一句实现隐藏
??if Wnd <> 0 then ShowWindow(Wnd, SW_HIDE);??
??//用下面这一句实现禁止
??if Wnd <> 0 then EnableWindow(Wnd, False);??
??end;
??禁止和隐藏最好只用一个,因为隐藏了,你无处去按,等于禁止;禁止了,失去了作用,藏不藏都无关紧要。最后别忘了恢复正常必须用ShowWindow(Wnd, SW_SHOW)和EnableWindow(Wnd, True)。
??注:以下2~6只列出如何使用FindWindow
??2. 隐藏任务栏的右下角通知区域
??Wnd:= FindWindow?('Shell_TrayWnd', nil);
??Wnd:=FindWindowEx?(Wnd, HWND(0),'TrayNotifyWnd', nil);
??3. 禁止/隐藏任务栏上的开始按钮
??Wnd:=FindWindow?('Shell_TrayWnd', nil);
??Wnd:=FindWindowEx?(Wnd, HWND(0),?'Button', nil);
??4. 禁止/隐藏任务栏的工具栏和任务按钮
??Wnd:=FindWindow?('Shell_TrayWnd', nil);
??Wnd:=FindWindowEx?(Wnd, HWND(0), 'ReBarWindow32', nil);
??5. 隐藏通知区域的小时钟
??Wnd:=FindWindow?('Shell_TrayWnd', nil);
??Wnd:=FindWindowEx?(Wnd, HWND(0), 'TrayNotifyWnd', nil);
??Wnd:=FindWindowEx?(Wnd, HWND(0),'TrayClockWClass', nil);
??6. 禁止/隐藏桌面图标
??Wnd:=FindWindow?('Progman', nil);
??Wnd:=FindWindowEx?(Wnd, HWND(0), 'ShellDll_DefView', nil);
??以上2~6可以直接代入1的Button1Click过程中,以实现相应的功能。并且注意2和5只能隐藏,不能禁止(不信?你可以试试,没有危险的,Hehe)。
??7. 在任务栏中隐藏本程序的按钮
??Var XWndLong: integer;
??begin
??XWndLong:= GetWindowLong(Application.Handle,GWL_EXSTYLE);
??ShowWindow(Application.Handle,SW_HIDE); //必须先隐藏程序窗口
??SetWindowLong(Application.Handle,GWL_EXSTYLE, XWndLong or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW or WS_EX_TOPMOST);
??ShowWindow(Application.Handle, SW_SHOW); //设置按钮隐藏后再恢复窗口
??end;
??恢复按钮显示用SetWindowLong(Application.Handle,GWL_EXSTYLE, XWndLong);
??并且仍然需要两个ShowWindow,将Application.Handle改成其它程序的句柄还可以隐藏其它程序。
??8. 从关闭程序对话框(按“Ctrl+Alt+Del”时出现)中隐藏本程序:
??先在程序中的implementation前加上这么一句
??function RegisterServiceProcess(dwProcessID,dwType:integer):integer; stdcall;external 'KERNEL32.DLL'; //调用系统的外部API函数
??然后隐藏用RegisterServiceProcess(GetCurrentProcessID, 1);
??恢复显示用RegisterServiceProcess(GetCurrentProcessID, 0);
??9. 禁止系统键(包括“Ctrl+Alt+Del”、“Alt+Tab”、“Ctrl+Esc”、“Start-button”等等)
??procedure TForm1.Button1Click(Sender:TObject);
??var pv: integer;
??begin
??SystemParametersInfo(SPI_SCREENSAVERRUNNING,1, @pv,0);??
??end?
??恢复用SystemParametersInfo(SPI_SCREENSAVERRUNNING,0, @pv,0);?
??10. 禁止屏幕保护
??先增加一过程如下:
??procedure TForm1.AppMessage(var msg:TMsg; var Handled: boolean);??
??begin
??if(msg.message = wm_SysCommand)and(msg.wParam = sc_ScreenSave)then
??begin
??Handled:= True;? //禁止屏幕保护
??MessageBeep(0);? //加入自己的处理
??MessageDlg('Screen-saver is Disabled!', mtWarning,[mbOk], 0);??
??end;?
??end;?
??然后用:
??procedure TForm1.Button1Click(Sender:TObject);??
??begin
??Application.OnMessage := AppMessage;? //开启禁止功能
??end;?
??关闭禁止功能用Application.OnMessage:= nil;?
??注意,程序必须处于活动(前台)状态,因为处于后台时无法截获屏幕保护开始的消息。
??11. 禁止关机及退出程序
??先增加一过程如下:
??procedure TForm1.AppCloseQuery(Sender:TObject; var CanClose: Boolean);begin
??CanClose:= False;? //禁止关机及退出程序
??MessageBeep(0);??
??MessageDlg('You Can't shutdown Windows or this application!', mtWarning,[mbOk], 0);??
??end;?
??然后用:
??procedure TForm1.Button1Click(Sender:TObject);??
??begin
??Form1.OnCloseQuery:= AppCloseQuery;? //开启禁止功能
??end;?
??关闭禁止功能用Form1.OnCloseQuery:= nil;?
??注:慎用该方法。