ゴール
最初に実行したいことの最終的なビジョンから始めましょう。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
ただし、私が本当に望んでいるのは、システム上の任意のアプリケーションで(または、合理的に可能な限り多くのアプリケーションで)機能するものであり、それぞれにアプリケーション固有のソリューションを作成する必要はありません。
アイデア:最近のドキュメントフォルダ
1つのアイデア:最近のドキュメントフォルダー(および/またはその基盤となるWindows API)を何らかの形で活用して、これを支援できますか?私がここで興味を持っているのと同じ「オープンドキュメント」の概念に関する情報があるようです。これは、さまざまなアプリケーションタイプに適用されるようです。(私のマシンのRecent Documentsフォルダーの内容を見ると、MS Word、MS Excel、Eclipse、Adobe Acrobat Reader、Paint.NET、TOAD、およびメモ帳2。)
推奨されるソリューション言語
私はC#またはC ++コードのソリューションを好みますが、実装言語に関係なく、これを実行する方法についての提案を受け入れます!
Windows 7?
アップデート11/2009: Windows 7が広く利用できるようになったので、この質問に戻って質問する価値があると思いました:Windows 7は、私がやろうとしていることに役立つ新しいAPIやその他のメカニズムを提供していますか?ここで達成しますか?