- 2012-2-15
- Visual C++
だいぶ古い記事
コマンドプロンプトから「Net View」と打ってネットワーク構成を確認した事がありますか?
そんな感じのプログラム。。作ってみた。。以下サンプル。
インクルードヘッダー:Winnetwk.h
リンクライブラリ :Mpr.lib
DWORD dwResultEnum = 0; //関数の戻り値
DWORD dwScope = RESOURCE_CONTEXT; //列挙のスコープ
DWORD dwType = RESOURCETYPE_ANY; //列挙したいリソースのタイプ
DWORD dwUsage = 0; //列挙したいリソースの用途
DWORD dwCount = -1; //列挙したいエントリ(できるだけ多く)
DWORD dwBufferSize = 20000; //バッファサイズ(ネットワークリソースに応じて変更すること)
HANDLE hEnum = NULL; //列挙ハンドルのバッファ
LPNETRESOURCE lpNetResource; //リソースの構造体
dwResultEnum = ::WNetOpenEnum( dwScope, //列挙のスコープ
dwType, //列挙したいリソースのタイプ
dwUsage, //列挙したいリソースの用途
NULL, //リソース格納用構造体(フラグ設定により変化 Help参照)
&hEnum); //オープン後のハンドル
if(dwResultEnum == NO_ERROR)
{
//必要バッファ確保(ヒープより割り当て)
lpNetResource = (LPNETRESOURCE) ::GlobalAlloc(GPTR, dwBufferSize);
//0で初期化(memsetでもOK)
::ZeroMemory(lpNetResource, dwBufferSize);
dwResultEnum = ::WNetEnumResource( hEnum, //オープン関数が返すハンドル
&dwCount, //In:列挙したいエントリ(-1でできるだけ多く) Out:取得したエントリの数
lpNetResource, //エントリ構造体(Help参照)
&dwBufferSize); //バッファサイズ
//エラーじゃなかったら
if(dwResultEnum == NO_ERROR)
{
for(int nLoop = 0; nLoop < (int)dwCount; nLoop++)
{
//ローカル名
printf("LocalName :%s\n",lpNetResource[nLoop].lpLocalName);
//リモート名(マシン名)
printf("RemoteNeme:%s\n",lpNetResource[nLoop].lpRemoteName);
//コメント(マイコンピュータのプロパティでセットしているもの)
printf("Comment :%s\n",lpNetResource[nLoop].lpComment);
//ネットワークプロバイダ
printf("Provider :%s\n\n",lpNetResource[nLoop].lpProvider);
}
::GlobalFree((HGLOBAL)lpNetResource); //確保したヒープメモリの開放
dwResultEnum = ::WNetCloseEnum(hEnum); //ネットワーククローズ
if(dwResultEnum != NO_ERROR)
{
printf("クローズ失敗\n");
}
}
else if (dwResultEnum != ERROR_NO_MORE_ITEMS)
{
printf("アイテムがありません\n");
}
}
else
{
printf("オープン失敗\n");
}







