あるコンピュータの共有リソースを列挙する
前回のネットワークリソース列挙のソースをちょっと修正してあるコンピュータのリソースを表示するサンプルが以下のコードです。このサンプルではコンピュータ名 "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;
|