我想知道如何在Open Dialog中设置一个由另一个进程启动的文件路径。 我的意思是这个对话框
我需要设置文件路径。
最好的方法是什么?
当然我总是可以使用SendInput
发送密钥,但还有更优雅的方法吗?例如,要发送WM_COMMAND或其他什么?
谢谢
答案 0 :(得分:0)
你所要求的只能用黑客来解决。
最好的方法是尽可能使用MSAA / UI Automation。
假设您知道Open对话框的HWND,您可以walk all the child items寻找角色为ROLE_SYSTEM_COMBOBOX的内容。在此项目中,您需要找到具有可编辑(启用且可见)的ROLE_SYSTEM_TEXT角色的内容。只需查找ROLE_SYSTEM_TEXT项目,就可以在右上角找到搜索框。
如果找不到此对象,则可能是旧样式对话框,重新启动搜索并仅查找ROLE_SYSTEM_TEXT。
通过比较HWNDs id来验证这种检测可能是一个好主意(我将在稍后讨论)。
找到该项目后,您可以使用put_accValue()
更改文字。
还有一条CDM_SETCONTROLTEXT
消息,但您需要在流程中使用它。
如果您不知道对话框的HWND或者想要对系统上的所有打开对话框执行此操作,那么您需要hook以便知道何时有新的HWND候选对象。检测这些可能很棘手。
我知道的唯一选择是使用某些ID查找某些控件。特别是a ListBox with the id of lst1
和“编辑”框或具有特定ID的组合框。
你需要做很多测试才能做到这一点。请记住,在Vista上以及后来有两个对话框实现(IFileOpenDialog
和GetOpenFileName
),您需要对它们进行测试。 GetOpenFileName
甚至具有旧模式和新模式(旧应用程序使用模板和/或挂钩时的兼容模式)。