※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Win32API


ネットリソースの検出

WNet系APIを用いた検出

以下の3つのAPIを用いてネットリソースの検出を行う。
WNetOpenEnum() 
WNetEnumResource()
WNetCloseEnum()
APIで使用される構造体のポインタも定義しておく。
type
  PNetResources = ^TNetResources;
  TNetResources = array [0..MaxInt div 
    sizeof(TNetResource) - 1] of TNetResource;
API用の作業領域を確保する。
 crdBufsize  := Sizeof(TNetResource) * 50;
 crdEntries  := $FFFFFFFF;
 GetMem(recNetResources, crdBufsize);
検索情報を設定する。
 with recNetResource do
 begin
   dwScope       := RESOURCE_GLOBALNET;
   dwType        := RESOURCETYPE_DISK;
   dwDisplayType := RESOURCEDISPLAYTYPE_GENERIC;
   dwUsage       := RESOURCEUSAGE_CONNECTABLE;
   lpLocalName   := '';
   lpRemoteName  := 検索するネットリソース(\\hogehoge);
   lpComment     := '';
   lpProvider    := '';
 end;
検索開始~検索終了まで。
 // ネットリソース検索開始
 if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, 
    @recNetResource, hdlEnum) <> NO_ERROR then
 begin
   WNetCloseEnum(hdlEnum);
   Exit;
 end;
 // ネットリソース検索
 if WNetEnumResource(hdlEnum, crdEntries, recNetResources, 
    crdBufsize) <> NO_ERROR then
 begin
   WNetCloseEnum(hdlEnum);
   FreeMem(recNetResources, crdBufsize);
   Exit;
 end;
 // ネットリソース検索完了
 WNetCloseEnum(hdlEnum);
ネットワーク上のコンピュータを発見した後、それらに目的のフォルダがあるかどうかを確認する処理。コンピュータを発見する事だけが目的ならこの処理はいらない。
 // 画面ステータス更新
 for i := 0 to crdEntries - 1 do
   if StrPas(recNetResources^[i].lpRemoteName)
        = '\\hogehoge\hagehage' then
     見つかった時の処理
最後は忘れず作業領域を開放しておく。
 // 作業領域開放
 FreeMem(recNetResources, crdBufsize);