HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A számítógép felhasználóinak kigyűjtése


Példaprogram letöltése

4190 bájt

A Windows dinamikus könyvtáraiban megtalálható függvények segítségével a legkülönbözőbb információkhoz juthatunk rendszerünkben. Cikkünkben annak járunk utána, hogyan kérdezhető le programból a számítógép felhasználóinak listája, és hogyan szerezhetünk róluk információkat. A megoldásban a Netapi32.dll dinamikus könyvtár függvényeit hívjuk meg. A függvények speciális struktúrát használnak, így létre kell hoznunk ezt az alkalmazás kódjában.

A MŰVELET gomb segítségével indíthatjuk el a lekérdezést, melynek eredményeképpen a TListBox kontrolban lesznek megtalálhatók a rendszerben bejegyzett felhasználók nevei. A TMemo kontrolban az aktuálisan kijelölt felhasználóhoz kapcsolódó kísérőinformáció jelenik meg. Lássuk, mit kell tennünk, hogy a művelet végrehajtódjon.
A lekérdezéshez két API metódusra van szükségünk. A NetUserenum függvény végzi el a lekérdezést. Deklarációja a következő:
function NetUserEnum(ServerName: PWideChar;
  Level,
  Filter: DWORD;
  var Buffer: Pointer;
  PrefMaxLen: DWORD;
  var EntriesRead,
  TotalEntries,
  ResumeHandle: DWORD): Longword; stdcall; external 'netapi32.dll';
A művelet végén a NetApiBufferFree metódussal fel kell szabadítani a bufPtr mutató által lefoglalt memóriaterületet, a memóriaszivárgás elkerülése végett (memory leak).
function NetApiBufferFree(pBuffer: PByte): Longint; stdcall; external 'netapi32.dll';
A felhasználói információkat a USER_INFO_1 nevű rekordban kapjuk vissza a metódus meghívása után. Ezt is deklaráljuk:
USER_INFO_1 = record
  usri1_name: LPWSTR;
  usri1_password: LPWSTR;
  usri1_password_age: DWORD;
  usri1_priv: DWORD;
  usri1_home_dir: LPWSTR;
  usri1_comment: LPWSTR;
  usri1_flags: DWORD;
  usri1_script_path: LPWSTR;
end;
lpUSER_INFO_1 = ^USER_INFO_1;
A rekord tárolja a felhasználó jelszavát, annak lejáratára vonatkozó információt, illetve a felhasználó mappájának elérési útvonalát. A gomb megnyomása után nincs más teendőnk, mint meghívni a függvényt a megfelelő metódusokkal. A függvény negyedik paramétere tartalmazza azt a pointer-t, mely majd az adatokkal teli rekordra mutat.
status := NetUserEnum(nil, 1, 0, lpBuffer, 0, er, total, rh);
A hívás után végigmegyünk a pointer által mutatott memóriaterületen, és a listába írjuk a rekord usri1_name mezőjének tartalmát.
userinfo := lpBuffer;
for Counter := 0 to er - 1 do
begin  
listbox1.Items.Add(WideCharToString(userinfo^.usri1_name));
  list.Add(WideCharToString(userinfo^.usri1_comment));
  Inc(userinfo);
end;
Majd felszabadítjuk a memóriaterületet.
NetApiBufferFree(lpBuffer);
A usri1_comment mező értékeit egy TStringList listába írjuk, és a ListBox kontrol egy-egy új elemének kijelölésekor megjelenítjük az azonos sorszámú elemet a TMemo kontrolban.
memo1.Text := list[listbox1.ItemIndex];

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 683. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |