| |
|
|
- Seite 1 - |
|
supernova | Hallo,
ich bin Anfänger was XProfan betrifft. Also schon mal Entschuldigung falls die ein oder andere blöde Frage kommt. Ich habe das Forum schon durchsucht auch alle Hilfen, komme einfach nicht weiter.
Ich muss den aktuell eingeloggten User ermitteln. Ich habe bei MSDN nachgeschaut welche API am besten in frage kommt und bin dann auf "WNetGetUser" aus der mpr.dll gestossen. Die beschreibung steht auch in der win32.hlp. Also in Profan umgesetzt aber es geht nicht. Ich weiss nicht mehr weiter.
Dazu habe allgemein noch fragen
1 die Funktion heisst "WNetGetUser" wird aber mit "WNetGetUserA" aufgerufen warum ?
2 Die mpr.dll ist als 32 und 64 Bit Version in Windows vorhanden. Muss ich expliziet den Dateipfad in der Funktion zur 32 Bit Version angeben oder macht das Windows automatisch ?
3 Was ist an meine Funktion falsch ? Ich habe mich bemueht und soweit es geht Auskommentiert.
Herunterladen |
|
|
| |
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
Julian Schmidt | Hallo Funkheld.
supernova (07.12.13)
1 die Funktion heisst "WNetGetUser" wird aber mit "WNetGetUserA" aufgerufen warum ?
Normalerweise wird ein Text immer mit einem Byte pro Zeichen zurückgegeben (ANSI). Aber es gibt auch den Unicode-Standart wo zwei Byte pro Zeichen benötigt werden. Unicode beinhaltet viel mehr Zeichen. Unicode-Funktionen werden mit einen W hinten abgeschlossen und ANSI-Funktionen mit einen A. Häufig gibt es die Funktionen doppelt, einmal erfolgt die Rückgabe in ANSI und einmal in Unicode.
supernova (07.12.13)
2 Die mpr.dll ist als 32 und 64 Bit Version in Windows vorhanden. Muss ich expliziet den Dateipfad in der Funktion zur 32 Bit Version angeben oder macht das Windows automatisch ?
Das macht Windows automatisch, du musst nur den richtigen Dateinamen für deine DLL eintragen.
supernova (07.12.13)
3 Was ist an meine Funktion falsch ? Ich habe mich bemueht und soweit es geht Auskommentiert.
Habe jetzt nicht deinen Code angeschaut. Aber wenn du mal die Suche bemüht hättest, wäre schon ein Code für dich dabei gewesen. z.B. dieser hier [...] Kürzer wäre dagegen noch: KompilierenMarkierenSeparieren Ich empfehle dir diesen Workshop zu API-Grundlagen.durchzulesen[...]
Gruß
Julian |
|
|
| |
|
|
|
|
Jörg Sellmeyer | |
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.12.2013 ▲ |
|
|
|
|
supernova | Danke für die schnelle Hilfe,
allerdings würde ich auch gerne wissen was an mein PRG falsch ist. Wenn ich diese Funktion nicht ans laufen bekomme, werde ich wahrscheinlich auch keine andere ans laufen bekommen. Ich habe schon viele Stunden des suchen und versuchen verbracht aber komme einfach nicht weiter. Das frustiert ein bisschen. Dabei vermute ich das es wie oft recht simpel ist. |
|
|
| |
|
|
|
Andreas Koch | Hallo supernova,
hier noch eine andere Version deines Quellcodes, KompilierenMarkierenSeparieren' Beschreibung Funktion WNetGetUserA aus win32.hlp
'The WNetGetUser function retrieves the current default user name or the user name
'used to establish a network connection.
'
'DWORD WNetGetUser(
'
' LPCTSTR lpName, // pointer to local name to get user name for
' LPTSTR lpUserName, // pointer to buffer for user name
' LPDWORD lpnLength // pointer to buffer size variable
' );
' Variable fuer VZ C:\Windows\SysWOW64 defeninieren "32 Bit"
Declare WIN_SWow$
' Variable fuer fuer Funktion definieren
Declare Dll_Path$
' Variablen fuer MessageBox definieren
Declare AusgabeText$,TitelText$
' Variable WIN_SWow$ Wert zuweisen
WIN_SWow$=$WinPath + "\SysWOW64"
' Variable Dll_Path$ die mpr.dll fuer Funktion GetUserName zuweisen
Dll_Path$=WIN_SWow$ + "\mpr.dll"
'Funktion fuer API mpr.dll "WNetGetUserA" definieren
'Def GetUserName(3) ! Dll_Path$,"WNetGetUserA"
DEF GetUserName(2) !"ADVAPI32","GetUserNameA"
DECLARE USize#, UName#, User$
DIM USize#,4
DIM UName#,256
LONG Usize#,0=256
' Konstante fuer Fehler Abfrage
Def $NOERROR 0
GetUserName
Proc GetUserName
' Variablen fuer Funktion GetUserName definieren
Declare lpName$,lpUserName$,lpnLength&,Status%
'lpUserName$ mit Leerzeichen auffuellen
'steht bei MSDN in Beschreibung ?
lpUserName$ = @Space$(255)
'Ermittelt den Namen der Angemeldeten Person, die den Rechner benutzt.
'Status% gibt den Rueckgabewert der Funktion wieder Ok oder Fehler
Status% = GetUserName(UName#, USize#, lpnLength&)
' Zeigt den Namen der Person, die an dem Computer angemeldet
TitelText$ = "Rückgabe Funktion WNetGetUser"
AusgabeText$= String$(UName#,0) + " " + lpUserName$ + " " + lpName$
Messagebox(AusgabeText$,Titeltext$,4160)
EndProc
Unter einem Pointer wird die Adresse eines Bereichs verstanden, nicht eine Stringvariable. Vielleicht hilft dir das weiter. Gruß Andreas |
|
|
| |
|
|
|
supernova | Hallo Herr Koch,
Danke für den Tipp. Das war es. Vor lauter suchen und versuchen habe ich mich derart festgelaufen das ich den Wald vor lauter Bäume nicht mehr gesehen habe.
Gruß Supernova |
|
|
| |
|
|