Benutzernamen ermitteln klappt nicht

    • Benutzernamen ermitteln klappt nicht

      Hallo,
      ich möchte den Namen eines Windows-Benutzers ermitteln. Dazu möchte ich die API GetUserNameEx benutzen. Aber mein Code stürzt immer ab:

      Quellcode

      1. Def GetUserNameEx(3) !"secur32","GetUserNameExA"
      2. declare test&,b#
      3. Dim b#,256
      4. test&=GetUserNameEx(3,b#,256)
      5. Messagebox(Char$(b#,0,test&),"",0)
      6. Dispose b#
      Kann mir jemand sagen was ich falsch mache? Ich hab auch schon versucht die DLL erst in den Speicher zu laden:

      Quellcode

      1. declare test&,secur&
      2. secur&=ImportDLL($SysPath+"\\secur32.dll","")
      3. Dim b#,256
      4. test&=GetUserNameExA(3,b#,256)
      5. Messagebox(Char$(b#,0,test&),"",0)
      6. FreeDLL secur&
      7. Dispose b#
      ...aber das bringt auch nichts.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Der dritte Parameter, die Länge des Puffers darf nicht direkt angegeben werden. Es muß eine Speicheradresse angegeben sein, die den Wert enthält. Habe ich auch eben erst beim dritten Lesen der Beschreibung gesehen :-( . Und der Rückgabewert ist auch nicht die Länge sondern einfach 0 für Fehler oder 1 (MS schreibt da ungleich 0) für Erfolg. Ich kriege da immer eine 1 und damit mit Deiner Messagebox nur den ersten Buchstaben meines Namens.

      Quellcode

      1. Def GetUserNameEx(3) !"secur32","GetUserNameExA"
      2. declare test&,MSize&,b#
      3. Dim b#,256
      4. MSize& = SizeOf(b#)
      5. test&=GetUserNameEx(3,b#,Addr(MSize&))
      6. MessageBox(String$(b#, 0),"",0)
      7. Dispose b#
      So klappt es bei mir.


      Gruß Volkmar
    • Wie Volkmar richtig erkannt hat, der dritte Parameter ist ein "InOut" Parameter, also die Adresse zu der Anzahl. Die Funktion ist erfolgreich, wenn keine 0 zurückgegeben wird, kann also auch was anderes als 1 sein: <> 0
      Bei Erfolg steht im 2ten Parameter der Name, hier also: NameDisplay = 3, besser immer mit Konstanten arbeiten, weil der Wert könnte sich in Zukunft ändern.
      Im dritten Parameter findet sich bei Erfolg, die Adresse zur Länge des Namens, in UNICODE (nicht TCHAR), unabhängig davon ab die GetUserNameExA oder GetUserNameExW ausgeführt wurde!
      Auf Nummer sicher geht man, wenn man die Länge als 0 definiert und dann als Rückgabe die gebrauchte Länge erhält. Man kann natürlich auch immer mit 255 Arbeiten, wenn man es so gewohnt ist :-D

      Wie das ganze dann in XProfan aussehen muß, wisst Ihr ja, weil ich hab kein Profan installiert zum Testen und befinde mich gerade unter Linux :P
      Gruß Thomas

      Wenn ich lügend sage, dass ich lüge, lüge ich oder sage ich Wahres?
    • Ah verdammt, schon wieder reingefallen. Der dritte Parameter ist ja ein in/out...danke.

      Getenv ermittelt den Namen wie er intern benutzt wird, bei mir "jacde", die API ermittelt den Namen wie er angezeigt wird, also "Jac de Lad".

      Hier die korrigierte Version (ab Windows 2000):

      Quellcode

      1. Def GetUserNameEx(3) !"secur32","GetUserNameExA"
      2. declare test&,b#
      3. Dim b#,256
      4. test&=256
      5. GetUserNameEx(3,b#,Addr(test&))
      6. Messagebox(Char$(b#,0,test&),"",0)
      7. Dispose b#

      Der erste Parameter ist variabel, siehe hier.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Jac de Lad ()

    • Jo, im msdn steht was dazu.

      Altprofaner schrieb:

      Bei mir muss der erste Parameter 2 sein
      Windows 7
      kommt bei dir eine Fehlermeldung oder ein Leerstring? Vielleicht was mit getlasterror?
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • p. specht schrieb:

      Selbes wie bei Altprofaner: Windows-7-64 liefert nur bei 1. Parameter = 2, alles andere liefert Leerstring, ohne Fehlermeldung. Das was bei Parameter 2 geliefert wird, entspricht inhaltlich
      genenv$("USERDOMAIN")+"\\"+getenv$("USERNAME")
      Gruss
      Hab gerade bei mir getestet, 2 liefert auch "userdomain\username" zurück. Vielleicht bringt die 3 bei mir was, weil ich mich mit meinem Microsoft-Konto angemeldet habe...
      Alle anderen Werte bringen nur Fehler, also Rückgabewert 0.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Wenn Euer PC nicht zu einer Domain gehört, sondern zufällig da drin ist, kann man ihn wieder da rausnehmen.

      Systemsteuerung / System und Sicherheit / System : Einstellungen ändern (unten rechts).
      Option: Arbeitsgruppe, dort Workgroup eintragen.

      Aber nur wenn ihr wirklich nicht in einer Domain seid und euer PC sich nicht im Netzwerk einer Firma/Organisation steht :-D
      Würde dort wahrscheinlich auch gar nicht erlaubt sein :lol:
      Gruß Thomas

      Wenn ich lügend sage, dass ich lüge, lüge ich oder sage ich Wahres?
    • ts-soft schrieb:


      Aber nur wenn ihr wirklich nicht in einer Domain seid und euer PC sich nicht im Netzwerk einer Firma/Organisation steht :-D
      Würde dort wahrscheinlich auch gar nicht erlaubt sein :lol:
      Du kennst eindeutig nicht die Firma in der ich arbeite... :cursing:
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Hat noch irgendjemand Windows 10? Interessant wäre vor allem ein Windows mit Offline-Konto.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net