阿杰 发表于 2007-4-12 08:08:23

简单的VB定时关机小程序

<p>简单的VB定时 关机 记时开始的时候可以发出声音</p><p>新建一个窗体FROM1 和一个 按钮 Command1</p><p>添加 一个 Timer1 控件 和 Label1</p><p>Dim ss, mm, hh As Integer</p><p>&nbsp;</p><p>Private qdtime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '变量保存计时起点<br/>Private imglft As Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '退出图标左坐标初值<br/>'下面为关机的 WIMDOWS API 函数声明<br/>Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long<br/>&nbsp;Enum HowExitConst<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EWX_FORCE = 4&nbsp;&nbsp;&nbsp;&nbsp; '强制关机<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EWX_LOGOFF = 0&nbsp;&nbsp;&nbsp; '注销<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EWX_REBOOT = 2&nbsp;&nbsp;&nbsp; '重开机<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EWX_SHUTDOWN = 1&nbsp; '可关机98 但在2000下关机最后出现“ 现在可以安全关机”的问题<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EWX_POWEROFF = 8&nbsp; '可以关闭Windows NT/2000/XP:计算机的:</p><p>&nbsp;End Enum<br/>&nbsp;Const TOKEN_ADJUST_PRIVILEGES = &amp;H20<br/>&nbsp;Const TOKEN_QUERY = &amp;H8<br/>&nbsp;Const SE_PRIVILEGE_ENABLED = &amp;H2<br/>&nbsp;Const ANYSIZE_ARRAY = 1<br/>&nbsp;Private Type LUID<br/>&nbsp;&nbsp;&nbsp;&nbsp; lowpart As Long<br/>&nbsp;&nbsp;&nbsp;&nbsp; highpart As Long<br/>&nbsp;End Type</p><p>Private Type LUID_AND_ATTRIBUTES<br/>&nbsp;&nbsp;&nbsp;&nbsp; pLuid As LUID<br/>&nbsp;&nbsp;&nbsp;&nbsp; Attributes As Long<br/>End Type</p><p>Private Type TOKEN_PRIVILEGES<br/>&nbsp;&nbsp;&nbsp;&nbsp; PrivilegeCount As Long<br/>&nbsp;&nbsp;&nbsp;&nbsp; Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES<br/>End Type</p><p>Private Declare Function GetCurrentProcess Lib "kernel32" () As Long</p><p>Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "LookupPrivilegeValueA" (ByVal lpSystemName As String, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByVal lpName As String, lpLuid As LUID) As Long<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>Private Declare Function OpenProcessToken Lib "advapi32.dll" _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TokenHandle As Long) As Long<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>Private Sub AdjustToken()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '关闭2000/XP前要先得到关机的特权<br/>Dim hdlProcessHandle As Long<br/>Dim hdlTokenHandle As Long<br/>Dim tmpLuid As LUID<br/>Dim tkp As TOKEN_PRIVILEGES<br/>Dim tkpNewButIgnored As TOKEN_PRIVILEGES<br/>Dim lBufferNeeded As Long<br/>hdlProcessHandle = GetCurrentProcess()<br/>OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdlTokenHandle<br/>'Get the LUID for shutdown privilege.<br/>LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid<br/>tkp.PrivilegeCount = 1 ' One privilege to set<br/>tkp.Privileges(0).pLuid = tmpLuid<br/>tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED<br/>'Enable the shutdown privilege in the access token of this process.<br/>AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tkpNewButIgnored, lBufferNeeded<br/>End Sub</p><p><br/>Private Function hmstostring(ByVal h As Integer, ByVal m As Integer, ByVal s As Integer) As String<br/>&nbsp; Dim hhs, mms, sss As String<br/>&nbsp; If h &lt; 10 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp; hhs = "0" + Trim(Str(h))<br/>&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp; hhs = Trim(Str(h))<br/>&nbsp; End If<br/>&nbsp; If m &lt; 10 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp; mms = "0" + Trim(Str(m))<br/>&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp; mms = Trim(Str(m))<br/>&nbsp; End If<br/>&nbsp; If s &lt; 10 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp; sss = "0" + Trim(Str(s))<br/>&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp; sss = Trim(Str(s))<br/>&nbsp; End If<br/>&nbsp; hmstostring = hhs + ":" + mms + ":" + sss<br/>End Function<br/>Private Sub Command1_Click()<br/>Timer1.Enabled = False<br/>End Sub<br/>Private Sub Form_Load()<br/>valuetime = 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设置关机时间 /分钟<br/>Timer1.Enabled = True<br/>hh = Int(valuetime / 60)&nbsp;&nbsp; ' 转换时间格式<br/>&nbsp; mm = valuetime - hh * 60<br/>&nbsp; ss = 0<br/>&nbsp; Label1.Caption = hmstostring(hh, mm, ss)<br/>End Sub</p><p><br/>Private Sub Timer1_Timer()<br/>&nbsp; If ss &lt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp; If mm &lt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If hh &lt; 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Timer1.Interval = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AdjustToken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '关闭2000/XP前要先得到关机的特权<br/>&nbsp;&nbsp; Call ExitWindowsEx(EWX_POWEROFF, 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '关机<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hh = hh - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mm = 59<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ss = 60<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mm = mm - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ss = 60<br/>&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp; ss = ss - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp; Beep&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '发出声音<br/>&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; Label1.Caption = hmstostring(hh, mm, ss)<br/>&nbsp;End Sub</p>

hd37 发表于 2007-4-14 01:24:57

马大哈 发表于 2007-4-14 07:42:18

记得以前Asuka MM也写过一个,我找找...........

马大哈 发表于 2007-4-14 07:51:02

哎,上班了,中午吃饭时再来找找....
页: [1]
查看完整版本: 简单的VB定时关机小程序