|
こんにちは エビス丸です。
ワークグループ名取得の件ですが、うまくいきました。
ですが、NetWkstaGetInfoは使用しませんでした。
どのような方法を使ったかといいますと、以下にソースを添付しましたが、
NETRESOURCEのlpRemoteNameに、NULLをセットすると、
所属しているワークグループ名が取得できるようです。
ただし、ドメインに参加している場合の確認を行っていません。
というか、確認するためにはどうすればいいのかを調べているところです。
確認でき次第、報告します。
以下には、単純に取得したデータをメッセージボックスに表示するサンプルです。
参考になれば幸いです。
また、間違いがあればご指摘願います。
// ネットワークリソース表示
// <プロジェクト>-<設定>-<リンク>-<オブジェクト/ライブラリ モジュール>に Mpr.lib を追加
// 実行端末は、PrintかServerオペレータ特権を持っているか、
// またはAdministratorかアカウントローカルグループのメンバーであること
void DispMachines()
{
NETRESOURCE parent; // リソース構造体
LPNETRESOURCE pnr; // 取得データのバッファ
HANDLE hEnum; // 列挙ハンドル
DWORD BufSize = 1000; // 受け取りバッファのサイズ
DWORD ResNum = 1; // 要求するエントリ数へのポインタ
ZeroMemory(&parent, sizeof(parent)); // 構造体の初期化
pnr = (LPNETRESOURCE)GlobalAlloc(GMEM_FIXED, BufSize); // バッファのメモリ確保
parent.dwScope = RESOURCE_GLOBALNET; // 範囲:ネットワークリソース
parent.dwType = RESOURCETYPE_ANY; // 種類:すべて
parent.dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN; // 表示:ドメイン
parent.dwUsage = RESOURCEUSAGE_CONTAINER; // 用途:コンテナ
parent.lpRemoteName = NULL; // 名前:NULL=グループ名を取得
グループ名=リソース名を取得
parent.lpProvider = "Microsoft Windows Network"; // プロバイダ
// 接続中のネットワークグループ名を取得
WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, &parent, &hEnum); // 取得の開始
WNetEnumResource(hEnum, &ResNum, pnr, &BufSize); // 情報の取得
MessageBox ( NULL ,pnr->lpRemoteName , "ワークグループ名" ,MB_OK);
parent.lpRemoteName = pnr->lpRemoteName; // 取得したグループ名を再設定
WNetCloseEnum(hEnum); // 一旦終了
// 所属しているグループのリソース一覧を取得
WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, &parent, &hEnum);
while(WNetEnumResource(hEnum, &ResNum, pnr, &BufSize) == NO_ERROR) { // すべて取得するまでループ
MessageBox ( NULL ,pnr->lpRemoteName ,"リソース名" ,MB_OK);
}
WNetCloseEnum(hEnum);
GlobalFree(pnr); // バッファのメモリ開放
}
|