![]() |
Problem mit NetUserGetInfo
Hi,
also ich kriege heute noch die Krätze!!! Ersteinmal mein erstes Problem: Ich versuche Informationen zum User zu bekommen. Dazu hole ich mir die Infos mit NetUserGetInfo. Username ist der aktuell selektierte Eintrag in einer ListBox, deren Einträge aus NetUserEnum kommen. Um die Infos herauszubekommen nutze ich folgenden Source (*abtipp*; Remotedesktopverbindung funktioniert nicht!):
Delphi-Quellcode:
Problem ist, dass immer der Fehler kommt, dass der Benutzername falsch sei. Ich habe aber bereits geprüft, was der Wert von CurSelUser ist, aber der scheint richtig zu sein. Was kann man da machen?
CurSelUser_i := SendMessage(hWndListBox_RegUsers, LB_GETCURSEL, 0, 0);
SendMesage(hWndListBox_RegUsers, LB_GETTEXT, CurSelUser_i, integer(@CurSelUser)); case NetUserGetInfo(nil, @GetCurSel, 1, @aBuffer) of NERR_SUCCESS: begin // tue was! end; // folgliches Fehlerhandling end; Bitte keine Links o.ä. Ich bin kurz davor durchzudrehen! Chris PS: Mein zweites Problem kommt gleich hinterher in einem anderen Thread. |
Moin Chris,
welchen Fehlercode erhältst Du, wenn Du bei Misserfolg GetLastError aufrufst? (ich rate 87). Andere Möglichkeit: Erweitere mal die Case Anweisung um ERROR_ACCESS_DENIED, NERR_InvalidComputer und NERR_UserNotFound. Dann kannst Du ja eventuell sehen, was der Funktion nicht passt. |
Laß hier: NetUserGetInfo(nil, {->}@{<-}GetCurSel, 1, @aBuffer) mal das @ weg.
Bei mir sieht das übrigens so aus:
Delphi-Quellcode:
procedure GetUserInfo(sUser: String);
var s : String; ui11 : Pointer; begin if sUser <> ''then begin NetUserGetInfo(nil, PWideChar(WideString(sUser)), 11, ui11); s := String(PUserInfo11(ui11)^.usri11_name); SetDlgItemText(hApp, 103, @s[1]); s := String(PUserInfo11(ui11)^.usri11_full_name); SetDlgItemText(hApp, 104, @s[1]); s := String(PUserInfo11(ui11)^.usri11_comment); SetDlgItemText(hApp, 105, @s[1]); s := String(PUserInfo11(ui11)^.usri11_home_dir); SetDlgItemText(hApp, 111, @s[1]); s := ''; s := FormatTime(PUserInfo11(ui11)^.usri11_password_age*1000); SetDlgItemText(hApp, 112, @s[1]); s := SecsToDateTime(PUserInfo11(ui11)^.usri11_last_logon); SetDlgItemText(hApp, 113, @s[1]); s := IntToStr(PUserInfo11(ui11)^.usri11_num_logons); SetDlgItemText(hApp, 114, @s[1]); //s := SecsToDateTime(PUserInfo11(ui11)^.usri11_last_logoff); s := ''; SetDlgItemText(hApp, 115, @s[1]); s := IntToStr(PUserInfo11(ui11)^.usri11_bad_pw_count); SetDlgItemText(hApp, 116, @s[1]); end; end; |
Hi,
also das weglassen kannst du vergessen, da ich diese @s nur dann mache, wenn er meckert. Genaueren Source, sowie Fehlermeldungen gibt es, wenn ich wieder zu Hause bin. @ Christian: Habe ich ja! Aber GetLastError noch nicht. Was meinst du mit "ich empfehle 87"? Ich habe noch nie mit GetLastError gearbeitet. Chris PS: nutze nonVCL. |
Moin Chris,
also bei "ich rate 87", war das rate nicht im Sinne von empfehle, sondern im Sinne von raten, wie bei einem Rätsel gemeint ;-) Fehlercode 87 wäre ERROR_INVALID_PARAMETER. um den zu erhalten müsstest Du nur mal im else Zweig Deiner Case Anweisung ein
Delphi-Quellcode:
einbauen.
ShowMessage(SysErrorMessage(GetLastError));
// oder ShowMessage(IntToStr(GetLastError)); Zum Testen müsste das wohl akzeptabel sein. @Luckie: Wenn ich das richtig sehe, hast Du NetApiBufferFree vergessen, um den Buffer wieder freizugeben. |
Nein, zu dem Zeitpunkt war ich noch nicht fertig. Keine Angst also, es ist alles drin und da, wo es hingehört.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz