送分!大送分!快来帮一帮我! 你得抢得windows的0级控制权,难 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 全面禁止WINDOWS许昭鹏 诸位朋友,你是否曾经有过全面禁止Windows的想法呢?就是诸如禁止Windows桌面、任务栏(包括工具栏的快速启动区域、右下角的通知区域、开始按钮、任务按钮等)、系统按键(包括“Ctrl+Alt+Del”、“Alt+Tab”、“Ctrl+Esc”、“Start-button”等等)、屏幕保护,还有最后的禁止关机。禁止就是不能对它们进行操作,你要是不愿意禁止,你还可以隐藏,把这些统统隐藏起来。要禁止桌面、任务栏必须知道,当桌面的背景图片刚刚显现,注意这时的屏幕是没有桌面图标和任务栏的,也就是说,它们都是在系统启动后才装入系统的,并不是系统的核心部分。通过对系统当前所有窗体的搜索可以知道,它们都是窗体 (当然,并不是普通的窗体),且都拥有自己的句柄,这样,我们就可以用ShowWindow(Wnd, SW_HIDE)来隐藏它们,或者用EnableWindow(Wnd, False)来禁止它们,是不是很简单。关键是要获得它们的句柄,这可以用FindWindow获得,而用FindWindow必须知道所找窗体的类名。下面先列出我们要用到的类名:Shell_TrayWnd 任务栏整条TrayNotifyWnd 任务栏的右下角通知区域Button 任务栏上的开始按钮ReBarWindow32 任务栏的工具栏和任务按钮TrayClockWClass 通知区域的小时钟ShellDll_DefView 桌面图标Progman 程序管理器1. 禁止/隐藏整条任务栏procedure TForm1.Button1Click(Sender: TObject);Var Wnd: THandle;beginWnd:= 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只列出如何使用FindWindow2. 隐藏任务栏的右下角通知区域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;beginXWndLong:= 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;beginSystemParametersInfo(SPI_SCREENSAVERRUNNING,1, @pv,0);end恢复用SystemParametersInfo(SPI_SCREENSAVERRUNNING,0, @pv,0);10. 禁止屏幕保护先增加一过程如下:procedure TForm1.AppMessage(var msg:TMsg; var Handled: boolean);beginif(msg.message = wm_SysCommand)and(msg.wParam = sc_ScreenSave)thenbeginHandled:= True; //禁止屏幕保护MessageBeep(0); //加入自己的处理MessageDlg('Screen-saver is Disabled!', mtWarning,[mbOk], 0);end;end;然后用:procedure TForm1.Button1Click(Sender:TObject);beginApplication.OnMessage := AppMessage; //开启禁止功能end;关闭禁止功能用Application.OnMessage:= nil;注意,程序必须处于活动(前台)状态,因为处于后台时无法截获屏幕保护开始的消息。11. 禁止关机及退出程序先增加一过程如下:procedure TForm1.AppCloseQuery(Sender:TObject; var CanClose: Boolean);beginCanClose:= False; //禁止关机及退出程序MessageBeep(0);MessageDlg('You Can't shutdown Windows or this application!', mtWarning,[mbOk], 0);end;然后用:procedure TForm1.Button1Click(Sender:TObject);beginForm1.OnCloseQuery:= AppCloseQuery; //开启禁止功能end;关闭禁止功能用Form1.OnCloseQuery:= nil;注:慎用该方法。 收藏不过我觉得没那么麻烦,先Form.Heigh := Screen.Heigh;Form.Width := Screnn.Width;再来个 SetWindowPos 把窗口放到最前面,再加一个定时器里面写上:if Form.action = false then Form.Action := True;让别的程序无法得到焦点.这只是简单的.至于结束程序那段,同上 delphi中调用外部应用程序,并返回值 paradox数据库alpha字段乱码怎么办? canvas.textheight跟字体和字体大小有关吗? 如何在新弹出窗口中显示原窗口中的数据? 超难问题!!!! 能不能 实现 修改 一个正在运行中程序 的 窗体的标题?????????? 批处理文件 程序死机问题! 一道大学里的题,请大家帮忙看一看 怎么做XP里的椭圆形气泡提示框? 急急!如何在form1中引用form2的中Var定义的参数 怎样终止do while的运行 关于batchmove的问题!
许昭鹏
诸位朋友,你是否曾经有过全面禁止Windows的想法呢?就是诸如禁止Windows桌面、任务栏(包括工具栏的快速启动区域、右下角的通知区域、开始按钮、任务按钮等)、系统按键(包括“Ctrl+Alt+Del”、“Alt+Tab”、“Ctrl+Esc”、“Start-button”等等)、屏幕保护,还有最后的禁止关机。禁止就是不能对它们进行操作,你要是不愿意禁止,你还可以隐藏,把这些统统隐藏起来。要禁止桌面、任务栏必须知道,当桌面的背景图片刚刚显现,注意这时的屏幕是没有桌面图标和任务栏的,也就是说,它们都是在系统启动后才装入系统的,并不是系统的核心部分。通过对系统当前所有窗体的搜索可以知道,它们都是窗体 (当然,并不是普通的窗体),且都拥有自己的句柄,这样,我们就可以用ShowWindow(Wnd, SW_HIDE)来隐藏它们,或者用EnableWindow(Wnd, False)来禁止它们,是不是很简单。关键是要获得它们的句柄,这可以用FindWindow获得,而用FindWindow必须知道所找窗体的类名。下面先列出我们要用到的类名:Shell_TrayWnd 任务栏整条TrayNotifyWnd 任务栏的右下角通知区域Button 任务栏上的开始按钮ReBarWindow32 任务栏的工具栏和任务按钮TrayClockWClass 通知区域的小时钟ShellDll_DefView 桌面图标Progman 程序管理器1. 禁止/隐藏整条任务栏
procedure TForm1.Button1Click(Sender: TObject);Var Wnd: THandle;beginWnd:= 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只列出如何使用FindWindow2. 隐藏任务栏的右下角通知区域
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;beginXWndLong:= 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;beginSystemParametersInfo(SPI_SCREENSAVERRUNNING,1, @pv,0);end恢复用SystemParametersInfo(SPI_SCREENSAVERRUNNING,0, @pv,0);10. 禁止屏幕保护
先增加一过程如下:procedure TForm1.AppMessage(var msg:TMsg; var Handled: boolean);beginif(msg.message = wm_SysCommand)and(msg.wParam = sc_ScreenSave)thenbeginHandled:= True; //禁止屏幕保护MessageBeep(0); //加入自己的处理MessageDlg('Screen-saver is Disabled!', mtWarning,[mbOk], 0);end;end;然后用:procedure TForm1.Button1Click(Sender:TObject);beginApplication.OnMessage := AppMessage; //开启禁止功能end;关闭禁止功能用Application.OnMessage:= nil;注意,程序必须处于活动(前台)状态,因为处于后台时无法截获屏幕保护开始的消息。11. 禁止关机及退出程序
先增加一过程如下:procedure TForm1.AppCloseQuery(Sender:TObject; var CanClose: Boolean);beginCanClose:= False; //禁止关机及退出程序MessageBeep(0);MessageDlg('You Can't shutdown Windows or this application!', mtWarning,[mbOk], 0);end;然后用:procedure TForm1.Button1Click(Sender:TObject);beginForm1.OnCloseQuery:= AppCloseQuery; //开启禁止功能end;关闭禁止功能用Form1.OnCloseQuery:= nil;注:慎用该方法。
Form.Heigh := Screen.Heigh;
Form.Width := Screnn.Width;
再来个 SetWindowPos 把窗口放到最前面,
再加一个定时器里面写上:
if Form.action = false then
Form.Action := True;
让别的程序无法得到焦点.这只是简单的.至于结束程序那段,同上