お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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