|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"起動中のネットワークコンピュータ名表示"
みなさん、今日は。
WNetApiを使用した、起動中のネットワークコンピュータ名表示です。
ブラウザキャッシュの関係で、エクスプローラなどと同様にシャットダウン直後
のコンピュータ名は消えません。
新規のフォームに、ボタン1個とメモコンポーネントを配置します。
// ネットワークコンテナの列挙
function EnumNet(NetrStr: TStrings; lpnr: PNetResource): Boolean;
type
PArrayNetResource = ^TArrayNetResource;
TArrayNetResource = array[0..511] of TNetResource;
const
cbBuffer: DWORD = 16384; // 32 * 512
cEntries: DWORD = $FFFFFFFF;
var
dwResult, dwResultEnum: DWORD;
hEnum: THandle;
lpnrLocal: PArrayNetResource;
i, nEntries: DWORD;
begin
Result := False;
dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER, lpnr, hEnum);
if dwResult <> NO_ERROR then
begin
ShowMessage('WNetOpenEnum: ' + IntToStr(dwResult));
exit;
end;
lpnrLocal := AllocMem(cbBuffer);
try
repeat
nEntries := cEntries;
dwResultEnum := WNetEnumResource(hEnum, nEntries, lpnrLocal,
cbBuffer);
if dwResultEnum = NO_ERROR then
begin
for i:=0 to nEntries-1 do
begin
with lpnrLocal^[i] do
if ((lpRemoteName <> nil) or
(lpProvider <> nil)) then
NetrStr.Add('RemoteName:' + lpRemoteName + ', ' +
'Provider:' + lpProvider);
if Boolean(lpnrLocal^[i].dwUsage and RESOURCEUSAGE_CONTAINER)
then
EnumNet(NetrStr, @lpnrLocal^[i]);
end;
end
else
if dwResultEnum <> ERROR_NO_MORE_ITEMS then
begin
ShowMessage('WNetEnumResource: ' + IntToStr(dwResultEnum));
exit;
end;
until dwResultEnum = ERROR_NO_MORE_ITEMS;
finally
FreeMem(lpnrLocal);
dwResult := WNetCloseEnum(hEnum);
if dwResult <> NO_ERROR then
begin
ShowMessage('WNetCloseEnum: ' + IntToStr(dwResult));
end;
end;
Result := True;
end;
// コンピュータ名表示
procedure TForm1.Button1Click(Sender: TObject);
begin
with Memo1 do
begin
Lines.Clear;
if EnumNet(Lines, nil) then
Lines.Add('--- Enum end ---');
end;
end;
ヨッシー NAH03473
Original document by ヨッシー 氏 ID:(NAH03473)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|