如何以编程方式操作任何Windows应用程序的通用对话框?

时间:2020-03-06 14:38:45  来源:igfitidea点击:

我的最终目标是编写一个实用程序,让我可以从任何"收藏夹"的预设列表中快速选择任何对话框上的文件夹。因为我只是一个业余爱好者,而不是专业人士,所以我更喜欢使用.NET,因为这是我最了解的。我确实意识到其中一些东西可能比我在C#中可能需要的更多。

我已经看到一些应用程序可以通过添加按钮到工具栏(例如:对话框助手)或者通过在工具栏旁边的标题栏中放置额外的按钮来扩展公共对话框(特别是"另存为"和"文件打开")。最小化,最大化和/或者关闭按钮。尽管我不知道从哪里开始,但哪一种都是不错的选择。

我尝试过的一种方法是从我写到对话框中文件名文本框的应用程序中"拖动"文件夹名称,使用从Corneliu Tusnea的Hawkeye运行时对象编辑器中选取的鼠标挂钩技术突出显示该文件夹名称,然后添加通过使用WM_SETTEXT调用SendMessage来获取路径名。它(某种)有效,但感觉有点笨拙。

对此技术或者实施的任何建议将不胜感激。或者,如果有现有的实用程序已经在执行此操作,请告诉我!

更新:说完一切之后,我想我可能会拥有一个现有的实用程序。但是,我想知道是否有办法以编程方式执行此操作。

解决方案

对我来说,听起来像是对AutoHotkey的工作。

我是"专业人士"(至少我从程序中获得薪水),但我首先要看一下使用AutoHotkeys的许多经过良好测试的函数来访问Windows,而不是通过PInvoke深入研究C#/。NET和WinAPI。

AutoHotkey甚至提供一些基本的用户界面控件,并且是免费的。

这是一个与我们所要求的非常相似的AutoHotkey脚本。

对于类似这样的事情,我们可能会更加沉迷于Win32 API调用。在.Net上工作意味着需要做出很多努力。恐怕我不能为我们提供太多帮助,但是我确实记得有一本书叫做"使用Visual Basic进行子类化和挂钩"可能会有所帮助。它主要是为VB 6编写的,但我相信其中包含一些VB.Net内容。

另外,PInvoke.Net是一个包含许多pinvoke签名的Wiki,我们可以复制和粘贴这些签名可能会有所帮助。

归根结底,我们可能必须学习更多有关Windows内部运行方式(消息传递等)的信息,以实现目标。

间谍++也可能是朋友。