みなさん、おはようございます。
掲題の件なのですが、可能かどうかを教えてください。
開発環境:
WindowsXP
VB6.0SP6
VB6.0上では、以下のプログラムを作成しています。
1.ネットワーク上にある他クライアントやサーバーの接続可能な
共有フォルダを探して、ドライブに割り当てる。
2.ローカルハードディスク上の規定されたフォルダ上にあるファイルを
割り当てたドライブにコピーする。
3.コピーがすんだら、割り当てたドライブを切断して終了する。
可能かどうかを知りたいのは次です。
上記のプログラムの起動前に、あらかじめエクスプローラを立ち上げて
放置しておきます。プログラムの終了後、エクスプローラを見ると、
プログラムが割り当てたドライブが「?」マーク付きで表示されています。
(もう使えないことを示しているマークだろう。F5キーで最新の状態に
してやるとドライブは消えます)
VB側からエクスプローラを最新の状態に更新するように(F5キーを押す
ように)働きかけることは可能でしょうか。
> VB側からエクスプローラを最新の状態に更新するように
手元の WinXP 環境では、Refresh2メソッドを呼び出すことで、
マイコンピュータ / エクスプローラの内容が更新されました。
http://msdn.microsoft.com/workshop/browser/webbrowser/reference/methods/refresh2.asp
VBではWebBrowserを使用することで
使えるメソッドですよね?
エクスプローラの内容を更新するの
ですが、WebBrowserのNavigateに
マイコンピュータなどを与えてみようと
考えていますが、どうでしょうか?
> VBではWebBrowserを使用することで
> 使えるメソッドですよね?
WebBrowser でも勿論使えますが、既に起動済みの
マイコンピュータやエクスプローラにも使えますよ。
(ShellWindows を使うと、起動済みの IE や Explorer を列挙できます)
> 考えていますが、どうでしょうか?
実際に試してみた結果は、どうでしたか?
>実際に試してみた結果
どうも、だめっぽいです(ファイルを要求するみたい)ね。
ShellWindowsをつかってウィンドウを列挙するやりかたに
変えてみます。
追記
SHGetSpecialFolderLocation
あたりを使って、マイコンピュータの在り処が分かるかなと
調べてました。。。
できました。
以下のコードで実現できました。
Dim SO As Object
Dim ShWins As Object
Dim IE As Object
Set SO = CreateObject("Shell.Application")
Set ShWins = SO.Windows()
For Each IE In ShWins
If InStr(IE.LocationURL, "file:///") <> 0 Then 'ファイルを指している場合(エクスプローラと思われる)
Call IE.ExecWB(22, 0, 0, 0) 'OLECMDID_REFRESH
DoEvents
End If
Next
※アドレスがURLではなくてどこかのファイル位置を示しているものに
無差別にREFRESHを投げていますが、やりたいことはできたので
よしとしてます。
#魔界の仮面弁士さんは、他の掲示板でも活躍されているのですね。
たまたまサンプルを上記ロジックの元になるサンプルを見つけて
いただいたのですが、ご本人だとは...^^
ご助力いただき、ありがとうございました。
それから、WebBrowserは面白いですね。今回の質問とは別になりますが
これを使って何か作ってみようかなと思っています。
ツイート | ![]() |