Как прочитать значение реестра в метку или msgbox - PullRequest
0 голосов
/ 26 июня 2019

Мне просто нужно прочитать значение DWord в реестре даты первоначальной установки Windows в метку или текстовое поле, чтобы я мог использовать его в другом месте. Я пытаюсь создать обратный отсчет с помощью установки.

Я много гуглил, смотрел видео на YouTube, скопировал и вставил кучу примеров кода, чтобы понять, может ли смысл понять, что от меня требуется для достижения этой цели и что будет работать

Это, наверное, моя 20-я попытка

Dim InstallDate As Long

    With New RegRead
        .OpenKey(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", KEY64)
        InstallDate =("InstallDate")
        .CloseKey()
    End With

    Label1.text=("Install date: " & Format$(DateAdd("s", InstallDate, #1/1/1970#), "Short Date"))

Я ожидал, что исходная дата установки появится в lable1 в десятичном или шестнадцатеричном формате.

Но там написано, что HKEY_LOCAL_MACHINE не объявлено. Он может быть недоступен из-за уровня защиты, и Microsoft является пространством имен и не может использоваться в качестве выражения. Я нахожусь на Windows 7 64 бит, реестр версии 5., если это помогает.

Я потерян. Пожалуйста, помогите. ( Я просто новичок )

Ответы [ 3 ]

0 голосов
/ 26 июня 2019

Поскольку вы ответили в редактировании, я провел еще несколько исследований и нашел статью, посвященную вашей проблеме. В нем автор заявляет: Я обнаружил, что реестр уже содержит значение, которое указывает количество секунд после 1 января 1970 года в 12:00 утра, когда была установлена ​​операционная система. Вот его решение:

Public Shared Function GetWindowsInstallationDateTime(computerName as String) as DateTime
    Dim key as Microsoft.Win32.RegistryKey
    key = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, computerName)
    key = key.OpenSubKey("SOFTWAREMicrosoftWindows NTCurrentVersion", False)
    If key IsNot Nothing Then
        Dim startDate as DateTime
        Dim regVal as Int64

        startDate = new DateTime(1970, 1, 1, 0, 0, 0)
        regVal = Convert.ToInt64(key.GetValue("InstallDate").ToString())

        Return startDate.AddSeconds(regVal)
    End If

    Return DateTime.MinValue
End Function

Источник: https://alanjuden.com/2009/09/09/get-windows-installation-date-in-csharp-or-vb-net/

Надеюсь, это поможет вам решить вашу проблему.

0 голосов
/ 26 июня 2019

Вы можете использовать DateTimeOffset.FromUnixTimeSeconds

Например =>

Using rkLocalMachine As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
    Using sk As RegistryKey = rkLocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion", False)
        Dim nValue As Integer = CType(sk.GetValue("InstallDate"), Integer)
        Dim dInstallDate As Date = DateTimeOffset.FromUnixTimeSeconds(nValue).DateTime
        MessageBox.Show("InstallDate = " + dInstallDate.ToString, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Using
End Using
0 голосов
/ 26 июня 2019

Попробуйте это:

Dim readValue = My.Computer.Registry.GetValue(
    "HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
MsgBox("The value is " & readValue)

Источник: https://docs.microsoft.com/en-us/dotnet/visual-basic/developing-apps/programming/computer-resources/how-to-read-a-value-from-a-registry-key

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...