別のアプリケーションで作成された標準のOpenFileDialogウィンドウから、選択したファイルとフォルダのパスを取得しようとしています。OpenFileDialog Spy
私はそれがWindowsエクスプローラでこのタスクを実行することが可能である見てきました:
IntPtr handle = GetOpenFileDialogHwnd();
ArrayList selected = new ArrayList();
var shell = new Shell32.Shell();
foreach(SHDocVw.InternetExplorer window in shell.Windows())
{
if (window.HWND == (int)handle)
{
Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)window.Document).SelectedItems();
foreach(Shell32.FolderItem item in items)
{
selected.Add(item.Path);
}
}
}
しかし、SHDocVw.ShellWindows()メソッドは、openFileDialog開かれたHWNDを返しません。
var view = Shell32.ShellFolderViewDual2.FromHwnd(hwnd);
任意の別の方法があります:WindowsエクスプローラはOpenFileDialogに非常に似ているとして、私のようなShell32.IShellFolderViewDual2インターフェイスのためにOpenFileDialogのHWNDを持つキャストを行うにはいくつかの方法があります想像しますか?
目的は簡単です。標準のOpenFileDialogウィンドウで使用されるファイルのログを作成します。 Windows 7,8,10で動作可能です。
私は知っている、非常に非常に奇妙なことです。
編集:
Inspect.exe私に希望を与える:それはShellWindowsリストに表示されませんので、ファイルを開くダイアログを