AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Liste aller geöffneten Dateien

Ein Thema von APP · begonnen am 10. Sep 2003 · letzter Beitrag vom 12. Sep 2003
Antwort Antwort
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.123 Beiträge
 
Delphi 11 Alexandria
 
#1

Re: Liste aller geöffneten Dateien

  Alt 10. Sep 2003, 13:07
Moin Armin,

dann will ich mal "kurz" meinen Senf dazu geben
Allerdings: Auf meinem lokalen Rechner geht's, ohne Fehlermeldung, auch nicht, nur auf anderen Rechnern, wenn ich die entsprechenden Berechtigungen habe. Die Ursache dafür ist mir auch noch nicht klar.

Delphi-Quellcode:
const
  NERR_Success = 0; // Success
  MAX_PREFERRED_LENGTH = DWORD(-1);

type
  NET_API_STATUS = DWORD;

  PFILE_INFO_2 = ^FILE_INFO_2;
  FILE_INFO_2 = packed record
      fi2_id : DWord;
    end;

  PFILE_INFO_3 = ^FILE_INFO_3;
  FILE_INFO_3 = packed record
      fi3_id : DWord;
      fi3_permissions : DWord;
      fi3_num_locks : DWord;
      fi3_pathname : PWChar;
      fi3_username : PWChar;
    end;

  TcsNetFileEnum = function(
    const servername : PWChar;
    const basepath : PWChar;
    const username : PWChar;
    const level : DWord;
    const bufptr : Pointer;
    const prefmaxlen : DWord;
    const entriesread : PDWord;
    const totalentries : PDWord;
    const resume_handle : PDWord
    ) : NET_API_STATUS; stdcall;

  TcsNetApiBufferFree = function(
    const Buffer : Pointer
    ) : NET_API_STATUS; stdcall;

implementation

var
  hDLL : DWORD;
  NetFileEnum : TcsNetFileEnum = nil;
  NetApiBufferFree : TcsNetApiBufferFree = nil;

{$R *.DFM}


procedure TForm1.Button1Click(Sender: TObject);

var
  pfi3Work : PFILE_INFO_3;
  pfi3Save : PFILE_INFO_3;
  dwEntriesRead : DWORD;
  dwTotalEntries : DWORD;
  dwResult : DWORD;
  i : integer;

begin
  if (hDLL = 0) or (@NetFileEnum = nil) or (@NetApiBufferFree = nil) then begin
    MessageBox(0,'Fehler beim Laden der Funktionen','FEHLER',MB_ICONERROR);
    exit;
  end;
  Memo1.Lines.Clear;
  dwResult := NetFileEnum(nil,nil ,nil,3,@pfi3Work,MAX_PREFERRED_LENGTH,@dwEntriesRead,@dwTotalEntries,nil);
  if dwResult <> NERR_Success then begin
    MessageBox(0,PChar(SysErrorMessage(dwResult)),'FEHLER',MB_ICONERROR);
    exit;
  end;
  try
    pfi3Save := pfi3Work;
    for i := 1 to dwEntriesRead do begin
      Memo1.Lines.Add(pfi3Save.fi3_pathname + WideString('/') + pfi3Save.fi3_username);
      inc(pfi3Save);
    end;
  finally
    NetApiBufferFree(pfi3Work);
  end;
end;

initialization
begin
  hDLL := LoadLibrary('NETAPI32.DLL');
  if hDLL = 0 then exit;
  @NetFileEnum := GetProcAddress(hDLL,'NetFileEnum');
  @NetApiBufferFree := GetProcAddress(hDLL,'NetApiBufferFree');
end;

finalization
begin
  if hDLL <> 0 then FreeLibrary(hDLL);
end;
Was übrigens immer besonders wichtig ist bei diesen ganzen NetXXXX Funktionen: Als Buffer muss immer die Adresse eines Pointers angegeben werden. Damit ich bei so etwas nicht die Übersicht verliere, hab' ich mir angewöhnt meine Funktionsdeklarationen für API Aufrufe C und nicht borlandtypisch zu erstellen, also immer ohne var Parameter. Dann ist es auch leichter Beispiele zu übersetzen.
Deshalb passen Deine und meine Deklarationen nicht zusammen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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