トップ回答者
管理者として起動したVS2005でデバッグするとWM_DROPFILESが発生しない

質問
-
MFC VC++で開発しています。
以前WindowsXP VS-NET2002で開発していたソフトを、事情によりWindowsVista VS2005SP1(forVista)環境へ移行しました。
ところが以前は正常に動作していた、ファイルのドラッグ&ドロップが機能しなくなってしまいました。
処理内容は一般的(?)なもので、CMainFrameクラスのOnCreate()にてDragAcceptFiles()を起動し、
OnDropFiles()メッセージハンドラで制御を行うというもので、エクスプローラ等からファイルもしくは
フォルダをドラッグしてくるものです。マウスカーソルはウィンドウ内に入っても変化しているので、ドラッグ中というのは機能しているようですが、ドロップしてもOnDropFiles()が呼ばれません。
Spy++で見てみるとWM_DROPFILESが発行されていないようです。
色々調べているうちに、VS2005を起動しないで直接exeを実行(エクスプローラからダブルクリックで起動)
した場合は正常にドラッグ&ドロップできることがわかりました。いつもはVS2005を起動するときは管理者として実行していたので、今度は通常起動して検証してみました。
するとドラッグ&ドロップは正常に機能しました。なんだか釈然としません。(;_;
MicrosoftはVistaでのVS2005の起動は管理者権限を推奨していて、実際通常起動ではドキュメントエクス
プローラの表示に時間がかかったり、他にも問題がありそうだし。管理者権限では特定の機能が検証できない
というのは非常に厳しいです。皆さんはこのような現象等ありませんか?
回避策や、その他の情報があれば、是非教えてください。
回答
すべての返信
-
ちゃっぴ さん、オノデラさん、KKamegawaさん、回答ありがとうございます。
VistaのUACは多少は知っていましたが、UIPIは全く知らなかったのでとても勉強になりました。
>ドロップするソース側も「管理者として実行」すれば大丈夫です。ショートカットのプロパティで設定できるはずなので、
>デバッグ用は別途ショートカット作って回避してください。
エクスプローラのショートカットを作成し、管理者として実行してからドラッグ&ドロップしてみましたが、ダメでした。
試しに、Windows付属のメモ帳を管理者権限で起動し、ファイルのドラッグ&ドロップを行ってみましたが、
エクスプローラの権限が管理者・通常いずれの場合もできませんでした。
このことから考えると、管理者権限に昇格してしまうとメッセージが受けられない?ことになります。。。(;_;
-
エクスプローラを管理者権限でうごかすには、ウィンドウごとに別プロセスで実行するように設定を変えないとダメです。
デフォルトでは、すべてのウィンドウで一つのプロセスになっており、最初のプロセスは、ログオン時にdesktopとして作られてしまいますので。
設定は、エクスプローラをアクティブにした状態で、ALTキーを押してメニューを出し、ツール-フォルダオプションでフォルダオプションダイアログを表示、表示タブを選んで、一番下から2個目の「別プロセスでフォルダウィンドウを開く」にチェックを入れて、OKすれば完了です。
チェックを入れた後に起動するすべてのエクスプローラが独立したプロセスで実行されるようになります。
これで改めて、管理者に昇格して実験してみてください。結果が変わると思いますよ。
-
Vista において UAC とか UIPI とかこの手の制御で結構はまると思うんですが、これらは access token と扱う object の ACL を調べることによりほとんど解決できると思われます。
一応こんなの書いたんで参考にしてください。