【问题标题】:How to set path of file in Open dialog WinAPI C++如何在打开对话框 WinAPI C++ 中设置文件路径
【发布时间】:2018-01-05 00:26:26
【问题描述】:

我想知道如何在打开对话框中设置由另一个进程启动的文件路径。 我的意思是这个对话框

我需要设置文件路径。

最好的方法是什么?

当然,我总是可以使用SendInput 发送密钥,但有没有更优雅的方式来做到这一点?例如发送 WM_COMMAND 或其他什么?

谢谢

【问题讨论】:

标签: c++ windows winapi visual-c++


【解决方案1】:

你的问题只能通过黑客来解决。

最好的办法是尽可能使用MSAA/UI Automation

假设您知道“打开”对话框的 HWND,您可以walk all the child items 查找具有 ROLE_SYSTEM_COMBOBOX 角色的内容。在此项目中,您需要找到具有 ROLE_SYSTEM_TEXT 角色的可编辑(启用且可见)的内容。仅查找 ROLE_SYSTEM_TEXT 项可能会在右上角找到搜索框。

如果找不到此对象,则可能是旧样式对话框,请重新开始搜索并仅查找 ROLE_SYSTEM_TEXT。

通过比较 HWND 的 id 来验证这个检测可能是个好主意(我将在后面讨论这些)。

找到该项目后,您可以使用put_accValue() 更改文本。

还有一个CDM_SETCONTROLTEXT 消息,但您需要在进程内部才能使用它。


如果您不知道对话的 HWND 或想要对系统上所有打开的对话执行此操作,那么您需要 hook 以便知道何时有新的 HWND 候选。检测这些可能很棘手。

我知道的唯一选择是寻找具有特定 ID 的特定控件。特别是会有a ListBox with the id of lst1 和一个编辑框或具有特定ID 的组合框。

您需要进行大量测试才能做到这一点。请记住,在 Vista 和更高版本上,有两个对话框实现(IFileOpenDialogGetOpenFileName),您需要同时测试两者。 GetOpenFileName 甚至有新旧模式(旧应用程序使用模板和/或挂钩时的兼容模式)。

【讨论】:

    猜你喜欢
    • 2011-03-05
    • 2022-11-08
    • 2012-07-12
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多