![]() |
Alle freigegebenen Ressourcen auflisten
Hi,
ich versuche gerade ein wenig mit der NetShare*-Funktionen der WinAPI herumzuspielen... Ich habe dazu ja auch schon einen längeren Dialog mit OregonGhost geführt, der mir bei der Lösung eines kleinen Problemes behilflich war. Mit Hilfe der genannten Funktionen lassen sich die freigebenen Ressourcen relativ einfach verwalten. Ich möchte anhand eines kleinen Beispiels zeigen, wie man die Funktion NetShareEnum verwendet. Sie listet alle Freigaben auf. Ich gehe davon aus, dass ihr schon eine ListView mit zwei Spalten hinzugefügt habt. Dann braucht ihr nur noch folgenden SourceCode verstehen und umsetzen.
Delphi-Quellcode:
Das war's schon. :)
{
Wer die JEDI-Übersetzungen der WinAPI-Header hat, braucht nur die Units JwaLM und JwaLMShare (gaaanz wichtig: beide!!!) einbinden. Wer sie nicht hat, nimmt einfach diesen Ausschnitt daraus: } function NetShareEnum(servername: LMSTR; level: DWORD; var bufptr: LPBYTE; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): DWORD; stdcall; const MAX_PREFERRED_LENGTH = DWORD(-1); type _SHARE_INFO_502 = record shi502_netname: LMSTR; shi502_type: DWORD; shi502_remark: LMSTR; shi502_permissions: DWORD; shi502_max_uses: DWORD; shi502_current_uses: DWORD; shi502_path: LMSTR; shi502_passwd: LMSTR; shi502_reserved: DWORD; shi502_security_descriptor: PSECURITY_DESCRIPTOR; end; PSHARE_INFO_502 = ^_SHARE_INFO_502; { Und alles was jetzt kommt muss sowieso jeder machen. Erstmal brauchen wir einen kleinen array-Typen } TShareInfo502Array = Array of _SHARE_INFO_502; { Und als nächstes nur schnell unsere kleine Funktion zum Auflisten der Freigaben. frmMain ist unser Hauptformular, lvShares unsere ListView. Der Parameter sServerName gibt an, auf welchem Rechner die Freigaben gesucht werden. Wenn nil übergeben wird, werden die lokalen Freigaben verwendet. } procedure ListSharedFolders(const sServerName: PWideChar); var aShareBuffer: PSHARE_INFO_502; aWorkBuffer: TShareInfo502Array; dwEntriesRead: Cardinal; i: integer; lviNewItem: TListItem; begin // ListView leeren, damit da nichts mehr drin steht frmMain.lvShares.Items.Clear; // Die Freigaben über die API laden NetShareEnum(sServerName, 502, PByte(aShareBuffer), MAX_PREFERRED_LENGTH, @dwEntriesRead, @dwEntriesRead, nil); // Jetzt den Buffer in ein Array laden, damit es einfer zu verwenden ist aWorkBuffer := TShareInfo502Array(aShareBuffer); // Freigaben zur ListView adden for i:=0 to dwEntriesRead - 1 do begin lviNewItem := frmMain.lvShares.Items.Add; // Freigabenname lviNewItem.Caption := aWorkBuffer[i].shi502_netname; // Pfad zur Freigabe auf den lokalen Datenträgern lviNewItem.SubItems.Add(aWorkBuffer[i].shi502_path); // Kommentare zur Freigabe lviNewItem.SubItems.Add(aWorkBuffer[i].shi502_remark); end; end; Weitere Informationen gibt es wie immer im [msdn:cb3a3a4ba5="NetShareEnum"]MSDN[/msdn:cb3a3a4ba5]. Chris PS: Über Anregungen und Verbesserungsvorschläge würde ich mich freuen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 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