Angemeldeter Benutzer

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Angemeldeter Benutzer

Beitrag von purebas »

Wie kann ich herausfinden, welcher Benutzer am Windows-Rechner angemeldet ist?

Ich könnte zwar den Benutzernamen mit der Environ-Variable "Username" ermitteln.
Jedoch funktioniert das nicht, wenn ein Programm mit "Ausführen als" unter einen
anderen Benutzer gestartet wurde. In diesem Fall bekomme ich nicht den am Rechner
angemeldeten Benutzernamen, sondern den Benutzer unter dem ich das Programm
gestartet habe.

Schließlich will ich den Registryschlüssel unter "HKEY_USERS" ermitteln, damit ich
dort bestimmte Einstellungen für den angemeldeten Benutzer eintragen kann.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Angemeldeter Benutzer

Beitrag von X360 Andy »

Schau mal ob das hier funktioniert ...

http://www.rsbasic.de/index.php?option= ... &Itemid=59
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Angemeldeter Benutzer

Beitrag von bobobo »

hmm .. computername ist ja schonmal gut .. gefragt war nach dem angemeldeten User

das sollte so gehen

den aktuellen User solltest du unter
HKEY_CURRENT_USER\Software\Microsoft\windows\CurrentVersion\Explorer und dort in
der Variablen 'Logon User Name' finden.

ömm also eventuell so (code von STARGÅTE irgendwann einmal)

Code: Alles auswählen

;STARGÅTE irgendwann einmal
; Liest eine Variable aus der Registrierung aus 
Procedure.s ReadReg(HKEY, Ort$, Var$)
  RetVal = RegOpenKeyEx_(HKEY, Ort$, 0, #KEY_READ, @lhkey) 
  cch = 255 : sValue$ = Space(255) 
  lType = #REG_SZ 
  lrc = RegQueryValueEx_(lhkey, Var$, 0, @lType, @sValue$, @cch)
  RegCloseKey_(lhkey) 
  ProcedureReturn sValue$
EndProcedure

Debug ReadReg(#HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Explorer\","Logon User Name")
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: Angemeldeter Benutzer

Beitrag von purebas »

In HKEY_CURRENT_USER und damit auch unter HKEY_CURRENT_USER\Software\Microsoft\windows\CurrentVersion\Explorer
stehen immer die Informationen zum Benutzer nicht zum Computer!

Wenn ich den genannten Zweig nehme und ein Programm mit "Ausführen als" unter einen anderen Benutzer aufrufe,
dann wird der Benutzer ausgelesen, der das Programm gestartet hat und leider nicht der Benutzer der am Computer
angemeldet ist. :)

Beispiel:

Am Computer angemeldet: purebas
Programm wird ausgeführt unter: Administrator

In diesem Fall wird innerhalb des aufgerufenen Programms als Benutzername nicht purebas sondern Administrator angezeigt.
Das nutzt mir aber nichts, da ich in den USER-Zweig von purebas bzw. in den dafür vorgesehenen Zweig unter HKEY_USERS
etwas eintragen möchte.
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Re: Angemeldeter Benutzer

Beitrag von sibru »

hilft Dir das hier weiter ?:

Code: Alles auswählen

;Modul      SystemOrdner  Version 1.02 vom 23.05.2007
#PB_Vers  = "4.20"
;
;Funktion:  liefert DateiPfade von Windows-SystemOrdnern
;
;Aufruf:    Pfad$ = SystemOrdner( OrdnerNr)
;           wobei OrdnerNr den gewünschten Pfad bestimmt:
;           2 = C:\Dokumente und Einstellungen\[username]\Startmenü\Programme
;           5 = C:\Dokumente und Einstellungen\[username]\Eigene Dateien
;           6 = C:\Dokumente und Einstellungen\[username]\Favoriten
;           7 = C:\Dokumente und Einstellungen\[username]\Startmenü\Programme\Autostart
;           8 = C:\Dokumente und Einstellungen\[username]\Recent
;           9 = C:\Dokumente und Einstellungen\[username]\SendTo
;          11 = C:\Dokumente und Einstellungen\[username]\Startmenü
;          16 = C:\Dokumente und Einstellungen\[username]\Desktop
;          19 = C:\Dokumente und Einstellungen\[username]\Netzwerkumgebung
;          20 = C:\WINNT\Fonts
;          21 = C:\Dokumente und Einstellungen\[username]\Vorlagen
;          22 = C:\Dokumente und Einstellungen\All Users\Startmenü
;          23 = C:\Dokumente und Einstellungen\All Users\Startmenü\Programme
;          24 = C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart
;          25 = C:\Dokumente und Einstellungen\All Users\Desktop
;          26 = C:\Dokumente und Einstellungen\[username]\Anwendungsdaten
;          27 = C:\Dokumente und Einstellungen\[username]\Druckumgebung
;          28 = C:\Dokumente und Einstellungen\[username]\Lokale Einstellungen\Anwendungsdaten
;          31 = C:\Dokumente und Einstellungen\All Users\Favoriten
;          32 = C:\Dokumente und Einstellungen\[username]\Lokale Einstellungen\Temporary Internet Files
;          33 = C:\Dokumente und Einstellungen\[username]\Cookies
;          34 = C:\Dokumente und Einstellungen\[username]\Lokale Einstellungen\Verlauf
;          35 = C:\Dokumente und Einstellungen\All Users\Anwendungsdaten
;          36 = C:\WINNT
;          37 = C:\WINNT\system32
;          38 = C:\Programme
;          39 = C:\Dokumente und Einstellungen\[username]\Eigene Dateien\Eigene Bilder
;          40 = C:\Dokumente und Einstellungen\[username]
;          41 = C:\WINNT\system32
;          43 = C:\Programme\Gemeinsame Dateien
;          45 = C:\Dokumente und Einstellungen\All Users\Vorlagen
;          46 = C:\Dokumente und Einstellungen\All Users\Dokumente
;          47 = C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Verwaltung
;          48 = C:\Dokumente und Einstellungen\[username]\Startmenü\Programme\Verwaltung
;           
;           
Procedure.s SystemOrdner(OrdnerNr)
  Protected Pfad$, *itemID.ITEMIDLIST = #Null
  If SHGetSpecialFolderLocation_ (0, OrdnerNr, @*itemID) = #NOERROR
    Pfad$ = Space (#MAX_PATH)
    If SHGetPathFromIDList_ (*itemID, @Pfad$)
      ProcedureReturn Pfad$
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure
Bild Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Angemeldeter Benutzer

Beitrag von bobobo »

hol dir dann mal psloggedon.exe von den ps-tools von http://www.sysinternals.com (Microsoft)

da mehrere User angemeldet gleichzeitig sein können, gibt es wohl keine ganz einfache Lösung
wie 'aus der Registry lesen' oder so.

aus der psloggedonhilfe
PsLoggedOn's definition of a locally logged on user is one that has their profile loaded into the Registry, so PsLoggedOn determines who is logged on by scanning the keys under the HKEY_USERS key. For each key that has a name that is a user SID (security Identifier), PsLoggedOn looks up the corresponding user name and displays it. To determine who is logged onto a computer via resource shares, PsLoggedOn uses the NetSessionEnum API. Note that PsLoggedOn will show you as logged on via resource share to remote computers that you query because a logon is required for PsLoggedOn to access the Registry of a remote system.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: Angemeldeter Benutzer

Beitrag von purebas »

Leider helfen mir die Tipps nicht weiter.

@sibru
Ich kann mit SystemOrdner() doch nur die einzelnen Systempfade abfragen.
Jedoch bekomme ich nicht den am Rechner angemeldeten Benutzer heraus
und auch nicht dessen Systempfade. Wenn ich ein Programm mit
"Ausführen als" starte, dann kann ich SystemOrdner() zwar benutzen.
Jedoch werde ich nur die Pfade zurückbekommen, die für den Benutzer
gelten unter dessen ich das Programm bzw. den Prozess gestartet habe.

@bobobo
Die Programme nutzen mir nichts, da ich die Funktion innerhalb meines
PureBasic-Programms benötige.

Es muss doch irgendeinen Registereintrag geben, damit ich den am Computer
angemeldeten Benutzer ermitteln kann. Es muss doch einen PB-Programmierer
geben, der die Funktion ebenfalls schon benötigt und eine Lösung hat. :shock:
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Angemeldeter Benutzer

Beitrag von NicTheQuick »

Kann man nicht einfach schauen wer den 'explorer.exe'-Prozess gestartet hat?
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Angemeldeter Benutzer

Beitrag von Nino »

purebas hat geschrieben:Es muss doch irgendeinen Registereintrag geben, damit ich den am Computer
angemeldeten Benutzer ermitteln kann.
Wieso muss es dazu einen Registry-Eintrag geben? Ich kann mir allerdings vorstellen, dass Dir WMI (Windows Management Instrumentation) weiterhilft.

Grüße, Nino
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: Angemeldeter Benutzer

Beitrag von purebas »

@NicTheQuick
Das könnte ein Weg sein. Allerdings wird bei einem Prozess -glaube ich- auch nur der Benutzer angezeigt, mit dem das Programm / der Prozess gestartet wurde. Wie auch immer - für mein Verständnis müsste es doch einen einfacheren Weg geben.

@nino
Ja natürlich - Du hast Recht. Einen Registry-Eintrag muss es ja nicht zwangsläufig geben. Ein API-Aufruf würde es auch tun. WMI finde ich ebenfalls viel zu "wild".

Ich glaube es gibt da was in der NetApi32.dll. Da müsste es eine Funktion geben mit der ich den angemeldeten Benutzer ermitteln kann. Ich glaube mit dieser Funktion kann man auch einen beliebigen Rechner in einem Netzwerk angeben und bekommt dann für diesen entfernten Rechner den angemeldeten Benutzer. Den Rechnername habe ich ja und könnte damit also den Benutzer ermitteln.

Ich hoffe es gibt noch einen PB-Experten, der ein kleines Beispiel hat.
Antworten