ネットワーク・リソースの列挙




【使用するAPI】

    WNetOpenEnum     : ネットワーク・リソースの列挙開始
    WNetEnumResource : ネットワーク・リソースの列挙

    これらのAPIを使用するためには、以下の Header と Library が必要です。

    Header  : "winnetwk.h"
    Library : mpr.lib

【サンプル】

#include "winnetwk.h"  //ネットワーク操作のため、追加
                       //コンパイル時、mpr.lib のリンクが必要

//ネットワーク・リソースの列挙
void CVc_WNetEnumDlg::OnButton1() 
{
    CString strBuf;
    int i;

    HANDLE pHANDLE;

    DWORD cCount = 0xFFFFFFFF;
    DWORD BufferSize;
    NETRESOURCE Buffer[300];
    
    BufferSize = sizeof(Buffer);

    //ネットワーク・リソースの列挙開始
    DWORD Ret = WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY,
                             RESOURCEUSAGE_CONNECTABLE, NULL, &pHANDLE);
    
    //ネットワーク・リソースの列挙
    strBuf.Empty();
    while(Ret == NO_ERROR){
        //ネットワーク・リソースの列挙(参考:BufferはNETRESOURCE構造体型の配列となる。)
        Ret = WNetEnumResource(pHANDLE, &cCount, Buffer, &BufferSize);

        //結果の判定
        switch(Ret){
            case NO_ERROR:
                break;
            case ERROR_NO_MORE_ITEMS:
                break;
            case ERROR_MORE_DATA:
                AfxMessageBox("ERROR_MORE_DATA");
                break;
            case ERROR_INVALID_HANDLE:
                AfxMessageBox("ERROR_INVALID_HANDLE");
                break;
            case ERROR_NO_NETWORK:
                AfxMessageBox("ERROR_NO_NETWORK");
                break;
            case ERROR_EXTENDED_ERROR:
                AfxMessageBox("ERROR_EXTENDED_ERROR");
                break;
        }

        //結果の格納
        for(i = 0; (unsigned)i < cCount; i++){
            if(strBuf.IsEmpty()){
                strBuf = Buffer[i].lpRemoteName;
            }
            else{
                strBuf += '\n';
                strBuf += Buffer[i].lpRemoteName;
            }
        }
    }

    //列挙したネットワーク・リソースを表示
    AfxMessageBox(strBuf);

    //閉じる
    Ret = WNetCloseEnum(pHANDLE);

}

[サンプル・ソース]