Jag har ett program som ska hämta användarnamnet på den som loggat in (nätinloggning), och programmet fungerar bra i nya windows-versioner (XP, 2000), men vissa av datorerna kör fortfarande Windows 98. På dessa datorer fungerar koden ibland, och ibland inte, bara några minuters mellanrum mellan inloggningarna kan ge olika resultat. Jag känner inte till hur det fungerar med fleranvändare i Windows men på singel bör Så här gör jag Tack för svaren, men det verkar som att detta bara ger namnet på den som registrerat sig, och inte på den som loggat in. Finns det alltså inte något sätt att ta reda på vem som loggat in i win 98? Det är ett större nätverk som man loggar in på.Användare i Windows 98
Programmet hämtar först användarnmanet med getUsername(), och om denna returnerar en felkod försöker programmet hämta användarnmanet från miljövariablerna. Finns det något annat sätt att hämta användarnamn på, och varför fungerar koden inte alltid i W98? Jag har försökt skanna registret på användarnamnet, men har inte hittat något där heller?
Jag använder VB6.Sv: Användare i Windows 98
detta fungera, kanske får du ut något av det.
' Hämta registerkod
gREGVALOWNER = "SOFTWARE\Microsoft\Windows\CurrentVersion" ' Win95-98
sArReg = GetSetting(sProgram, "Registrera", "sReg")
bUser = GetKeyValue(HKEY_LOCAL_MACHINE, gREGVALOWNER, gREGOWNER, SysInfoPath)
sUser = SysInfoPath
If sUser = "" Then
gREGVALOWNER = "SOFTWARE\Microsoft\Windows NT\CurrentVersion" ' Win NT-XP
bUser = GetKeyValue(HKEY_LOCAL_MACHINE, gREGVALOWNER, gREGOWNER, SysInfoPath)
sUser = SysInfoPath
End IfSv: Användare i Windows 98
<code>
Option Explicit
Private Declare Function RegOpenKeyEx Lib _
"advapi32" Alias "RegOpenKeyExA" _
(ByVal hkey As Long, ByVal lpSubKey As String, _
ByVal ulOptions As Long, ByVal samDesired As Long, _
ByRef phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib _
"advapi32" Alias "RegQueryValueExA" _
(ByVal hkey As Long, ByVal lpValueName As String, _
ByVal lpReserved As Long, ByRef lpType As Long, _
ByVal lpData As String, ByRef lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib _
"advapi32" (ByVal hkey As Long) As Long
Const HKEY_LOCAL_MACHINE = &H80000002 'UserInfo
Private Sub UserInfo()
Dim rc As Long ' Return Code
Dim hkey As Long ' Handle To An Open Registry Key
Dim KeyValType As Long ' Data Type Of A Registry Key
Dim KeyValSize As Long ' Size Of Registry Key Variable
Dim KeyVal As String ' ReturnString
'------------------------------------------------------------
' Open RegKey Under KeyRoot {HKEY_LOCAL_MACHINE...}
'------------------------------------------------------------
' Open Registry Key Win NT
rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
"SOFTWARE\Microsoft\Windows NT\CurrentVersion", _
0, &H1, hkey)
If rc = 0 Then ' Windows NT CurrentVersion finns
' Testa finns det KeyValue
rc = RegQueryValueEx(hkey, "RegisteredOwner", 0, _
KeyValType, KeyVal, KeyValSize)
If rc = 0 Then 'RegistredOwner finns Info Win NT exist
GoTo WinNT
Else
rc = RegCloseKey(hkey) ' Close Registry Key
End If
End If
' Öpnar Win 95/98 versionen
rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
"SOFTWARE\Microsoft\Windows\CurrentVersion", _
0, &H1, hkey)
WinNT:
If rc <> 0 Then GoTo GetKeyError
'Viktigt du måste allocera/förnya buffer före varje hämtning
KeyVal = String$(1024, 0) ' Allocate Variable Space
KeyValSize = 1024 ' Mark Variable Size
'------------------------------------------------------------
' Retrieve Registry Key Value...
'------------------------------------------------------------
' Get/Create Key Value
rc = RegQueryValueEx(hkey, "RegisteredOwner", 0, _
KeyValType, KeyVal, KeyValSize)
' Win95/98 Adds Null Terminated String...
' Null Found, Extract From String
' WinNT Does NOT Null Terminate String...
' Null Not Found, Extract String Only
On Error Resume Next
' Ta bort NULL-tecken (Chr$(0))
If InStr(KeyVal, Chr$(0)) Then KeyVal = Left$(KeyVal, _
InStr(KeyVal, Chr$(0)) - 1)
Label1.Caption = KeyVal 'visa resultat
'Viktigt du måste allocera/förnya buffer före varje hämtning
KeyVal = String$(1024, 0) ' Allocate Variable Space
KeyValSize = 1024 ' Mark Variable Size
rc = RegQueryValueEx(hkey, "RegisteredOrganization", 0, _
KeyValType, KeyVal, KeyValSize)
' Ta bort NULL-tecken (Chr$(0))
If InStr(KeyVal, Chr$(0)) Then KeyVal = Left$(KeyVal, _
InStr(KeyVal, Chr$(0)) - 1)
Label2.Caption = KeyVal 'visa resultat
KeyVal = "" 'Set Return Val To Empty String
' Close Registry Key
rc = RegCloseKey(hkey)
Exit Sub 'Exit
GetKeyError: 'Städa upp om det blivit Error
Label1.Caption = "Ägare Okänd"
Label2.Caption = "Organisation Okänd"
KeyVal = "" 'Set Return Val To Empty String
' Close Registry Key
rc = RegCloseKey(hkey)
Err.Clear
End Sub
</code>Sv: Användare i Windows 98