タイトル : メニューハンドルの取得方法 投稿日 : 2013/06/01(Sat) 01:02 投稿者 : genesis
はじめまして。お世話になります。 他アプリのメニューバーのメニューハンドルを取得するよい方法が 見いだせず困っております。 そのメニューバーのウィンドウハンドルhwndmnbは、spy++等で 得られていますが、GetMenu(hwndmnb)では0が戻ってきてしまい メニューハンドルが取得できません。 今は、 ・GetSubMenu(hmenu,0)<>0 かつ ・GetMenuItemCount(hmenu)=既知のメニューバーのメニュー項目数 かつ ・GetMenuItemInfo(hmenu, i, 1, lpmii) でi番目のメニュー項目の文字列 が、既知のメニューバー中のものと一致(すべてのi s.t. {0<=i<=メニュー項目数-1}に対し) ようなhmenuを、hmenu=1,2,3,・・・と順々に調べていくという力任せな 方法をとっています。 幸いhmenuがなんとか特定できていますが、hmenuは常に一定ではなく、 またlong型の最大値まで調べることとなると特定に時間を要する可能性もあり、 よりよい方法がないか、識者の皆様のアドバイスを賜りたいと存じます。 (浅知恵ですが、プロセスとかスレッドが保有するメニューを知るような方法 が無いか、とか…) なお、spy++の調査で、以下はわかっております。 ・そのメニューバーのj番目の項目をクリックしプルダウンメニューを出して そこの項目を適当に選ぶと、WM_MENUSELECTメッセージを検知でき、 それのパラメータから、サブメニューhsubmenuが得られる。 ・このサブメニューは、hsubmenu=GetSubMenu(hmenu,j)を満たす。 ただしhsubmenuからhmenuを逆引きする術がない(しらみつぶし法しか ない…) ・上記で項目をクリックしても、WM_COMMANDメッセージが検知されない (このアプリが独自のメニュー実装になっているからか・・・) OS:WindowsXP VB:VB6 なにとぞよろしくお願いいたします。 |