現在ユーザがどこのディレクトリを見ているか知るには?

解決


karasu  2011-01-17 10:25:00  No: 72194  IP: [192.*.*.*]

はじめまして
開発環境はVC++ 2008 SDKのみです

質問内容として

ユーザのアクティブな画面がエクスプローラーの場合パスを取得するにはどうすればいいのか?

ユーザがCドライブ直下を開いていた場合
C:
を取得したいのです

ご教授のほどよろしくお願いします

編集 削除
オショウ  2011-01-17 17:55:27  No: 72195  IP: [192.*.*.*]

OSは何でしょうか?

タスクマネージャを開けば、Explorerが起動した折のパス
情報が表示されてますので、解ると思うのですが・・・

あくまでExplorerの挙動のみとするならば、プロセス一覧
を取得し、各々のプロセス情報からExplorerだけを探して
やれば、なんとかなるような〜

以上。参考まで

編集 削除
gak  2011-01-17 17:59:12  No: 72196  IP: [192.*.*.*]

> エクスプローラーの場合パスを取得するにはどうすればいいのか?
shdocvw.dll を利用してエクスプローラに辿り着ければなんとかなるんじゃね。
と思ったけど、やっぱ何とかなりそうな感じ。

http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200609/06090045.txt
此処の過去ログにBlueさんが書いたコードがあった。これを参考(というかほぼ解答)にすれば実装可かと。

> ユーザのアクティブな画面が
IWebBrowser2::HWND でウィンドウハンドル取れるから、アクティブかどうかはコイツから判断可かと。

編集 削除
karasu  2011-01-19 10:53:23  No: 72197  IP: [192.*.*.*]

ご解答ありがとうございます

>>オショウさん
開発OSはvista Business SP2 です
使用環境にXPと7も視野に入れております(とりあえず上記環境で)

>>gakさん
参照URLから  COMを実装して任意のフォルダをエクスプローラー
で開くことには成功しました。
しかし、プログラムでフォルダを開くのではなく
すでに開かれているフォルダのパスを取得したいのです。

>>IWebBrowser2::HWND でウィンドウハンドル取れるから、アクティブかどうかはコイツから判断可かと。

調べてみたのですが使い方がわかりません・・・
ご教授のほどよろしくお願いいたします。

編集 削除
karasu  2011-01-19 13:39:55  No: 72198  IP: [192.*.*.*]

>>gakさん
見当違いな返信をしてしまい申し訳ありません。

エクスプローラーで開いているフォルダのパスを取得することは
出来ていました。

アクティブなウィンドウについてはいまだわかっていません・・・

編集 削除
gak  2011-01-19 18:15:44  No: 72199  IP: [192.*.*.*]

> アクティブなウィンドウについてはいまだわかっていません・・・
アクティブなウィンドウをどう定義するかにもよるだろうが、多くのケースに措いては
「GetForegroundWindow() で返されるウィンドウ」
として良いんではなかろうか。

この場合、

    // SHDocVw::IWebBrowser2Ptr ie;
    if (HWND(ie->HWND) == ::GetForegroundWindow()) {
        :
    }

という条件文を入れてやればイケるんじゃなイカ?

編集 削除
karasu  2011-01-21 14:55:42  No: 72200  IP: [192.*.*.*]

gakさん

ご丁寧にありがとうございます。
やりたいことは出来るようになりましたので解決に致します。

しかしバグが出るように・・・・質問タイトルとは違う件なので
新たな質問をさせて頂きます。

ご教授ありがとうございました。

編集 削除