【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.19347

ワークグループ名を取得する
投稿者---エビス丸(2005/01/19 20:11:44)


こんばんは お世話になっております、エビス丸です。
本日もよろしくお願いいたします。

現在、win2k、VC++6.0 SDK にて、開発中です。
ネットワークリソースの一覧を取得したいので、以下のようなソースを作成しました。
# 正確にはサンプルをまんまパクリました。
# 参照URL → http://nienie.com/~masapico/api_WNetOpenEnum.html

問題は、リソースを取得する際に NETRESOURCE構造体のlpRemoteNameに、
ドメイン名かワークグループ名を指定するのですが、
これをハードコードせずに、OSから取得して指定したいのです。
しかし取得するための関数がわからず、先に進めなくなっています。
どなたかご存知ありませんでしょうか。
是非ご教授ください。よろしくお願いします。

以下のソースの、
 parent.lpRemoteName = "XXXXX";
  ↑に指定するワークグループ名を動的に取得したい、ということです。

void DispMachines()
{
  NETRESOURCE parent;
  LPNETRESOURCE pnr;
  HANDLE hEnum;
  DWORD BufSize;
  DWORD ResNum;

  ZeroMemory(&parent, sizeof(parent));
  pnr = (LPNETRESOURCE)GlobalAlloc(GMEM_FIXED, 1000);

  parent.dwScope = RESOURCE_GLOBALNET;
  parent.dwType = RESOURCETYPE_ANY;
  parent.dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN;
  parent.dwUsage = RESOURCEUSAGE_CONTAINER;
  parent.lpRemoteName = "XXXXX";
  parent.lpProvider = "Microsoft Windows Network";

  WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, &parent, &hEnum);

  while(BufSize = 1000, ResNum = 1, 
        WNetEnumResource(hEnum, &ResNum, pnr, &BufSize) == NO_ERROR) {
    /* 一覧を表示する処理 */
  }

  WNetCloseEnum(hEnum);
  GlobalFree(pnr);
}

# なんだか解りづらい質問だな…うむむ(@_@;)



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ワークグループ名を取得する 19348 エビス丸 2005/01/19 23:09:11


No.19348

Re:ワークグループ名を取得する
投稿者---エビス丸(2005/01/19 23:09:11)


自己レスです。

上記質問についてですが、NetWkstaGetInfo関数にて実現するようです。
今日はもう遅いので、結果のコードは明日アップさせていただきます。

# 質問の文言が礼に欠けるもののような気がします。
# 気分を害された方はおられませんでしょうか。
# お詫びします。申し訳ありませんでした。


この投稿にコメントする

削除パスワード

No.19358

Re:ワークグループ名を取得する
投稿者---エビス丸(2005/01/20 14:09:50)


こんにちは エビス丸です。
ワークグループ名取得の件ですが、うまくいきました。
ですが、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);  // バッファのメモリ開放
}



この投稿にコメントする

削除パスワード

No.19359

ワークグループ名orドメイン名、およびネットワークリソース一覧を取得する
投稿者---エビス丸(2005/01/20 17:16:03)


こんばんは エビス丸です。
ドメインに参加している場合においても、上記のソースのままで可能です。


この投稿にコメントする

削除パスワード

No.19361

Re:ワークグループ名orドメイン名、およびネットワークリソース一覧を取得する
投稿者---kolona(2005/01/20 17:35:48)


 ネットワークアプリはまだ勉強中ですが、
参考にさせて頂きます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧