こんにちは、taroと申します。
現在、WNetAddConnection3APIを利用してネットワ-クマシンとの接続を
行おうとしているのですがうまくいきません。
以下のソ-スで接続しようとしているのですが、接続ダイアログが
出たりでなかったりします。
lpRemoteNameを\\\\TEST\\TESTの用に共有フォルダ等まで指定すると
うまくいくのですが、WNetAddConnection3はただマシンに接続したい場合
には使えないのでしょうか?
イメ-ジ的にはエクスプロ-ラ等でドメイン外のマシンをクリックしたときと
同じにしたいのですが・・・
NETRESOURCE NetRes;
::ZeroMemory(&NetRes, sizeof(NETRESOURCE));
NetRes.dwScope = RESOURCE_GLOBALNET;
NetRes.dwType = RESOURCETYPE_ANY;
NetRes.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE;
NetRes.dwUsage = RESOURCEUSAGE_CONNECTABLE;
NetRes.lpLocalName = NULL;
NetRes.lpRemoteName = \\\\TEST;
NetRes.lpProvider = NULL;
WNetAddConnection3(GetSafeHwnd(), &NetRes, ", ",
CONNECT_UPDATE_PROFILE | CONNECT_INTERACTIVE);
外部リソースは、共有フォルダをルートとして認識します。エクスプローラでも、「ネットワー
クドライブの割り当て」は、共有フォルダに対してしかできませんよね。
エクスプローラで表示されているツリーは、普通のドライブをルートとした木構造とは別のもの
で、Shell Namespaceと言うものです。
これを辿るには、IShellFolderインタフェースを使います。
詳細は、MSDNの「Shell Programmers Guide」をどうぞ。
http://msdn.microsoft.com/library/en-
us/shellcc/platform/shell/programmersguide/shell_intro.asp
>現在、WNetAddConnection3APIを利用してネットワ-クマシンとの接続を
>行おうとしているのですがうまくいきません。
>
>以下のソ-スで接続しようとしているのですが、接続ダイアログが
>出たりでなかったりします。
>lpRemoteNameを\\\\TEST\\TESTの用に共有フォルダ等まで指定すると
>うまくいくのですが、WNetAddConnection3はただマシンに接続したい場合
>には使えないのでしょうか?
マシンに接続とは、実際どのようなことをやりたいのでしょうか?
>イメ-ジ的にはエクスプロ-ラ等でドメイン外のマシンをクリックしたときと
>同じにしたいのですが・・・
エクスプローラというならこれ?
::ShellExecute(NULL, open, _T(\\\\TEST), NULL, NULL, SW_SHOWNORMAL);
dairygoodsさん、不良PGさん、お答えありがとうございます。
>IShellFolder
これは知りませんでした、ありがとうございます、早速調べてみます。
>マシンに接続とは、実際どのようなことをやりたいのでしょうか?
というのは
(エクスプロ-ラのつもり・・・)
■マイネットワ-ク
+-- ドメイン名
+-- ドメイン名
+-- マシン名1
+-- マシン名2
でマシン2をクリックした際にユ-ザ認証ダイアログが開く事があると思いますが
同じ事を行いたいのです。
ただ、コ-ド上はマウスで選ぶのでは無くて\\TESTと入力して
認証ダイアログが開くようにしたいのです・・・
よろしくお願いします。
この内容ですと
WNetAddConnection3では、出来ませんね。
IShellFolder等を使わないと無理ですね
サンプルを作る余裕がないのでURLだけ・・
http://hp.vector.co.jp/authors/VA016117/winsdk.html
ここの「エクスプローラーを作る」辺りが参考になると思います。
不良PGさん、ありがとうございます!
早速参考にしたいと思います。
ありがとうございました
結果はまた報告します!
ありがとうございました。