永发信息网

VB将程序加入启动项

答案:2  悬赏:10  手机版
解决时间 2021-04-25 22:42
  • 提问者网友:兔牙战士
  • 2021-04-25 12:27
做个自动关机的,就是点击就自动关机,点击第一次时同时把程序加入启动项中,怎么写,谢谢
最佳答案
  • 五星知识达人网友:山君与见山
  • 2021-04-25 14:06
Option Explicit

Public Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type


Public Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type


'Beginning of Code


Public Const EWX_SHUTDOWN As Long = 1
Public Const EWX_FORCE As Long = 4
'重起
Public Const EWX_REBOOT = 2
'关机
Public Const EWX_POWEROFF = 8



Public Declare Function ExitWindowsEx Lib "user32" ( _
ByVal dwOptions As Long, ByVal dwReserved As Long) As Long


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


Public Declare Function OpenProcessToken Lib "advapi32" ( _
ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _
TokenHandle As Long) As Long


Public Declare Function LookupPrivilegeValue Lib "advapi32" _
Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, _
ByVal lpName As String, lpLuid As LUID) As Long


Public 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



Public Sub AdjustToken()


Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2


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.TheLuid = tmpLuid
tkp.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

在窗体中加入一个DTPicker控件和一个Timer控件
设置CheckBox属性为True,格式定为:HH:mm
设置Time的Enable属性为True,Interval属性5000。(可自己更改)
Change事件加入代码
If IsNull(DTP.Value) Then
'MsgBox "null"
SaveSetting "RealTimeReadCard", "Set", "AutosdTime", "0"
Timer2.Enabled = False
Else
'MsgBox DTP.Value
SaveSetting "RealTimeReadCard", "Set", "AutosdTime", DTP.Value
Timer2.Enabled = True
Sd_temp = DTP.Value
End If
Form的Load事件加入
Sd_temp = GetSetting("RealTimeReadCard", "Set", "AutosdTime", "")
If Sd_temp = "0" Or Sd_temp = "" Then
DTP.Value = Null
Else
DTP.Value = Sd_temp
End If
Timer事件加入
If Sd_temp <> "" Then
If Left(Sd_temp, Len(Sd_temp) - 3) = Left(Time, Len(Time) - 3) Then
AdjustToken
'ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_REBOOT), &HFFFF
ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_POWEROFF), &HFFFF
End If
End If

全部回答
  • 1楼网友:渊鱼
  • 2021-04-25 14:50

关机用SHUTDOWN

加入启动项最好用写入注册表的方法

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯