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

在 pb 内怎样控制windows 退出、关机?

楼主wsv()2002-12-30 09:17:00 在 PowerBuilder / API 调用 提问

在   pb   内怎样控制windows   退出、关机?    
  问题点数:100、回复次数:8Top

1 楼xiaozg118(肖)回复于 2002-12-30 09:21:46 得分 10

通过ExitWindowsEx函数可实现这三个功能,首先作如下声明:    
         Function   Long   ExitWindowsEx(Long   uflag,Long   nouse)   Library   ″user32.dll″    
         参数2保留不用,可取0;参数1取0可以注销当前用户,取1可以关闭计算机,取2可以重启计算机,其值再加4表示强制结束“未响应"的进程。  
   
  但不能在2000或NT下用Top

2 楼xiaozg118(肖)回复于 2002-12-30 09:36:17 得分 20

如果是2000的关机看这个例子  
  http://www.liulee.net/shares/share_open.php?id=1025346071Top

3 楼balloonman2002()回复于 2002-12-30 10:00:43 得分 0

同意,,,:),,,Top

4 楼balloonman2002()回复于 2002-12-30 10:07:46 得分 70

1、WIN9X系列:  
  'In   general   section  
  Const   EWX_LOGOFF   =   0  
  Const   EWX_SHUTDOWN   =   1  
  Const   EWX_REBOOT   =   2  
  Const   EWX_FORCE   =   4  
  Private   Declare   Function   ExitWindowsEx   Lib   "user32"   (ByVal   uFlags   As   Long,   ByVal   dwReserved   As   Long)   As   Long  
  Private   Sub   Form_Load()  
          msg   =   MsgBox("This   program   is   going   to   reboot   your   computer.   Press   OK   to   continue   or   Cancel   to   stop.",   vbCritical   +   vbOKCancel   +   256,   App.Title)  
          If   msg   =   vbCancel   Then   End  
          'reboot   the   computer  
          ret&   =   ExitWindowsEx(EWX_FORCE   Or   EWX_REBOOT,   0)  
  End   Sub  
   
   
  2、WINNT系列:  
  'In   a   module  
  Private   Const   EWX_LOGOFF   =   0  
  Private   Const   EWX_SHUTDOWN   =   1  
  Private   Const   EWX_REBOOT   =   2  
  Private   Const   EWX_FORCE   =   4  
  Private   Const   TOKEN_ADJUST_PRIVILEGES   =   &H20  
  Private   Const   TOKEN_QUERY   =   &H8  
  Private   Const   SE_PRIVILEGE_ENABLED   =   &H2  
  Private   Const   ANYSIZE_ARRAY   =   1  
  Private   Const   VER_PLATFORM_WIN32_NT   =   2  
  Type   OSVERSIONINFO  
          dwOSVersionInfoSize   As   Long  
          dwMajorVersion   As   Long  
          dwMinorVersion   As   Long  
          dwBuildNumber   As   Long  
          dwPlatformId   As   Long  
          szCSDVersion   As   String   *   128  
  End   Type  
  Type   LUID  
          LowPart   As   Long  
          HighPart   As   Long  
  End   Type  
  Type   LUID_AND_ATTRIBUTES  
          pLuid   As   LUID  
          Attributes   As   Long  
  End   Type  
  Type   TOKEN_PRIVILEGES  
          PrivilegeCount   As   Long  
          Privileges(ANYSIZE_ARRAY)   As   LUID_AND_ATTRIBUTES  
  End   Type  
  Private   Declare   Function   GetCurrentProcess   Lib   "kernel32"   ()   As   Long  
  Private   Declare   Function   OpenProcessToken   Lib   "advapi32"   (ByVal   ProcessHandle   As   Long,   ByVal   DesiredAccess   As   Long,   TokenHandle   As   Long)   As   Long  
  Private   Declare   Function   LookupPrivilegeValue   Lib   "advapi32"   Alias   "LookupPrivilegeValueA"   (ByVal   lpSystemName   As   String,   ByVal   lpName   As   String,   lpLuid   As   LUID)   As   Long  
  Private   Declare   Function   AdjustTokenPrivileges   Lib   "advapi32"   (ByVal   TokenHandle   As   Long,   ByVal   DisableAllPrivileges   As   Long,   NewState   As   TOKEN_PRIVILEGES,   ByVal   BufferLength   As   Long,   PreviousState   As   TOKEN_PRIVILEGES,   ReturnLength   As   Long)   As   Long  
  Private   Declare   Function   ExitWindowsEx   Lib   "user32"   (ByVal   uFlags   As   Long,   ByVal   dwReserved   As   Long)   As   Long  
  Private   Declare   Function   GetVersionEx   Lib   "kernel32"   Alias   "GetVersionExA"   (ByRef   lpVersionInformation   As   OSVERSIONINFO)   As   Long  
  'Detect   if   the   program   is   running   under   Windows   NT  
  Public   Function   IsWinNT()   As   Boolean  
          Dim   myOS   As   OSVERSIONINFO  
          myOS.dwOSVersionInfoSize   =   Len(myOS)  
          GetVersionEx   myOS  
          IsWinNT   =   (myOS.dwPlatformId   =   VER_PLATFORM_WIN32_NT)  
  End   Function  
  'set   the   shut   down   privilege   for   the   current   application  
  Private   Sub   EnableShutDown()  
          Dim   hProc   As   Long  
          Dim   hToken   As   Long  
          Dim   mLUID   As   LUID  
          Dim   mPriv   As   TOKEN_PRIVILEGES  
          Dim   mNewPriv   As   TOKEN_PRIVILEGES  
          hProc   =   GetCurrentProcess()  
          OpenProcessToken   hProc,   TOKEN_ADJUST_PRIVILEGES   +   TOKEN_QUERY,   hToken  
          LookupPrivilegeValue   "",   "SeShutdownPrivilege",   mLUID  
          mPriv.PrivilegeCount   =   1  
          mPriv.Privileges(0).Attributes   =   SE_PRIVILEGE_ENABLED  
          mPriv.Privileges(0).pLuid   =   mLUID  
          '   enable   shutdown   privilege   for   the   current   application  
          AdjustTokenPrivileges   hToken,   False,   mPriv,   4   +   (12   *   mPriv.PrivilegeCount),   mNewPriv,   4   +   (12   *   mNewPriv.PrivilegeCount)  
  End   Sub  
  '   Shut   Down   NT  
  Public   Sub   ShutDownNT(Force   As   Boolean)  
          Dim   ret   As   Long  
          Dim   Flags   As   Long  
          Flags   =   EWX_SHUTDOWN  
          If   Force   Then   Flags   =   Flags   +   EWX_FORCE  
          If   IsWinNT   Then   EnableShutDown  
          ExitWindowsEx   Flags,   0  
  End   Sub  
  'Restart   NT  
  Public   Sub   RebootNT(Force   As   Boolean)  
          Dim   ret   As   Long  
          Dim   Flags   As   Long  
          Flags   =   EWX_REBOOT  
          If   Force   Then   Flags   =   Flags   +   EWX_FORCE  
          If   IsWinNT   Then   EnableShutDown  
          ExitWindowsEx   Flags,   0  
  End   Sub  
  'Log   off   the   current   user  
  Public   Sub   LogOffNT(Force   As   Boolean)  
          Dim   ret   As   Long  
          Dim   Flags   As   Long  
          Flags   =   EWX_LOGOFF  
          If   Force   Then   Flags   =   Flags   +   EWX_FORCE  
          ExitWindowsEx   Flags,   0  
  End   Sub  
  'In   a   form  
  'This   project   needs   a   form   with   three   command   buttons  
  Private   Sub   Command1_Click()  
          LogOffNT   True  
  End   Sub  
  Private   Sub   Command2_Click()  
          RebootNT   True  
  End   Sub  
  Private   Sub   Command3_Click()  
          ShutDownNT   True  
  End   Sub  
  Private   Sub   Form_Load()  
          Command1.Caption   =   "Log   Off   NT"  
          Command2.Caption   =   "Reboot   NT"  
          Command3.Caption   =   "Shutdown   NT"  
  End   Sub  
  Top

5 楼wsv()回复于 2002-12-31 12:40:53 得分 0

有没有直接一点的方法?Top

6 楼shahand(死磕)回复于 2002-12-31 12:50:34 得分 0

直接一点的        
   
   
  按powerTop

7 楼taomegry(taomegry)回复于 2002-12-31 12:52:42 得分 0

高.Top

8 楼sdav(ASP.net学习中)回复于 2003-01-02 11:10:25 得分 0

windowsexc()Top

相关问题

  • 关机前如果不退出程序,系统将无法关机。
  • Windows XP关机问题
  • 如何阻止windows关机?
  • windows意外自动关机
  • Windows XP自动关机
  • 兄弟退出pb,散分
  • 菜鸟的两个小问题:关于关机和阻止退出程序
  • 我想退出win2000,并关机,应该使用哪个API函数?
  • 托盘程序里,怎么让关机时自动退出程序??
  • 如何用vc++实现windows关机?

关键词

  • win32
  • ewx
  • 关机
  • exitwindowsex
  • reboot
  • force
  • const
  • long
  • private

得分解答快速导航

  • 帖主:wsv
  • xiaozg118
  • xiaozg118
  • balloonman2002

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

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