• 締切済み

Excel VBA で外部アプリケーションのコンテキストメニューを操作したい

Excel の VBA を使用して、外部アプリケーションの操作を行うマクロを作成しています。 ボタンの押下や、テキストの変更などは行うことができているのですが、右クリックで表示されるコンテキストメニューにあるアイテムを選択する方法が分かりません。 WM_COMMAND がどこかに送られているのかと思ったのですが、操作対象のアプリケーションを Winspector で監視しても、WM_COMMAND を見つけることができません。Resource Hacker で ID を確認して、WM_COMMAND を送信しても反応がないようです。 右クリックを押してコンテキストメニューを表示、キーイベントで確定させる方法で誤魔化しているのですが、マクロ実行中に操作をしてしまうとうまく動作せず、少し困っています。 何かいい方法がありましたら、教えていただけないでしょうか。

みんなの回答

回答No.4

すみません、また間違ったことを書いてしまいました。 GetMenu() はウィンドウに関連付けられているメニューのメニューハンドルを取得する関数でした。 他のアプリケーションのポップアップメニューのメニューハンドルを取得する方法は見つかりませんでした。通常、TrackPopupMenu() や CreateMenu() 等の戻り値として取得するようです。

lapwing
質問者

お礼

いろいろとお調べいただいて、ありがとうございます。 GetMenu も試してはみたのですが、ポップアップメニューのハンドルを取得することはできませんでした。 コンテキストメニューが出てから、そこで初めてウィンドウが作成されているので、事前に知る手はずがないのかもしれません。 「WM_RBUTTONDOWN → WM_RBUTTONUP → FindWindow("#32768","") → カーソルキーとエンターキーを送信」の流れなので、他の作業をしてるとしょっちゅう邪魔されちゃいます。うーん。

回答No.3

ANo.1 で回答した者です。ANo.2 を見て、勘違いしていたことに気がつきました。ANo.2 の方のおっしゃる通り、コンテキストメニューの項目を選択する時、アプリケーションの親ウインドウにはメッセージは送られてこないと思います。 リソースからコンテキストメニューのメニューIDが取得できるのであれば、メニューIDからメニューハンドルを取得して(GetMenu か何かのAPIで取得できたと思います)、メニュー関係のAPIで選択できたように思います。 (何というAPIだったか今は確認できないので、また後ほど書きます)

lapwing
質問者

お礼

後にいただいた回答に書きますね。いろいろと調べていただいて、ありがとうございます。

回答No.2

メニューはおそらくTrackPopupMenu(あるいは-Ex)で表示させていると思いますが、この関数は戻り値で選択したメニューを判別することができます。 もしこの場合だと、ウィンドウハンドルには何もメッセージが来ない可能性があり、アプリケーションもメニュー選択をメッセージループで受け取っていない可能性があります。 解決策ではありませんが、情報のひとつとしてあげておきます。

lapwing
質問者

お礼

ありがとうございます。 うーん、思ったよりも難しいものですね。知る方法がないなら、どうしようもない……。右クリックでメニューを出して、キーイベントを送信する方法で安定するように処理してしまったほうがいいのかもしれません。 でも右クリック連打とかされると、誤作動しちゃうんですよね……。

回答No.1

右クリック時のコンテキストメニューの表示のさせかたはアプリケーションによって異なるかもしれませんが、WM_COMMAND ではないやり方として、WM_NOTIFY ( コントロールから親ウィンドウに送られる通知メッセージです ) を使用する方法があります。 SendMessage( hwnd, WM_NOTIFY, wParam, lParam ) の lParam は NMHDR 構造体へのポインタで、この構造体のメンバ変数 code が NM_RCLICK ( たぶん、NM_RCLICK = -5 です。) なら右クリックです。 lParam が指し示す NMHDR 構造体の続きの領域にクリックされた位置の情報とか、コントロールによってことなる情報が入っていたように思います。 詳しいことは NM_RCLICK で検索してみればわかるのではと思います。

lapwing
質問者

お礼

WM_NOTIFY で監視してみましたが、どうも該当するようなメッセージは流れていないようです。モノによってはこれに入ってくることもあるのですね。勉強になります。ありがとうございます。

関連するQ&A

  • コンテキストメニューの「このアプリケーションで開く」

    こんにちは。 コンテキストメニューの「このアプリケーションで開く」の項目について質問です。 例えば画像のファイルを選択してこの項目を見ると、画像を見ることのできるアプリケーションがたくさん表示されますが、 私の環境ではそんなアプリケーションが多すぎて選ぶのが煩雑です。 なぜかというと私はPhotoshopを持っていて、そこに含まれているドロップレットが全部このメニューに表示されるからなのです。 でもそのドロップレットやアプリケーションをを消したくはないので、 アプリケーションを消さないままメニューに表示されないようにできればいいのですが、 何かいい方法はありますでしょうか? ご存じの方は教えてください。 OSはMac OS 10.4.6です。

    • ベストアンサー
    • Mac
  • IE上でのコンテキストメニューが変

    IE上でコンテキストメニュー(右クリックしたときに表示されるメニュー)にアプリケーション固有の項目が表示されていたのが、ある日突然表示されなくなりました。アプリケーションを再インストールしても直りません。アプリケーション(例えばWebページのクリップ)は複数あり、全て同じ現象です。アプリ側ではなくIE側を疑っているのですが。。。 コンテキストメニューを制御している部分が壊れたのかもしれません。ご存じの方、対策教えて下さい。よろしくお願いします。

  • コンテクストメニューについて

    コンテクストメニューを使ってアプリケーションの切り替えをするソフトはありますが、controlキーを押さずに、画面上をクリックするだけでメニューを表示させる便利な機能を使うには、どうすればいいのでしょうか? なんらかのソフトが必要でしょうか? 知っているかたがいらっしゃったら、教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • Mac
  • コンテキストメニューの表示方法

    画面上で右クリックしても、コンテキストメニュー?が出ません、表示する方法はありませんか、ウィンドウズMEです。

  • エクセルVBA(アプリケーションイベントについて)

    いつもお世話になっています。 アプリケーションのイベントでSheetBeforeDoubleClickを使いたいのですが、マクロが終了後もともとあるシートを右クリックしたときにプルダウンメニューが表示される機能が働いてプルダウンメニューが表示されてしまいます。 このプルダウンメニューを表示させない方法が何かありましたら教えて下さい。もし方法がない場合は、ないということをお知らせいただけましたら幸甚です。 どんな回答であってもポイントは発行します。 お手数をおかけいたしますが、よろしくお願いいたします。

  • コンテクストメニューの編集

    アプリケーションをインストールすると、ウィンドウズの右クリックで表示されるコンテクストメニューに機能名が追加されることがありますが、使わないことが多いので削除したいと思います。 次の3つを削除するには、どのようにすればよいのでしょうか? ・ACDSeeで参照する ・拡張コピー(X) ・AVG Free でスキャン よろしくお願いします。

  • ExcelVBAのコンテキストメニューの順番変更

    VBAのコード入力画面で、右クリックをしたときに表示される コンテキストメニューですが、 並び順を変更できたはずなのですが忘れてしまいました。 ご存じでしたら教えて頂けませんでしょうか。 切り取り コピー 貼り付け プロパティ/メソッドの一覧 定義の一覧 ・・・ と表示されるコンテキストメニューの並び替えです。 エクセルのシート上での右クリックのコンテキストメニューではありません。

  • コンテキストメニューが整理できません(;;)

    以下の画像は画像を右クリックしたときに表示されるコンテキストメニューです。 いらないものがたくさん表示されていて不便なので整理したいのですが、 いくつかフリーソフトをつかい編集しようとしたのですが、うまく行きません。 どうすれば編集できるようになるでしょうか? アドバイスよろしくおねがいします。 (`・ω・´)

  • コンテキストメニュー?の開き方について

    初心者です。 右クリックで開くことができるメニュー(コンテキストメニューで合っているでしょうか)をキーボードで打ちたいのですが、Shift+F10で出せません。Shift+F10を押すと、「映す」が出てきます。どうしたら良いでしょうか?使っているのはWindows10です。よろしくお願いします。 ※OKWAVEより補足:「Lenovo:Windows関連」についての質問です。

  • Winzip をコンテキストメニューに追加したい

    Windows7 に Winzip 90-SR1 をインストールしました。 今まで使っていた XP では、エクスプローラーでファイル名を右クリックすると、 コンテキストメニューに winzip と表示されていました(画像参照)が、 Windows7 のエクスプローラーでは表示されません。 この画像と同じように、Windows7 でのエクスプローラーでも winzip を コンテキストメニューに表示するにはどうしたらいいのでしょうか? ネットで「コンテキストメニューに追加」で探してみましたが 適切な情報が見つかりませんでした。 ご存知のかた、教えていただけますでしょうか。 よろしくお願いします。