- 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"); }