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

时间:2008-09-24 06:33:57

标签: .net filedialog

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

我已经看到一些应用程序能够通过向工具栏添加按钮(例如:Dialog Box Assistant)或者通过添加额外的按钮来扩展公共对话框(特别是对于另存为...和文件打开)最小化,最大化和/或关闭按钮旁边的标题栏。虽然我没有最模糊的想法从哪里开始,但两者都是不错的选择。

我尝试过的一种方法是将文件夹名称从我写入的应用程序“拖动”到对话框中的文件名文本框,使用我从Corneliu Tusnea的Hawkeye Runtime Object Editor中拾取的鼠标钩技术突出显示它,然后通过使用WM_SETTEXT对SendMessage进行pinvoking来预先添加路径名。它(有点)有效,但感觉有点笨拙。

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

更新:完成所有操作后,我想我可能会使用现有的实用工具。但是,我想知道是否是一种以编程方式执行此操作的方法。

2 个答案:

答案 0 :(得分:5)

听起来像AutoHotkey给我的工作。

我是“专业人士”(至少我得到了程序付费),但我首先要看看使用AutoHotkeys的许多经过良好测试的功能来访问窗口,而不是深入研究C#/ .NET,最喜欢WinAPI的PInvoke。

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

这是AutoHotkey script,与你要求的非常相似。

答案 1 :(得分:1)

对于类似这样的事情,你可能会沉迷于Win32 API调用。在.Net工作意味着要制造很多东西。我担心我无法帮助你,但我确实记得有一本名为" Subclassing and Hooking with Visual Basic"的书可能有所帮助。它主要是为VB 6编写的,但我相信它有一些VB.Net的东西。

此外, PInvoke.Net 是一个包含许多pinvoke签名的wiki,您可以复制和粘贴这些签名可能有所帮助。

当涉及到它时,您可能需要了解更多关于Windows如何在内部运行(消息传递等)以实现您的目标。

间谍++也可能是你的朋友。