none
outlookの新規メッセージ作成画面での、右クリックのメニューのカスタマイズ方法 RRS feed

  • 質問

  • こんにちは。

    Outlookの新規メッセージ作成画面で、テキストを選択して右クリックすると、
     切り取り(T)
     コピー(C)
     貼り付け(P)
     などのメニューが表示されますが、この右クリックメニューをカスタマイズ(項目の追加)を
    行いたいとおもっています。

    検索エンジンやMSDNでカスタマイズの方法を調べたのですが分からなかったですが、
    どのようにすればメニューカスタマイズができるようになるのでしょうか?

    また、Outlookだけでなく、Windos標準でインストールされているメモ帳で
    テキストを選択して右クリックしたときのメニューもカスタマイズしたいと思っています。

    目的は、選択した文字列を解析するアプリをC#で作成したいのです。
    その目的を達成するてに、右クリックのメニューに、作成したプログラムを登録し、そのプログラムに
    選択した文字列を渡したいのです。

    環境は以下の通りです。
    OS:WindowsXP
    Outlook:2007
    開発環境:VisualStudio2005
    言語:C#.NET

    よろしくおねがいいたします。


    2011年5月12日 5:50

回答

  • 無理でしょう。

    Outlookの編集画面のControlは、独自のControlですからEdit Controlとは違い独自の処理で実現しています。
    その独自の処理は公開されていないでしょうし、対応するならAddinで実現できないか検討するぐらいでしょうか。
    当然その場合は、汎用的なApplicationにはなりません。

    またOutlookのVersionによってその処理は変わってくるでしょうね。

    メモ帳はEdit Controlを利用しており、HookしてSubclassingしWM_CONTEXTMENUを捕まえて処理を行う方法が考えられますが、
    メモ帳含めApplicationが安定して動作するように配慮しなければならない点が多く、難易度は高いです。結構な知識が求められます。

    要件を見直せないか、検討されてみては如何でしょうか。


    • 編集済み kozz 2011年5月17日 13:29 copy miss
    • 回答としてマーク buruburukoinu 2011年5月24日 11:08
    2011年5月17日 12:56
  • すでに指摘されていますように、フックして無理矢理実現することになると思われます。
    その際、そのウィンドウ構成やメニュー構成に合わせた小細工を仕掛けないといけないことが予想され、対象とするアプリケーション、対象とするバージョンが多ければ多いほど、より複雑な実装が必要になります。
    正直なところ、そんなことは辞めておくべきです。

    あと、C# でフックする場合、対象のプロセスに .NET Framework がロードできなければなりません。
    仮に、対象のプロセスがすでに .NET Framework 1.1 を読み込んでいる場合は、.NET Framework 2.0 をロードできないので、無理矢理やるとしても、C#/VB.NET を選択すべきではありません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年5月17日 13:52
    モデレータ

すべての返信

  • 無理でしょう。

    Outlookの編集画面のControlは、独自のControlですからEdit Controlとは違い独自の処理で実現しています。
    その独自の処理は公開されていないでしょうし、対応するならAddinで実現できないか検討するぐらいでしょうか。
    当然その場合は、汎用的なApplicationにはなりません。

    またOutlookのVersionによってその処理は変わってくるでしょうね。

    メモ帳はEdit Controlを利用しており、HookしてSubclassingしWM_CONTEXTMENUを捕まえて処理を行う方法が考えられますが、
    メモ帳含めApplicationが安定して動作するように配慮しなければならない点が多く、難易度は高いです。結構な知識が求められます。

    要件を見直せないか、検討されてみては如何でしょうか。


    • 編集済み kozz 2011年5月17日 13:29 copy miss
    • 回答としてマーク buruburukoinu 2011年5月24日 11:08
    2011年5月17日 12:56
  • すでに指摘されていますように、フックして無理矢理実現することになると思われます。
    その際、そのウィンドウ構成やメニュー構成に合わせた小細工を仕掛けないといけないことが予想され、対象とするアプリケーション、対象とするバージョンが多ければ多いほど、より複雑な実装が必要になります。
    正直なところ、そんなことは辞めておくべきです。

    あと、C# でフックする場合、対象のプロセスに .NET Framework がロードできなければなりません。
    仮に、対象のプロセスがすでに .NET Framework 1.1 を読み込んでいる場合は、.NET Framework 2.0 をロードできないので、無理矢理やるとしても、C#/VB.NET を選択すべきではありません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年5月17日 13:52
    モデレータ
  • kozzさん

    回答ありがとうございます。

    難易度が高くて現実的ではないので、ご教示いただいたとおり、要件を見直そうと思います。

    どうもありがとうございました。

    2011年5月24日 11:06
  • Azulenさん

    回答ありがとうございます。

    難易度が高くてできそうにないので、他の方法を検討します。

    どうもありがとうございました。

    2011年5月24日 11:07