RT

解决方案 »

  1.   

    主要是依靠API,ExitWindows,在98下直接调用,在WIN2000和XP下得先取得权限
    BOOL ExitWindows(    DWORD dwReserved, // reserved 
        UINT uReserved  // reserved 
    );
    EWX_FORCE Forces processes to terminate. When this flag is set, Windows does not send the messages WM_QUERYENDSESSION and WM_ENDSESSION to the applications currently running in the system. This can cause the applications to lose data. Therefore, you should only use this flag in an emergency.
    EWX_LOGOFF Shuts down all processes running in the security context of the process that called the ExitWindowsEx function. Then it logs the user off.
    EWX_POWEROFF Shuts down the system and turns off the power. The system must support the power-off feature.Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Res section. Windows 95: Security privileges are not supported or required.
    EWX_REBOOT Shuts down the system and then restarts the system. Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Res section. Windows 95: Security privileges are not supported or required.
    EWX_SHUTDOWN Shuts down the system to a point at which it is safe to turn off the power. All file buffers have been flushed to disk, and all running processes have stopped. Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Res section. Windows 95: Security privileges are not supported or required.
      

  2.   

    function ShutDownSystem():BOOL;
    var
      hProcess,hAccessToken:THandle;
      LUID_AND_ATTRIBUTES:TLUIDAndAttributes;
      TOKEN_PRIVILEGES: TTokenPrivileges;
      BufferIsNull:DWORD;
    Const
      SE_SHUTDOWN_NAME='SeShutdownPrivilege';
    begin
      hProcess:=GetCurrentProcess();OpenProcessToken(hprocess,TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,hAccessToken);
      LookupPrivilegeValue(Nil,SE_SHUTDOWN_NAME,LUID_AND_ATTRIBUTES.Luid);
      LUID_AND_ATTRIBUTES.Attributes:=SE_PRIVILEGE_ENABLED;
      TOKEN_PRIVILEGES.PrivilegeCount:=1;
      TOKEN_PRIVILEGES.Privileges[0]:=LUID_AND_ATTRIBUTES;
      BufferIsNull:=0;AdjustTokenPrivileges(hAccessToken,False,TOKEN_PRIVILEGES,sizeof(TOKEN_PRIVI
    LEGES),Nil,BufferIsNull);
      ExitWindowsEx(EWX_REBOOT, 0);
    ShutDownSystem:=True;
    end;
    这个是取得权限,然后关机的
      

  3.   

    ShutDownSystem:=True;  这个语句提示
    右边不能被指定
    left side cannot be assigned to
      

  4.   

    LockWorkStation
    锁定本机,windows2000
      

  5.   

    可以直接在Windows的运行窗口执行以下命令,在Delphi中你可以这样使用:
    winexec(Pchar('StrCommand'),sw_Show);
    其中"StrCommand"代表以下命令之一(使用Windows中的运行不要加引号):"rundll32 shell32,Control_RunDLL" - 运行控制面板
    "rundll32 shell32,OpenAs_RunDLL" - 打开"打开方式"窗口
    "rundll32 shell32,ShellAboutA Info-Box" - 打开"关于"窗口
    "rundll32 shell32,Control_RunDLL desk.cpl" - 打开"显示属性"窗口
    "rundll32 user,cascadechildwindows" - 层叠全部窗口
    "rundll32 user,tilechildwindows" - 最小化所有的子窗口
    "rundll32 user,repaintscreen" - 刷新桌面
    "rundll32 shell,shellexecute Explorer" - 重新运行Windows Explorer
    "rundll32 keyboard,disable" - 锁写键盘
    "rundll32 mouse,disable" - 让鼠标失效
    "rundll32 user,swapmousebutton" - 交换鼠标按钮
    "rundll32 user,setcursorpos" - 设置鼠标位置为(0,0)
    "rundll32 user,wnetconnectdialog" - 打开"映射网络驱动器"窗口
    "rundll32 user,wnetdisconnectdialog" - 打开"断开网络驱动器"窗口
    "rundll32 user,disableoemlayer" - 显示BSOD窗口, (BSOD) = Blue Screen Of Death, 即蓝屏
    "rundll32 diskcopy,DiskCopyRunDll" - 打开磁盘复制窗口
    "rundll32 rnaui.dll,RnaWizard" - 运行"Internet连接向导", 如果加上参数"/1"则为silent模式
    "rundll32 shell32,SHFormatDrive" - 打开"格式化磁盘(A)"窗口
    "rundll32 shell32,SHExitWindowsEx -1" - 冷启动Windows Explorer
    "rundll32 shell32,SHExitWindowsEx 1" - 关机
    "rundll32 shell32,SHExitWindowsEx 0" - 退当前用户
    "rundll32 shell32,SHExitWindowsEx 2" Windows9x 快速重启
    "rundll32 krnl386.exe,exitkernel" - 强行退出Windows 9x(无确认)
    "rundll rnaui.dll,RnaDial "MyConnect" - 运行"网络连接"对话框
    "rundll32 msprint2.dll,RUNDLL_PrintTestPage" - 选择打印机和打印测试页
    "rundll32 user,setcaretblinktime" - 设置光标闪烁速度
    "rundll32 user, setdoubleclicktime" - 测试鼠标双击速度
    "rundll32 sysdm.cpl,InstallDevice_Rundll" - 搜索非PnP设备
     控制面板中的各项功能   {控制面板程序}
     winexec('rundll32.exe shell32.dll, Control_RunDLL', 9);
     {辅助选项 属性-键盘}
     winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 1', 9);
     {辅助选项 属性-声音}
     winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 2', 9);
     {辅助选项 属性-显示}
     winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 3', 9);
     {辅助选项 属性-鼠标}
     winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 4', 9);
     {辅助选项 属性-常规}
     winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 5', 9);
     {添加/删除程序 属性-安装/卸载}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 1', 9);
     {添加/删除程序 属性-Windows安装程序}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 2', 9);
     {添加/删除程序 属性-启动盘}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 3', 9);
     {显示 属性-背景}
     winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 0', 9); 
     {显示 属性-屏幕保护程序}
     winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 1', 9);
     {显示 属性-外观}
     winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 2', 9);
     {显示 属性-设置}
     winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 3', 9);
     {Internet 属性-常规}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 0', 9);
     {Internet 属性-安全}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 1', 9);
     {Internet 属性-内容}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 2', 9);
     {Internet 属性-连接}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 3', 9);
     {Internet 属性-程序}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 4', 9);
     {Internet 属性-高级}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 5', 9);
     {区域设置 属性-区域设置}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 0', 9);
     {区域设置 属性-数字}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 1', 9);
     {区域设置 属性-货币}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 2', 9);
     {区域设置 属性-时间}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 3', 9);
     {区域设置 属性-日期}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 4', 9);
     {游戏控制器-一般}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Joy.cpl, 0', 9);
     {游戏控制器-高级}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Joy.cpl, 1', 9);
     {鼠标 属性}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Main.cpl', 9);
     {多媒体 属性-音频}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 0', 9);
     {多媒体 属性-视频}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 1', 9);
     {多媒体 属性-MIDI}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 2', 9);
     {多媒体 属性-CD音乐}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 3', 9);
     {多媒体 属性-设备}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 4', 9);
     {调制解调器 属性}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Modem.cpl', 9);
     {网络}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Netcpl.cpl', 9);
     {密码 属性}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Password.cpl', 9);
     {扫描仪与数字相机 属性}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Sticpl.cpl', 9);
     {系统 属性-常规}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 0', 9);
     {系统 属性-设备管理器}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 1', 9);
     {系统 属性-硬件配置文件}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 2', 9);
     {系统 属性-性能}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 3', 9);
     {日期/时间 属性}
     winexec('rundll32.exe shell32.dll, Control_RunDLL timedate.cpl', 9);
     {电源管理 属性}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Powercfg.cpl', 9);
     {拨号属性}
     winexec('rundll32.exe shell32.dll, Control_RunDLL Telephon.cpl', 9);  关于调用后的判断处理建议:  先声明一个cardinal类型的变量RtnCardinal获取返回值进行判断如:
      
      RtnCardinal := winexec('rundll32.exe shell32.dll, Control_RunDLL Telephon.cpl', 9); 返回值                              可能原因 0                                   程序超出内存   ERROR_BAD_FORMAT                    程序为一个非法的Win32.EXE程序 ERROR_FILE_NOT_FOUND                指定文件没找到
     
      ERROR_PATH_NOT_FOUND                指定路径没找到
      

  6.   

    我运行命令的时候提示SHELL32出错
    丢失条目
    请帮找原因解决