![]() |
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 |
Schau dir mal im
![]() |
Welche Unit muss ich denn einbinden damit ich "NetShareEnum" benutzten kann? Oder gibt es gar keine Header files?
|
Keine Ahnung, ob es da Übersetzungen gibt. Ich schau mal...
Bei meinem Delphi ist nix dabei. Aber schau mal bei den ![]() |
Wie Chewie geschrieben hat, brauchst du die Headerüerbsetzungen der Jedis. Sonst geht das nicht.
Du brauchst den Heder Lmshare.h Chris |
Ok, danke. Schau ich mir gegen Abend mal genauer an.
|
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: |
Nicht ganz. Schau mal ins SDK, dann siehst du Folgendes:
Zitat:
|
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:
Ideen was falsch ist, oder warum ich keine Freigaben zurück erhaltet?
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; Thanx Salomon |
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:
Wichtig hierbei:
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; 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 16: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