我想從另一個應用程序創建的標準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()方法不返回打開打開文件對話框HWND。 Windows資源管理器非常相似,打開文件對話框,我想有一些辦法做到有打開文件對話框的HWND鑄像的Shell32.IShellFolderViewDual2接口:
var view = Shell32.ShellFolderViewDual2.FromHwnd(hwnd);
有沒有什麼替代方式?
目標很簡單,就是在標準OpenFileDialog窗口中使用文件的日誌。可以在Windows 7,8,10中工作。
我知道,這似乎是一件非常非常非常奇怪的事情。
編輯:
Inspect.exe給我希望: