Avatar billede wetdog Nybegynder
22. marts 2002 - 14:44 Der er 6 kommentarer og
3 løsninger

VBA - HKEY_CURRENT_USER

Hej Alle

Jeg har brug for lidt hjælp til at få fat i brugernavnet på personen som er logget på maskinen.

jeg har forsøgt med :

Const HKEY_CURRENT_USER = &H80000001

Option Compare Database
Option Explicit

Function test()

    Dim t As String
   
    t = RegReadString(HKEY_CURRENT_USER, "NetWork", "D", "UserName")
   
    MsgBox t
   
End Function

men får besked "Sub or function not defined"

Hvad gør man så ?

WetDog
Avatar billede a1a1 Novice
22. marts 2002 - 14:47 #1
du skal jo bruge functionen RegReadString (som åbent bart ikke eksisterer), det er derfor der er fej
22. marts 2002 - 14:50 #2
Kan du ikke bruge "GetSetting"?
22. marts 2002 - 14:53 #3
Når nej du skal jo læse noget som ::du:: ikke gemmer...
Avatar billede a1a1 Novice
22. marts 2002 - 14:54 #4
jeg har en function som ser ca. såån ud:

Public Function GetSetting_Reg(ByVal Section As String, ByVal Key As String, Optional ByVal DefaultValue As String = "0") As String

Dim r As New cRegistry
Dim c As New cRegistry
Dim w As Long
'On Error Resume Next

    w = Val(DefaultValue)
    With r
        .ClassKey = HKEY_CURRENT_USER
        .SectionKey = regPath & Section
        .ValueType = REG_DWORD      'kun tal eller booleans (oversat til 0 og 1)
        .ValueKey = Key
        .Default = w
        GetSetting_Reg = .Value
    End With
   
    With c
        .ClassKey = HKEY_LOCAL_MACHINE
        .SectionKey = regPath & Section
        .ValueType = REG_DWORD     
        .ValueKey = Key
        .Default = w
        'GetSetting_Reg = .Value   
    End With
End Function

det dur :)
Avatar billede wetdog Nybegynder
22. marts 2002 - 15:10 #5
Jeg fandt nedenstående på spm. 188516 svaret af driis :

Public Declare Function GetComputerName Lib "kernel32.dll" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Public Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Dim buf As String
Dim Ans As Long

Public Function CompName() As String
    buf = Space(255)
    Ans = GetComputerName(buf, 255)
    CompName = Left(buf, InStr(1, buf, vbNullChar) - 1)
End Function

Public Function UserName() As String
    buf = Space(255)
    Ans = GetUserName(buf, 255)
    UserName = Left(buf, InStr(1, buf, vbNullChar) - 1)
   
    MsgBox UserName
   
End Function

og det virker. Jeg kunne ikke få jeres til at virke, men jeg er også nybegynder :-). Burde jeg ikke få fat i ham og tildele ham de 150 points ?

Eller hvad synes I ?

wetdog
Avatar billede bernhof Nybegynder
23. marts 2002 - 02:23 #6
'Du opretter et modul (hvis du ikke allerede har et)
'i dit projekt og indsætter følgende øverst i modulet:
'-----------------------------------

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const ERROR_SUCCESS = 0&

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal HKEY As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal HKEY As Long, ByVal lpValueName As String) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

Public Const REG_SZ = 1 ' Unicode nul terminated string
Public Const REG_DWORD = 4 ' 32-bit number


'-----------------------------------
'Herefter indsætter du følgende nederst i modulet:
'-----------------------------------


Public Function GetString(HKEY As Long, strPath As String, strValue As String)
    Dim keyhand As Long
    Dim datatype As Long
    Dim lResult As Long
    Dim strBuf As String
    Dim lDataBufSize As Long
    Dim intZeroPos As Integer
    r = RegOpenKey(HKEY, strPath, keyhand)
    lResult = RegQueryValueEx(keyhand, strValue, 0&, lValueType, ByVal 0&, lDataBufSize)

    If lValueType = REG_SZ Then
        strBuf = String(lDataBufSize, " ")
        lResult = RegQueryValueEx(keyhand, strValue, 0&, 0&, ByVal strBuf, lDataBufSize)

        If lResult = ERROR_SUCCESS Then
            intZeroPos = InStr(strBuf, Chr$(0))

            If intZeroPos > 0 Then
                GetString = Left$(strBuf, intZeroPos - 1)
            Else
                GetString = strBuf
            End If
        End If
    End If
End Function


'-----------------------------------------
'Herunder er et eksempel på hvordan man kan
'kalde funktionen ovenfor. I eksemplet kaldes
'den ved et tryk på en knap ved navn Command1:
'-----------------------------------------


Private Sub Command1_Click

    'Koden:

    t = GetString(HKEY_CURRENT_USER, "Control Panel/Colors", "ButtonFace")
    MsgBox t

End Sub


'-------------------------
'Husk at ændre i eksemplet ovenfor, så det
'passer til dine behov.


/Mikkel
Avatar billede bernhof Nybegynder
23. marts 2002 - 02:25 #7
(undskyld - skråstregen i "Control Panel/Colors" skal være omvendt: "Control Panel\Colors")
Avatar billede peter.erikse Nybegynder
25. marts 2002 - 10:06 #8
Public Function gstrGetLoggedInUser()
    Dim sBuff As String * 25
    Dim lRet As Long: Dim char_zero
    Dim sUserName As String: Dim GetLoggedInUser As String
    'Get the user name, remove NULLs, and trim trailing spaces.
    lRet = GetUserName(sBuff, 25)
    sUserName = Trim$(Left(sBuff, InStr(sBuff, Chr(char_zero)) - 1))
    'Return empty if no name is returned.
    If sUserName = vbNullString Then GetLoggedInUser = ""
    gstrGetLoggedInUser = sUserName
End Function
Avatar billede peter.erikse Nybegynder
25. marts 2002 - 10:07 #9
Du skal bruge denne til ovenstående:
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester