1

ゴール

最初に実行したいことの最終的なビジョンから始めましょう。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やその他のメカニズムを提供していますか?ここで達成しますか?

4

2 に答える 2

2

アプリケーションが開いているドキュメントを指定するための必須のメカニズムはないため、これは一般的には不可能です。

于 2009-08-12T18:27:54.840 に答える
2

おそらく最善の方法は、最近のドキュメントのレジストリ キーを調べて、最新のドキュメントのリストを取得することです。このデータを操作するためのサンプル コードは、この CodeProject の記事にあります。これは次の場所に保存されます。

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs

ただし、ドキュメントが現在開いているかどうかは表示されません。多くのアプリケーションはドキュメント名をウィンドウのタイトルに入れるため、開いているすべてのアプリケーションのタイトルをチェックできる可能性がありますが、これは必須ではなく、多くのアプリケーションはそれを行いません。

于 2009-08-12T18:35:07.133 に答える