0

Officeクリップボードコレクションがオンになっているかどうかを知りたい。これは、最後の24個のクリップボードデータを保存するクリップボードペインです。Office 2007および2010では、ホームリボンのクリップボード領域を展開することで取得できます。Office2003では、作業ウィンドウ領域からクリップボードを開き、メニューからクリップボードを選択できます。

私はOfficeプラグインを持っています。

私は(IATを使用して)あらゆる種類のAPIフックを実行していますが、最も単純なソリューションを探しています。

  1. 私の最初のアイデアは、「Collect and Paste 2.0」(Spy ++で自分自身をチェックしてください)というタイトルのウィンドウを探し、さまざまなWindowsクラス(たとえば、Wordではbosa_sdm_msword)を使用することでした。ただし、ユーザーは[Officeクリップボードを表示せずに収集する]をオンにして、Officeを再起動できます。この時点で、Officeはウィンドウへのサインなしでデータを収集します。

  2. 私はレジストリキーを見ています:Software \ Microsoft \ Office \%d.0 \ Common \ General\AcbOn。これはすばらしいですが、このエントリはユーザーがOfficeを終了するまで保存されません。したがって、ユーザーは別のアプリケーションを開いたり、コレクションをオンにしたり、ウィンドウを閉じたりすることができます。

  3. Officeクリップボードは、通知領域にアイコンを作成します。質問を参照してください:通知領域アイコンのリストを取得する方法は?。残念ながら、この質問にはその答えがありませんでした。これに対する答えを知っている場合は、ここまたはその質問に返信してください(+1が2回得られます!)

私が言ったように、私はアプリケーションのプロセスの中にいて、エクスポートシンボルを持つものはすべて傍受することができますが、アプリケーションへの影響を最小限に抑えたいと思います。たとえば、送信メッセージを傍受したり、ウィンドウをサブクラス化したりすると、Officeアプリケーションのパフォーマンス(場合によっては安定性)に影響します。

Office 2003には、('ActiveClipboard')という名前のクラスのウィンドウがありますが、2007と2010では見つかりません。一方、WM_USER + 2304が表示されますが、これが何であるかはわかりません。

誰かがその道を通り抜けましたか?ヒントはありますか?

4

1 に答える 1

0

私自身の質問に答える:

私が知る限り、Office のオブジェクト モデルには、Office がクリップボードを収集しているかどうかを通知するイベントや API がありません。ただし、これら2つの方法の組み合わせは私にとってはうまくいきます:

  1. システム内のすべてのウィンドウを列挙し、次の属性 (それぞれクラス名/タイトル) を持つウィンドウを検索します。

    Word 2010: 「bosa_sdm_msword」、「収集して貼り付け 2.0」 Word 2003: 「bosa_sdm_Microsoft Office Word 11.0」、「収集して貼り付け 2.0」 Word 2007: 「bosa_sdm_Microsoft Office Word 12.0」、「収集して貼り付け 2.0」 Excel (すべて): bosa_sdm_XL9"、"収集して貼り付け 2.0" PowerPoint (すべて): "bosa_sdm_Mso96"、L"収集して貼り付け 2.0"

    このようなウィンドウが存在する場合は、Office がクリップボード データを収集していることを意味します。

  2. 検索レジストリ キー: HKCR\Software\Microsoft\Office\14.0\Common\General\AcbOn (REG_DWORD)。値 1 は、Office がデータを収集していることを示しています。

于 2013-01-09T09:41:20.380 に答える