Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Freigegebene Festplatten eines PCs ermitteln (https://www.delphipraxis.net/4623-freigegebene-festplatten-eines-pcs-ermitteln.html)

Salomon 6. Mai 2003 18:33


Freigegebene Festplatten eines PCs ermitteln
 
Hallo,
weiß jemand wie ich die freigebenen Festplatten eines Netzwerk PCs ermitteln kann?
Ich stelle mir das so vor, das ich einer Funktion eine IP Adresse übergebe und diese dann den PC nach freigegebenen Resourcen scannt und sie mir zurückliefert.

Das "WNetOpenEnum Demo" habe ich mir auch schon angeschaut. Dort wird aber immer das ganze Netz durchsucht, was für meine Zwecke nicht sinnvoll ist. Ich möchte eben speziell einzelne PCs abfragen.

Mfg Salomon

Chewie 6. Mai 2003 18:53

Schau dir mal im MSDN die Funktionen WNetEnumResource oder NetShareEnum an.

Salomon 6. Mai 2003 20:57

Welche Unit muss ich denn einbinden damit ich "NetShareEnum" benutzten kann? Oder gibt es gar keine Header files?

Chewie 7. Mai 2003 11:30

Keine Ahnung, ob es da Übersetzungen gibt. Ich schau mal...

Bei meinem Delphi ist nix dabei. Aber schau mal bei den Jedis vorbei, die haben vielleicht die Header-Übersetzungen für diese Funktionen.

CalganX 7. Mai 2003 13:40

Wie Chewie geschrieben hat, brauchst du die Headerüerbsetzungen der Jedis. Sonst geht das nicht.
Du brauchst den Heder Lmshare.h

Chris

Salomon 7. Mai 2003 14:34

Ok, danke. Schau ich mir gegen Abend mal genauer an.

Salomon 7. Mai 2003 21:39

Die passenden Jedi Header habe ich jetzt, allerdings bringt mich das leider nicht weiter :(
Die Net Funktionen (Lan Manager funktionen) sind zu alt, und werden im neuen WinXP nicht mehr unterstützt. Die benötigte "SvrApi.dll" ist kein Bestandteil des Betriebssystem mehr.

Bleiben also nur noch die WNet Funktionen, mit denen ich allerdings nicht zurecht komme.
Mir ist bei den Funktionen überhauptnicht ersichtlich wie ich einzelne Rechner ansprechen an. Ein wenig Hilfe wäre nicht schlecht, bin am verzweifeln :cry:

Chewie 7. Mai 2003 23:06

Nicht ganz. Schau mal ins SDK, dann siehst du Folgendes:
Zitat:

Zitat von Windows SDK
Library: Use Netapi32.lib (Windows NT/2000/XP) or Svrapi.lib (Windows 95/98/Me)

Du brauchst also nicht die svrapi.dll, sondern die netapi32.dll. Und die hast du in deinem System32-Verzeichnis.

Salomon 8. Mai 2003 15:04

Die Jedi Header Files setzten auf die Svrapi.dll auf, und sind nicht geeignet.
Daher habe ich die NetSharEnum nun direkt implementiert. Der Code läst sich auch kompelieren, aber ich erhalte keine Freigaben zurück :?
Hast du eine Idee woran das liegen könnte? Hier der Quellcode:

Delphi-Quellcode:
const
    LM20_NNLEN = 12;
    SHPWLEN = 8;
    SHI50F_RDONLY = 1;
    SHI50F_FULL = 2;
    STYPE_DISKTREE = 0;
   
    MaxNetArrayItems=512;

type
TShareInfo50 = packed record
    shi50_netname: array[0..LM20_NNLEN] of Char;
    shi50_type: Byte;
    shi50_flags: Short;
    shi50_remark: PChar;
    shi50_path: PChar;
    shi50_rw_password: array[0..SHPWLEN] of Char;
    shi50_ro_password: array[0..SHPWLEN] of Char;
end;

type
TShareInfo0 = packed record
    shi0_netname : array[0..LM20_NNLEN] of Char;
end;

  Function NetShareEnum(const pszServer: PChar; sLevel: SmallInt;
    pbBuffer: Pointer; cbBuffer: Word; var pcEntriesRead: Word;
    var pcTotalAvail: Word): DWORD; stdcall; external 'netapi32.dll';

Alle Freigaben sollen in einer Combobox aufgelistet werden, es kommt aber nichts an???

Delphi-Quellcode:
procedure TForm3.SpeedButton2Click(Sender: TObject);
Var
ShareInfo:Array[0..MaxNetArrayItems-1] Of TShareInfo50;
EntriesRead, TotalAvial:Word;
Res:Integer;
i:Integer;

begin
FillChar(ShareInfo,SizeOf(ShareInfo),#0);
Res:=NetShareEnum(0,50,@ShareInfo,SizeOf(ShareInfo), EntriesRead,TotalAvial);

If Res = No_Error Then
For i:=0 To EntriesRead -1 Do
If Not (String(ShareInfo[i].shi50_netname)='') Then
combobox1.Items.Add(String(ShareInfo[i].shi50_netname));
end;
Ideen was falsch ist, oder warum ich keine Freigaben zurück erhaltet?

Thanx Salomon

Christian Seehase 9. Mai 2003 17:23

Moin Salomon,

Du hast Dich durchgängig an die Deklarationen für 9x/ME gehalten, zum einen was das Einbinden der Funktion, zum anderen, was die verwendete Struktur angeht.
Für XP musst Du aber die NT/2000/XP Versionen verwenden.


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

type
  NET_API_STATUS = type DWORD;

  PSHARE_INFO_0 = ^SHARE_INFO_0;
  SHARE_INFO_0 =
    packed record
      shi0_netname : PWChar;
    end;

function NetApiBufferFree(
    const Buffer : Pointer
    ) : NET_API_STATUS; stdcall; external 'netapi32.dll';

function NetShareEnum(
    const servername   : PWChar;
    const level        : DWord;
    const bufptr       : Pointer;
    const prefmaxlen   : DWord;
    const entriesread  : PDWord;
    const totalentries : PDWord;
    const resume_handle : PDWord
    ) : NET_API_STATUS; stdcall; external 'netapi32.dll';


var
  si0Work       : PSHARE_INFO_0;
  si0Save       : PSHARE_INFO_0;
  dwEntriesRead : DWORD;
  dwTotalEntries : DWORD;
  i             : DWORD;

begin
  if NetShareEnum(nil,0,@si0Work,MAX_PREFERRED_LENGTH,@dwEntriesRead,@dwTotalEntries,nil) <> Nerr_Success then exit;
  try
    si0Save := si0Work;
    for i := 1 to dwEntriesRead do
    begin
      ComboBox1.Items.Add(si0Save.shi0_netname);
      inc(si0Save);
    end;
  finally
    NetApiBufferFree(si0Work);
  end;
end;
Wichtig hierbei:
Ich verwende für die Funktionsdeklarationen immer die C-typische Variante, während die Jedis, meines Wissens, immer die Borland typische Variante nehmen (var Parameter)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz