ShellExecuteで、エクスプローラが閉じるまで処理を待たせるには

解決


松井イチロー  2008-04-26 08:21:45  No: 68172  IP: 192.*.*.*

.NET2005 MFC です。

やりたいことは、ShellExecuteでマイドキュメントの中のディレクトリを開き、
ファイルを別なディレクトリからコピペして、エクスプローラを閉じた後で、
FindNextFileとGetFileNameで、ディレクトリの中のファイル名を取得したいのですが、

そのままコーディングすると、エクスプローラを閉じる前に、ファイル名を読み取ってしまいます。

エクスプローラを閉じるまで、ファイル名の読み込みを待たせるには、どうしたらいいでしょうか。

隠しボタンを作って、ShellExecuteをその中に置き、Sendmessegeで処理させたらどうかと思ったのですが、やはり止まっていてくれません。

アドバイスをお願いします。

編集 削除
夏みかん  2008-04-26 15:27:22  No: 68173  IP: 192.*.*.*

> ファイルを別なディレクトリからコピペして、エクスプローラを閉じた後で、
これって人間がする操作か?

> エクスプローラを閉じるまで、ファイル名の読み込みを待たせるには、どうしたらいいでしょうか。
ShellExecuteEx + WaitForSingleObject

CreateProcess + WaitForSingleObject
で待機できそうな。

http://www.sm.rim.or.jp/~shishido/cprocess.html

編集 削除
松井イチロー  2008-04-26 17:52:47  No: 68174  IP: 192.*.*.*

夏みかんさん、ありがとうこざいます。

リンクされたページに行ってみましたが、初心者で、正直、よく分かりませんでした。

「lpArgがコマンドライン」とのことですが、ここに何をいれたらいいのでしょうか。
_T("explorer.exe")ですと、ビルドは通りますが、実行すると、CreateProcessの行で、

ハンドルされていない例外が発生しました

というエラーになります。

編集 削除
そだ  2008-04-26 22:11:52  No: 68175  IP: 192.*.*.*

MSDNに反してアプリケーション名にNULL指定すると動かないですね。
プロセス立ち上げるだけなら、
  CreateProcess((LPTSTR)L"C:\\Windows\\explorer.exe",NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,
    NULL,NULL,&si,&pi);
でできます。explorer.exeは場合によっては違うところにあるかもしれませんが。
しかもWaitForSingleObjectでは立ち上がったexplorer.exeに
SYNCHRONIZE権限がないので止められません。

環境依存かもしれません。ちなみにVistaです。

編集 削除
シャノン  2008-04-27 01:10:17  No: 68176  IP: 192.*.*.*

explorerは設定しだいではプロセスが1つしか立ち上がらないようになっているので、新しいプロセスは既存のプロセスに処理を任せて即時終了してしまう場合があります。

編集 削除
松井イチロー  2008-04-27 08:22:50  No: 68177  IP: 192.*.*.*

そださん、シャノンさん、ありがとうございます。

そださんのコードで、例外が発生しなくなりました。

たいへんありがとうございますした。

編集 削除
RAPT  URL  2008-05-02 01:11:39  No: 68178  IP: 192.*.*.*

> CreateProcess((LPTSTR)L"C:\\Windows\\explorer.exe",
ちなみにこれは安全ではありません。
# なんでキャストなんてするかなー

どうせなら下記のようにすべきです。
CreateProcess( _T( "C:\\Windows\\explorer.exe" ),

編集 削除
そだ  2008-05-02 12:27:37  No: 68179  IP: 192.*.*.*

>CreateProcess( _T( "C:\\Windows\\explorer.exe" ),

コンソールのプロジェクトで試したせいか
プロジェクトの設定が悪いのか
ヘッダーが足りなかったのか
その _T()マクロはコンパイルが通らなかったんです。

キャストは夏みかんさんの参考URL元のソースを
深く吟味せずに変えたから残ってただけですたい。

申し訳ない。

編集 削除