【发布时间】:2015-04-15 03:51:32
【问题描述】:
目标
让我从我希望首先做的事情的最终愿景开始:在 Windows 中,我希望能够使用我定义的全局键盘快捷键(例如,Ctrl+Alt+C) 将前台应用程序中打开的文档的完整路径和文件名复制到剪贴板。
这将很有用,例如,能够随后将路径和文件名粘贴到电子邮件客户端的“打开文件”对话框中,以将该文档附加到电子邮件中,而无需手动浏览到文件系统。
具体问题
现在,我对如何实现感兴趣的具体部分是:如何获取任意当前正在运行的 Windows 应用程序的当前“打开文档”的路径和文件名.(如果 任何 Windows 应用程序都无法做到这一点,那么下一个最好的办法就是让它与尽可能多的应用程序一起工作。)
显然,这不适用于某些不一定具有与本地文件系统上的文件相对应的“当前打开的文档”概念的应用程序,例如电子邮件客户端、IM 客户端或 (通常)网络浏览器。
特定应用解决方案
我知道可以编写特定于应用程序的解决方案来执行此操作。例如,下面的 MS Word VBA 子程序会将 Word 中打开文档的文件名和路径复制到剪贴板:
Dim myDataObject As DataObject
Set myDataObject = New DataObject
myDataObject.SetText ActiveDocument.FullName
myDataObject.PutInClipboard
但是,我真正想要的是适用于我系统上的任何应用程序(或者,同样适用于尽可能多的应用程序),而无需尝试为每个应用程序编写特定于应用程序的解决方案.
想法:最近的文档文件夹
一个想法:Recent Documents 文件夹(和/或其底层 Windows API)是否可以通过某种方式来帮助解决这个问题?它似乎有关于我在这里感兴趣的“打开文档”的相同概念的信息,这显然适用于各种应用程序类型。 (查看我机器上最近文档文件夹的内容,我看到其中的条目显然是为我使用各种应用程序打开的文档创建的,包括 MS Word、MS Excel、Eclipse、Adobe Acrobat Reader、Paint.NET、TOAD、和记事本2。)
首选解决方案语言
我更喜欢使用 C# 或 C++ 代码的解决方案,但我愿意接受有关如何执行此操作的任何建议,无论实现语言如何!
Windows 7?
更新 11/2009: 既然 Windows 7 已广泛使用,我认为可能值得回到这个问题并询问:Windows 7 是否提供任何新的 API 或任何其他机制,这对我在这里想要完成的工作有帮助吗?
【问题讨论】:
标签: windows language-agnostic windows-7 document