Zachary.shupp Ответов: 1

преобразование vbscript в vb.net


У меня есть этот скрипт, который я использую для windows 7, чтобы получить последнего вошедшего пользователя. Он отлично работает как vbscript, но когда я пытаюсь преобразовать его в работу в своем приложении, я получаю номер обратно вместо имени пользователя. Пожалуйста помочь. ниже приведен сценарий, который я использовал.

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "127.0.0.1"
 
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"
strValueName = "LastLoggedOnUser"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
Wscript.Echo "Current LastLoggedOnUser Value: " & strValue


теперь я попробовал преобразовать его, и этот код приведен ниже. Все, что я получаю, - это номер 1, а не имя. Помощь была бы очень кстати.

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "127.0.0.1"

Dim oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")

Dim strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"
Dim strValueName = "LastLoggedOnUser"
Dim strvalue = oReg.GetStringValue(HKEY_LOCAL_MACHINE, strKeyPath, strValueName)
MsgBox("Current LastLoggedOnUser Value: " & strvalue.ToString)

1 Ответов

Рейтинг:
4

Mario Majčica

Это, вероятно, потому, что вы находитесь на машине x64.

Проверьте этот код.


Imports Microsoft.Win32

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim value As String
        Dim localKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64)

        localKey = localKey.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI")

        Dim value64 = localKey.GetValue("LastLoggedOnUser")

        Dim localKey32 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32)
        localKey32 = localKey32.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI")

        Dim value32 = localKey32.GetValue("LastLoggedOnUser")

        If value64 = Nothing Then
            value = value32
        Else
            value = value64
        End If

        MsgBox(value.ToString())
    End Sub
End Class


Редактировать комментарии к посту:

для решения, которое обращается к реестру удаленных машин, проверьте это:

Dim value As String
       Dim strComputer As String = "Zack-PC"

       Dim localKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, strComputer, RegistryView.Registry64)
       localKey = localKey.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI")
       Dim value64 = localKey.GetValue("LastLoggedOnUser")

       Dim localKey32 = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, strComputer, RegistryView.Registry32)
       localKey32 = localKey32.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI")
       Dim value32 = localKey32.GetValue("LastLoggedOnUser")

       If value64 = Nothing Then
           value = value32
       Else
           value = value64
       End If

       MsgBox(value.ToString)



Овации


Zachary.shupp

это отлично работает для локальной машины, но мне нужно иметь возможность читать удаленную машину, как бы я добавил эту способность к тому, что у вас есть?

Mario Majčica

Я звоню по сотовому. Однако проверьте это http://msdn.microsoft.com/en-us/library/8zha3xws(v=против 71). aspx

Zachary.shupp

Я просто заставил его работать, и все, что мне нужно было сделать, это изменить OpenbaseKey на OpenRemoteBasekey и добавить имя машины. Большое вам спасибо за помощь.

Тусклое значение в виде строки
Dim strComputer As String = " Zack-PC"

Дим localKey = объект registrykey.OpenRemoteBaseKey(RegistryHive.LocalMachine, strComputer, RegistryView. Registry64)
localKey = локальный ключ.OpenSubKey("программное обеспечение\Microsoft\окна\CurrentVersion равное\аутентификации\проблемы")
Dim value64 = localKey.GetValue ("LastLoggedOnUser")

Дим localKey32 = объект registrykey.OpenRemoteBaseKey(RegistryHive.LocalMachine, strComputer, RegistryView. Registry32)
localKey32 = localKey32.OpenSubKey("программное обеспечение\Microsoft\окна\CurrentVersion равное\аутентификации\проблемы")
Dim value32 = localKey32. GetValue ("LastLoggedOnUser")

Если value64 = ничего, то
value = value32
Ещё
значение = value64
Конец, Если

MsgBox(значение.Метод toString)

Mario Majčica

Я обновил решение. Голосуйте, если хотите ;)

Овации

member60

мои 5!

Mario Majčica

:)