ネットワーク・リソースの列挙
【使用する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);
}
[サンプル・ソース]