【问题标题】:How to get opened FileDialog references in WPF/Winforms/C#?如何在 WPF/Winforms/C# 中打开 FileDialog 引用?
【发布时间】:2020-06-16 21:07:23
【问题描述】:

我正在尝试构建一个将 FileDialog 同步到特定路径的应用程序。我自己没有打开 FileDialog,我需要访问“所有当前打开的 FileDialogs”,获取对我需要的那个的引用,然后更改当前工作目录。是否有 API 可以在 Windows 中获取所有打开的文件对话框?

如果您需要更好的解释,请观看我正在尝试实现的功能的视频:https://www.youtube.com/watch?v=9T9-OtRVeUw

谢谢!

【问题讨论】:

  • 您可以使用 UI 自动化轻松做到这一点。 OpenFileDialogs 有类名#32770(实际上是所有对话框),资源管理器窗口有类名CabinetWClass,地址栏(类名ToolbarWindow32)是paneAutomation.ControlType.Pane)的子类,类名@ 987654330@。地址栏AutomationElement.Name 是当前显示的路径。参见herehere,例如,如何检测这些类的窗口何时打开。有多种形式的交互。
  • @IInspectable 谢谢你,我完全错过了那篇博文。无论如何,UI 自动化方法使用起来非常简单。但是,ShellWindows 事件,我想我从来没有使用过这些。太可惜了,我会放弃的。

标签: c# wpf windows winforms


【解决方案1】:

“是否有一个 API 可以在 Windows 中获取所有打开的文件对话框?”不,因为不仅有一个收件箱文件对话框,而且许多应用程序使用自定义实现(例如:Java、qt、Office 2016+)。

您发布的视频看起来像是在挂钩或继承最常见的对话框,并且(可能)使用自动化(COM 或窗口消息)来设置文件夹。

另外,我不太了解所需的功能。如果您打开了资源管理器窗口,请将所需文件拖动或复制/粘贴到应用程序或文件对话框中。不需要非标准的黑客攻击。

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多