Ich versuche, den Pfad ausgewählter Dateien und Ordner aus dem Standard-OpenFileDialog-Fenster, das von einer anderen Anwendung erstellt wurde, zu erfassen.OpenFileDialog Spy
Ich habe gesehen, dass möglich ist, diese Aufgabe mit dem Windows Explorer auszuführen:
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);
}
}
}
jedoch die SHDocVw.ShellWindows() -Methode des geöffneten Openfile Hwnd nicht zurück. Als Windows-Explorer zu Openfile sehr ähnlich ist, stelle ich mir es eine Möglichkeit ist eine Besetzung mit der Hwnd von Openfiledialog für die Shell32.IShellFolderViewDual2 Schnittstelle wie zu tun:
var view = Shell32.ShellFolderViewDual2.FromHwnd(hwnd);
Gibt es eine andere Möglichkeit?
Das Ziel ist einfach, machen Sie ein Protokoll der Dateien in Standard-OpenFileDialog-Fenstern verwendet. Workable in Windows 7, 8, 10.
Ich weiß, es scheint eine sehr sehr sehr seltsame Sache.
Edit:
Inspect.exe geben mir Hoffnung: