a munk@wiki
Win32API
最終更新:
amunk
-
view
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);