あるコンピュータの共有リソースを列挙する
前回のネットワークリソース列挙のソースをちょっと修正してあるコンピュータのリソースを表示するサンプルが以下のコードです。このサンプルではコンピュータ名 "Borland"のリソースを表示します。
■ あるコンピュータの共有リソースを列挙する例 |
procedure TForm1.Button1Click(Sender: TObject); type {NETRESOURCE構造体} PNetResourceArray = ^TNetResourceArray; TNetResourceArray = array[0..MaxInt div SizeOf(TNetResource) - 1] of TNetResource; var hEnum : THandle; {列挙ハンドル} cEntries : integer; {要求エントリ数} BufSize : integer; {バッファサイズ(NETRESOURCEのサイズ)} ix : integer; {添え字} NetResources : PNetResourceArray; {バッファ用} lpnr : TNETRESOURCE; begin lpnr.dwScope := RESOURCE_GLOBALNET; lpnr.dwType := RESOURCETYPE_DISK; lpnr.dwDisplayType := RESOURCEDISPLAYTYPE_GENERIC; lpnr.dwUsage := RESOURCEUSAGE_CONNECTABLE; lpnr.lpLocalName := ''; lpnr.lpRemoteName := '\\Borland'; lpnr.lpComment := ''; lpnr.lpProvider := ''; {ネットワークリソースの列挙を開始する} if WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,@lpnr,hEnum) <> NO_ERROR then begin {失敗} WNetCloseEnum(hEnum); exit; end; {バッファの確保} BufSize := 50 * SizeOf(TNetResource); {十分なサイズを与えろ!} GetMem(NetResources, BufSize); cEntries := -1; {リソース情報の取得 : ここがメイン} if WNetEnumResource( hEnum,cEntries,NetResources,BufSize) <> NO_ERROR then begin {失敗} WNetCloseEnum(hEnum); FreeMem(NetResources, BufSize); exit; end; for ix := 0 to cEntries - 1 do begin {ローカル名} ListBox1.Items.Add(NetResources^[ix].lpLocalName); {リモート名} ListBox1.Items.Add(NetResources^[ix].lpRemoteName); {コメント} ListBox1.Items.Add(NetResources^[ix].lpComment); end; {列挙ハンドルの閉鎖} WNetCloseEnum(hEnum); {バッファの開放} FreeMem(NetResources, BufSize); end; |