CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

关机、重启、注销源代码?

楼主lifengguo(黎锋果)2005-06-11 09:10:27 在 .NET技术 / VB.NET 提问

本人是Visual   Basic.Net的初学者  
  在Visual   Basic.Net中如何实现关机、重启、注销?  
  请各位老大给我讲解一下!最好是有源代码!  
  问题点数:20、回复次数:9Top

1 楼rzpc(淡蓝色)回复于 2005-06-11 09:44:29 得分 20

使用Shutdown命令  
  system.Diagnostics.Process.Start("shutdown.exe")  
   
  关于ShutDown的参数描述如下:  
  ===============================================================  
  shutdown   [/i   |   /l   |   /s   |   /r   |   /a   |   /p   |   /h   |   /e]   [/f]  
          [/m   \\computer][/t   xxx][/d   [p:]xx:yy   [/c   "comment"]]  
   
          /i                   显示图形用户界面(GUI)。  
                                这必须是第一个选项  
          /l                   注销。这不能与   /m   或   /d   选项一起使用  
          /s                   关闭计算机  
          /r                   关闭并重启动计算机  
          /a                   放弃系统关闭。  
                                这只能在超时过程中使用  
          /p                   关闭本地计算机,没有超时或警告。  
                                这只能与   /d   选项一起使用  
          /h                   休眠本地计算机。  
                                这只能与   /f   选项一起使用  
          /e                   将计算机的意外关闭原因记入文档  
          /m   \\computer   指定目标计算机  
          /t   xxx           设置关闭前的超时为   xxx   秒。  
                                有效范围是   0-600,默认为   30  
          /c   "comment"   重启动或关闭的原因的注释。  
                                最大允许   127   个字符  
          /f                   强制正在运行的应用程序关闭而不事先警告用户  
          /d   [p:]xx:yy     提供重启动或关闭的原因  
                                p   表明重启动或关闭是计划内的  
                                xx   是主要原因号(小于   256   的正整数)  
                                yy   是次要原因号(小于   65536   的正整数)  
  原因:  
  (E   =   预期   U   =   意外   P   =   计划,   C   =   自定义)  
  ========================================================  
   
  例:关机  
  system.Diagnostics.Process.Start("shutdown.exe","s")  
  重新启动  
  system.Diagnostics.Process.Start("shutdown.exe","r")  
  注销  
  system.Diagnostics.Process.Start("shutdown.exe","l")  
   
  最后在此操作之后   马上退出当前应用程序:  
  system.Diagnostics.Process.Start("shutdown.exe","s")  
  Application.Exit()Top

2 楼ferrari1231()回复于 2005-06-11 10:58:07 得分 0

学习中Top

3 楼lzmtw(水如烟)回复于 2005-06-11 11:56:41 得分 0

可以做为FAQ.Top

4 楼dengxw(威威)回复于 2005-06-11 12:33:19 得分 0

怎么我在2000里找不到SHUTDOWN文件呢?~````Top

5 楼leongwong()回复于 2005-06-11 12:41:05 得分 0

学习Top

6 楼my36z(晕死~真难改)回复于 2005-06-11 12:46:45 得分 0

只有XP及以上才有,这个代码的确很方便,不过好像还有其他方法。去多载点vb实例代码之类的,里面一定有Top

7 楼studydotnet(Dreamfly)回复于 2005-06-11 12:57:46 得分 0

多问一个,那又如何定时关机呢?在上面加个时间吧Top

8 楼tihua(告诉我吧)回复于 2005-06-11 13:09:00 得分 0

学习Top

9 楼singlepine(小山)回复于 2005-09-07 22:46:57 得分 0

Imports   System  
  Imports   System.Text  
  Imports   System.Diagnostics  
  Imports   System.Runtime.InteropServices  
   
          Public   Class   WindowsController  
                  Public   Enum   RestartOptions  
                          LogOff   =   0  
                          PowerOff   =   8  
                          Reboot   =   2  
                          ShutDown   =   1  
                          Suspend   =   -1  
                          Hibernate   =   -2  
                  End   Enum  
   
                  Public   Structure   LUID  
                          Dim   LowPart   As   Integer  
                          Dim   HighPart   As   Integer  
                  End   Structure  
   
                  Public   Structure   LUID_AND_ATTRIBUTES  
   
                          Dim   pLuid   As   LUID  
   
                          Dim   Attributes   As   Integer  
                  End   Structure  
   
   
                  Public   Structure   TOKEN_PRIVILEGES  
   
                          Dim   PrivilegeCount   As   Integer  
   
                          Dim   Privileges   As   LUID_AND_ATTRIBUTES  
                  End   Structure  
   
                  Private   Const   TOKEN_ADJUST_PRIVILEGES   =   &H20  
                  Private   Const   TOKEN_QUERY   =   &H8  
                  Private   Const   SE_PRIVILEGE_ENABLED   =   &H2  
                  Private   Const   FORMAT_MESSAGE_FROM_SYSTEM   =   &H1000  
                  Private   Const   EWX_FORCE   =   4  
                  Declare   Function   LoadLibrary   Lib   "kernel32"   Alias   "LoadLibraryA"   (ByVal   lpLibFileName   As   String)   As   IntPtr  
                  Declare   Function   FreeLibrary   Lib   "kernel32"   (ByVal   hLibModule   As   IntPtr)   As   Integer  
                  Declare   Function   GetProcAddress   Lib   "kernel32"   (ByVal   hModule   As   IntPtr,   ByVal   lpProcName   As   String)   As   IntPtr  
                  Declare   Function   SetSuspendState   Lib   "Powrprof"   (ByVal   Hibernate   As   Integer,   ByVal   ForceCritical   As   Integer,   ByVal   DisableWakeEvent   As   Integer)   As   Integer  
                  Declare   Function   OpenProcessToken   Lib   "advapi32.dll"   (ByVal   ProcessHandle   As   IntPtr,   ByVal   DesiredAccess   As   Integer,   ByRef   TokenHandle   As   IntPtr)   As   Integer  
                  Declare   Function   LookupPrivilegeValue   Lib   "advapi32.dll"   Alias   "LookupPrivilegeValueA"   (ByVal   lpSystemName   As   String,   ByVal   lpName   As   String,   ByRef   lpLuid   As   LUID)   As   Integer  
                  Declare   Function   AdjustTokenPrivileges   Lib   "advapi32.dll"   (ByVal   TokenHandle   As   IntPtr,   ByVal   DisableAllPrivileges   As   Integer,   ByRef   NewState   As   TOKEN_PRIVILEGES,   ByVal   BufferLength   As   Integer,   ByRef   PreviousState   As   TOKEN_PRIVILEGES,   ByRef   ReturnLength   As   Integer)   As   Integer  
                  Declare   Function   ExitWindowsEx   Lib   "user32"   (ByVal   uFlags   As   Integer,   ByVal   dwReserved   As   Integer)   As   Integer  
                  Declare   Function   FormatMessage   Lib   "kernel32"   Alias   "FormatMessageA"   (ByVal   dwFlags   As   Integer,   ByVal   lpSource   As   IntPtr,   ByVal   dwMessageId   As   Integer,   ByVal   dwLanguageId   As   Integer,   ByVal   lpBuffer   As   StringBuilder,   ByVal   nSize   As   Integer,   ByVal   Arguments   As   Integer)   As   Integer  
   
                  Public   Sub   ExitWindows(ByVal   how   As   RestartOptions,   ByVal   force   As   Boolean)  
                          Select   Case   how  
                                  Case   RestartOptions.Suspend  
                                          SuspendSystem(False,   force)  
                                  Case   RestartOptions.Hibernate  
                                          SuspendSystem(True,   force)  
                                  Case   Else  
                                          ExitWindows(Convert.ToInt32(how),   force)  
                          End   Select  
                  End   Sub  
   
                  Protected   Sub   ExitWindows(ByVal   how   As   Integer,   ByVal   force   As   Boolean)  
                          EnableToken("SeShutdownPrivilege")  
                          If   force   Then   how   =   how   Or   EWX_FORCE  
                          If   (ExitWindowsEx(how,   0)   =   0)   Then   Throw   New   PrivilegeException(FormatError(Marshal.GetLastWin32Error()))  
                  End   Sub  
   
                  Protected   Sub   EnableToken(ByVal   privilege   As   String)  
                          If   Not   CheckEntryPoint("advapi32.dll",   "AdjustTokenPrivileges")   Then   Return  
                          Dim   tokenHandle   As   IntPtr   =   IntPtr.Zero  
                          Dim   privilegeLUID   =   New   LUID()  
                          Dim   newPrivileges   =   New   TOKEN_PRIVILEGES()  
                          Dim   tokenPrivileges   As   TOKEN_PRIVILEGES  
                          If   (OpenProcessToken(Process.GetCurrentProcess().Handle,   TOKEN_ADJUST_PRIVILEGES   Or   TOKEN_QUERY,   tokenHandle))   =   0   Then   Throw   New   PrivilegeException(FormatError(Marshal.GetLastWin32Error()))  
                          If   (LookupPrivilegeValue("",   privilege,   privilegeLUID))   =   0   Then   Throw   New   PrivilegeException(FormatError(Marshal.GetLastWin32Error()))  
                          tokenPrivileges.PrivilegeCount   =   1  
                          tokenPrivileges.Privileges.Attributes   =   SE_PRIVILEGE_ENABLED  
                          tokenPrivileges.Privileges.pLuid   =   privilegeLUID  
                          Dim   Size   As   Integer   =   4  
                          If   (AdjustTokenPrivileges(tokenHandle,   0,   tokenPrivileges,   4   +   (12   *   tokenPrivileges.PrivilegeCount),   newPrivileges,   Size))   =   0   Then   Throw   New   PrivilegeException(FormatError(Marshal.GetLastWin32Error()))  
                  End   Sub  
   
                  Protected   Sub   SuspendSystem(ByVal   hibernate   As   Boolean,   ByVal   force   As   Boolean)  
                          If   Not   CheckEntryPoint("powrprof.dll",   "SetSuspendState")   Then   Throw   New   PlatformNotSupportedException("The   SetSuspendState   method   is   not   supported   on   this   system!")  
                          SetSuspendState(Convert.ToInt32(IIf(hibernate,   1,   0)),   Convert.ToInt32(IIf(force,   1,   0)),   0)  
                  End   Sub  
   
                  Protected   Function   CheckEntryPoint(ByVal   library   As   String,   ByVal   method   As   String)   As   Boolean  
                          Dim   libPtr   As   IntPtr   =   LoadLibrary(library)  
                          If   Not   libPtr.Equals(IntPtr.Zero)   Then  
                                  If   Not   GetProcAddress(libPtr,   method).Equals(IntPtr.Zero)   Then  
                                          FreeLibrary(libPtr)  
                                          Return   True  
                                  End   If  
                                  FreeLibrary(libPtr)  
                          End   If  
                          Return   False  
                  End   Function  
   
                  Protected   Function   FormatError(ByVal   number   As   Integer)   As   String  
                          Dim   Buffer   =   New   StringBuilder(255)  
                          FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,   IntPtr.Zero,   number,   0,   Buffer,   Buffer.Capacity,   0)  
                          Return   Buffer.ToString()  
                  End   Function  
          End   Class  
   
          Public   Class   PrivilegeException  
                  Inherits   Exception  
   
                  Public   Sub   New()  
                          MyBase.New()  
                  End   Sub  
   
                  Public   Sub   New(ByVal   message   As   String)  
                          MyBase.New(message)  
                  End   Sub  
          End   Class  
   
  例如实现注销功能:  
                  Dim   shutdown   As   New   WindowsController()  
                  shutdown.ExitWindows(shutdown.RestartOptions.LogOff,   False)  
  Top

相关问题

  • WindowsNT下关机的源代码
  • C#关机重启注销等问题只有注销可以
  • win2k无法关机重启和注销,求救!!!
  • $$$$$$$如何获取电脑的关机,注销,或是重启$$$$$$$$$$$$
  • 怎么远程控制关机、注销和重启
  • win2000无法关机、重启、注销怎么办。
  • 用VB.NET如何实现Windows"关机/休眠/重启/注销"
  • 如何截获系统关机、重启、注销的事件?
  • VB中用ExitWindowsEx关机,但是只能实现注销却不能重启或关机? 帮帮忙
  • 紧急求救:如何判断用户是关机、重启或者注销?

关键词

  • .net
  • win32
  • 选项
  • 计算机
  • 注销
  • start
  • 关机
  • shutdown
  • 关闭
  • 超时

得分解答快速导航

  • 帖主:lifengguo
  • rzpc

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo