求vb代码,获取本机关机时间!

只要前3次的关机时间就行了,基本结构是这样,单击该exe,弹出msgbox,显示前三次关机时间,希望本程序同时兼容xp和win7,谢谢了!回复yangyingjun999... 只要前3次的关机时间就行了,基本结构是这样,单击该exe,弹出msgbox,显示前三次关机时间,希望本程序同时兼容xp和win7,谢谢了!
回复 yangyingjun999:不会哎,才学没多久~~(╯﹏╰)b
回复 yangyingjun999:谢谢啊,可是为什么我这里显示没有记录……
展开
 我来答
yangyingjun999
推荐于2021-01-14 · TA获得超过1231个赞
知道小有建树答主
回答量:782
采纳率:0%
帮助的人:486万
展开全部

你可以这样:这个代码分为三个功能,一是让程序随系统自启动、二是在关机时(即退出本程序时)记录关机时间、三是本程序启动时显示前三次的关机时间。

一:让程序随系统自启动应该就不用说了吧,简单

二:关机记录时间可以在本程序的unload模块中写下记录过程,即 时间变量=time 即可,当然还要同时保存到某个文件或注册表的三个固定容器中,保存时注意三个位置的替换即可(删除第一个时间、将第二个移到第一个、第三个移到第二个、将本次记录的时间写到第三个位置)。

三:启动程序显示前三次关机时间也非常简单,显示时就将三个显示控件的caption等于上面第二条的这三个时间即可。

明白了吗,你这个代码实现起来确是非常简单的,一点都不难哦。 

代码如下,自己注意安排控件哦【在默认form1窗体上加载Label1(0)、Label1(1)、Label1(2)、text1(0)、text1(1)、text1(2)、text2 、timer1 】

Dim a As String, b As String, c As String

Private Const REG_SZ As Long = 1

Private Const REG_DWORD As Long = 4

Private Const HKEY_CLASSES_ROOT = &H80000000

Private Const HKEY_CURRENT_USER = &H80000001

Private Const HKEY_LOCAL_MACHINE = &H80000002

Private Const HKEY_USERS = &H80000003

Private Const ERROR_NONE = 0

Private Const ERROR_BADDB = 1

Private Const ERROR_BADKEY = 2

Private Const ERROR_CANTOPEN = 3

Private Const ERROR_CANTREAD = 4

Private Const ERROR_CANTWRITE = 5

Private Const ERROR_OUTOFMEMORY = 6

Private Const ERROR_INVALID_PARAMETER = 7

Private Const ERROR_ACCESS_DENIED = 8

Private Const ERROR_INVALID_PARAMETERS = 87

Private Const ERROR_NO_MORE_ITEMS = 259

Private Const KEY_ALL_ACCESS = &H3F

Private Const REG_OPTION_NON_VOLATILE = 0

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long

Private Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long

Private Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long

Private Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long

Private Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long 

Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long 

Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)

Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)

Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long

  Dim lValue As Long

  Dim sValue As String

  Select Case lType

  Case REG_SZ

    sValue = vValue

    SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue) * 2)

  Case REG_DWORD

    lValue = vValue

    SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)

  End Select

End Function

Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long

  Dim cch As Long

  Dim lrc As Long

  Dim lType As Long

  Dim lValue As Long

  Dim sValue As String

  On Error GoTo QueryValueExError

  lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)

  If lrc <> ERROR_NONE Then Error 5

  Select Case lType

    Case REG_SZ:

      sValue = String(cch, 0)

      lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)

      If lrc = ERROR_NONE Then

      vValue = Left(sValue, cch - 1)

      Else

      vValue = Empty

      End If

    Case REG_DWORD:

      lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)

      If lrc = ERROR_NONE Then vValue = lValue

    Case Else

      lrc = -1

  End Select

QueryValueExExit:

  QueryValueEx = lrc

  Exit Function

QueryValueExError:

  Resume QueryValueExExit

End Function

Private Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)

  Dim hNewKey As Long

  Dim lRetVal As Long

  lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)

  RegCloseKey (hNewKey)

End Function

Private Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)

  Dim lRetVal As Long

  Dim hKey As Long

  lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)

  lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)

  RegCloseKey (hKey)

End Function

Private Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)

  Dim lRetVal As Long

  Dim hKey As Long

  Dim vValue As Variant

  lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)

  lRetVal = QueryValueEx(hKey, sValueName, vValue)

  QueryValue = vValue

  RegCloseKey (hKey)

End Function

Private Sub Form_Load()

  SetKeyValue HKEY_LOCAL_MACHINE, "software\microsoft\windows\currentversion\run", "jilu", App.Path & App.EXEName & ".exe", REG_SZ

  Text2.Visible = False

  If QueryValue(HKEY_CURRENT_USER, "Software\jilu", "on") = "" Then

    CreateNewKey HKEY_CURRENT_USER, "Software\jilu"

    SetKeyValue HKEY_CURRENT_USER, "Software\jilu", "on", "1", REG_SZ

    SetKeyValue HKEY_CURRENT_USER, "Software\jilu", "off", "0", REG_SZ

    Text2.Visible = True

  End If

  If App.PrevInstance = True Then

    SetKeyValue HKEY_CURRENT_USER, "Software\jilu", "off", "0", REG_SZ

    End

  End If

  If QueryValue(HKEY_CURRENT_USER, "Software\jilu", "1") <> "" Then a = QueryValue(HKEY_CURRENT_USER, "Software\jilu", "1") Else a = "没有记录"

  If QueryValue(HKEY_CURRENT_USER, "Software\jilu", "2") <> "" Then b = QueryValue(HKEY_CURRENT_USER, "Software\jilu", "2") Else b = "没有记录"

  If QueryValue(HKEY_CURRENT_USER, "Software\jilu", "3") <> "" Then c = QueryValue(HKEY_CURRENT_USER, "Software\jilu", "3") Else c = "没有记录"

  Text1(0).Text = a: Text1(1).Text = b: Text1(2).Text = c

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

  Cancel = 1: Me.Hide

  SetKeyValue HKEY_CURRENT_USER, "Software\jilu", "off", "1", REG_SZ

End Sub

Private Sub Form_Unload(Cancel As Integer)

  Dim d As String, x As String, y As String

  d = CStr(Now())

  If QueryValue(HKEY_CURRENT_USER, "Software\jilu", "2") <> "" Then x = QueryValue(HKEY_CURRENT_USER, "Software\jilu", "2") Else x = "没有记录"

  If QueryValue(HKEY_CURRENT_USER, "Software\jilu", "3") <> "" Then y = QueryValue(HKEY_CURRENT_USER, "Software\jilu", "3") Else y = "没有记录"

  SetKeyValue HKEY_CURRENT_USER, "Software\jilu", "1", x, REG_SZ

  SetKeyValue HKEY_CURRENT_USER, "Software\jilu", "2", y, REG_SZ

  SetKeyValue HKEY_CURRENT_USER, "Software\jilu", "3", d, REG_SZ

End Sub

Private Sub Timer1_Timer()

  If QueryValue(HKEY_CURRENT_USER, "Software\jilu", "off") = "0" Then Me.Show

End Sub

nefu_20061617
2011-02-01 · TA获得超过2344个赞
知道大有可为答主
回答量:1064
采纳率:72%
帮助的人:1611万
展开全部
'百度搜索“事件查看器 关机时间”
For Each e In GetObject("winmgmts:\\.\root\cimv2").ExecQuery("select * from Win32_NTLogEvent where EventCode=6006")
t = e.TimeGenerated
s = s & Left(t, 4) & "-" & Mid(t, 5, 2) & "-" & Mid(t, 7, 2) & " " _
& Mid(t, 9, 2) & ":" & Mid(t, 11, 2) & ":" & Mid(t, 13, 2) & vbCrLf
n = n + 1
If n = 3 Then Exit For
Next
MsgBox "前三次的关机时间是" & vbCrLf & s
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式