Net Viewのようなプログラム

  • デル株式会社
  • だいぶ古い記事

    コマンドプロンプトから「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");
    }
    

     

     

    関連記事

    ページ上部へ戻る