« 寒すぎて | トップページ | 前から気になっていたこと »

2021年12月 6日 (月)

どういうこと

今日も寒さで目が覚めて、超早起きしてしまった。(笑)

日中は雲多めの曇り時々晴れ。

本当に寒い!

 

自作プログラムで、ファイルExplorerを捉えるというのをやっていて、どういうこと?ということがあった。

例えば、7個のExplorerを起動させているのに、プログラムの方で捉えることが出来たのが4個とか。

さっぱりわからん...という感じで、きっとソースに問題があるのだろう、と思って見ていた。

が、おかしくなさそう。

それなりの時間が経過して、何気にタスクマネージャーを見てみた。

詳細の方ではなく、グラフィカルな方のプロセス一覧を見てみると、これが原因か!というのがわかった。

以下は例だけれど、エクスプローラーというのが5つに分かれている。

デスクトップ画面には、Explorerが8個あるんだけれど、プログラムの方で取得出来ているのは5個。

つまり、グループ状態のものが1つとしてまとめられてしまっていて、そのグループ化されているのは、一つのプロセスとしてまとめられているようだ。

だから、どんなにソースを見直しても、原因がわからなかったわけだ。

試しに、上記のグループ化されているもの、エクスプローラー(4)をタスク終了させると、一度に全部終了してしまう。

全て起動している時の状態。

エクスプローラー(4)をタスク終了させた後の状態。

1つプロセスが消えている。

それにしてもおかしい。

Explorerを独立して動作させるように設定しているはず。

そう思って、Explorerのオプションを見てみる。

確かに、「別のプロセスでフォルダーウィンドウを開く」にチェックが入っている。

全部独立して動作するのではない??

気になったので、どういう時に、グループ化されてしまうのか検証してみた。

結論を書くと、明示的に、explorer.exeに引数として何かを渡さないと、プロセスとして独立してくれないようだ。

どういうことかと言うと、

コマンドプロンプトで起動させればわかりやすい。

「explorer.exe L:\tmp」というように、引数としてフォルダを渡すと、独立したプロセスとして起動出来る。

一方、単に「explorer.exe」として起動すると、グループ化されてしまうようだ。
「Win+E」で起動しても同様。

また、必ずしもそうではないけれど、「explorer.exe L:\tmp」のように起動させたExplorer上で、フォルダを右クリックし、「新しいウィンドウで開く」で起動させると、独立することが多いようだ。

その独立して開いたExplorerから、同様のことをすると、今度はグループ化されてしまうことが多いようだ。

必ずしもこうだ、とは言い切れず、そういう傾向にある、としか言えない。(苦笑)

こんなこと意識してExplorerを起動している人なんていないと思うけれど、今回の一件で、ちょっぴり勉強になったのである。

もし、ファイルExplorerを安定して、というか、他のファイルExplorerを巻き込みたくない場合は、explorer.exeに引数を渡して起動するようにしよう。

ちなみに、VB.NETで言えば、「System.Diagnostics.Process.GetProcesses()」でプロセスをすべて取得しても、上記のグループ化されてしまったExplorerに関しては、グループが1つのプロセスとして認識されているので、それに属している他のExplorerは取得出来ない。

そういうものも取得したいなら、Windows APIの「FindWindow()」や「EnumWindows()」のようなものを使う必要性がある。

以上、あまり需要がなさそうな情報であった。(笑)

|

« 寒すぎて | トップページ | 前から気になっていたこと »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 寒すぎて | トップページ | 前から気になっていたこと »