怎么用VB编辑一个强制关机程序

怎么用VB编辑一个强制关机程序,第1张

这个我不会。

电脑定时关机,我使用的是定时关机3000.

定时关机3000有11种执行条件和可以执行电脑定时关机在内的14种任务。

11 种执行条件是:等待多少时间、开机多长时间、全天电脑累计开机多长时间、上传网速连续多长时间低于多少、下载网速连续多长时间低于多少、电脑空闲多长时间、指定的具体时间、每天的几点几分、每周的周几的几点几分、每月那天的几点几分、每年的哪天的几点几分。

14种执行的任务是电脑关机、电脑重启、电脑注销当前用户、系统锁定、电脑睡眠、提醒、关闭显示器、电脑待机、运行软件、打开文件、打开网址、关闭软件、系统垃圾清理和断开网络。并且可以设置任务开机自动启动和同时执行多项任务。

te Sub Command1_Click()

Shell "shutdown -s -t 30"

'30秒后关机

End Sub

另外一种就是调用API函数,给你一篇文章,或许对你有用:

应用程序中实现关机功能

(作者:范明之 2000年07月17日 10:52)

VB 6.0开发应用程序时,用户要求在程序内部加入直接关机功能, 使 *** 作全部集中于应用程序的内部进行。为此,笔者编制程序,进行Windows API函数调用,成功地实现了Windows 9x“关闭系统”仿真功能,满足了用户要求,现将设计过程列举如下:

一、设计关机系统界面

新建工程文件及窗体Form1,Form1中加入选项控件Option1、 Option2 、 Option3,将它们Caption 属性依次设为“关闭计算机(S)”、“重新启动计算机(R)”、“关闭所有程序并以其他用户身份登录”;再加入命令按钮Command1和Command2、Command3且Caption属性分别设为“是”、“否”、“帮助”。即设计一个Windows 98“关闭系统”的仿真界面。

二、通用事件代码中对API 函数ExitWindowsEx( )进行声明

VB 6.0应用程序设计时,调用丰富Windows API 函数能完成VB本身没有提供或无法实现的功能,这些函数都属于“ *** 作系统”级别,能使应用程序增添不少色彩。其中ExitWindowsEx( )函数具备关闭Windows系统的功能,调用前必须进行声明:

Declare Function ExitWindowsEx Lib 〃user32〃( ByVal uFlags As Long,ByVal dwReserved As Long) As Long

参数说明:此函数有两个参数vFlags、dwReserved,其中vFlags参数决定用户需要做的关机 *** 作,dwReserved参数是作为保留而没有使用。

vFlags 参数可以取以下几种常量(或相应值):

EWX_ShutDown 1 关闭计算机

EWX_ReBoot 2 重新启动计算机

EWX_LogOff 0 关闭所有程序并以其他用户身份登录

三、关机功能所有程序代码清单如下:

′通用代码中对ExitWinwodsEx( )函数声明

Private Declare Function ExitWindowsEx Lib 〃user32〃 (ByVal uFlags As Long,ByVal dwReserved As Long) As Long

Const ShutDown = 1

Const ReBoot = 2

Const LogOff = 0

Private Sub Command1_Click()

Dim Sh As Long

If Option1.Value = True Then

′关闭计算机选项

Sh = ExitWindowsEx(ShutDown, dwReserved)

End If

If Option2.Value = True Then

′重新启动计算机选项

Sh = ExitWindowsEx(ReBoot, dwReserved)

End If

If Option3.Value = True Then

′关闭所有程序并以其他用户

身份登录选项

Sh = ExitWindowsEx(LogOff, dwReserved)

End If

End Sub

Private Sub Command2_Click()

Unload Me

End Sub

F5运行程序,即进行关机 *** 作!该功能加入用户开发的应用程序,相当实用。

Enum HowExitConst

EWX_FORCE = 4 ' 强制关机

EWX_LOGOFF = 0 ' 登出

EWX_REBOOT = 2 ' 重开机

EWX_SHUTDOWN = 1 ' 关机

End Enum

Const TOKEN_ADJUST_PRIVILEGES = &H20

Const TOKEN_QUERY = &H8

Const SE_PRIVILEGE_ENABLED = &H2

Const ANYSIZE_ARRAY = 1

Private Type LUID

lowpart As Long

highpart As Long

End Type

Private Type LUID_AND_ATTRIBUTES

pLuid As LUID

Attributes As Long

End Type

Private Type TOKEN_PRIVILEGES

PrivilegeCount As Long

Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES

End Type

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function LookupPrivilegeValue Lib"advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long

Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (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 OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long

'NT比较着重安全性(Security),而为了让NT关机或重新开机,则必须在呼叫ExitWindowsEx之前,呼叫AdjustToken副程式。

'在Windows95/98底下呼叫了AdjustToken也没关系,因为Windows95/98并不会理会安全性的设定,只有win2000以上才有用。

Private Sub AdjustToken()

Dim hdlProcessHandle As Long

Dim hdlTokenHandle As Long

Dim tmpLuid As LUID

Dim tkp As TOKEN_PRIVILEGES

Dim tkpNewButIgnored As TOKEN_PRIVILEGES

Dim lBufferNeeded As Long

hdlProcessHandle = GetCurrentProcess()

OpenProcessToken hdlProcessHandle,(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle

'Get the LUID for shutdown privilege.

LookupPrivilegeValue "","SeShutdownPrivilege", tmpLuid

tkp.PrivilegeCount = 1 ' One privilege to set

tkp.Privileges(0).pLuid = tmpLuid

tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED

'Enable the shutdown privilege in the access token of this process.

AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded

End Sub

'用法:

AdjustToken

Call ExitWindowsEx(EWX_REBOOT, 0) 'EWX_REBOOT可换为EWX_LOGOFF、EWX_REBOOT、EWX_SHUTDOWN、或EWX_FORCE


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8090646.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存