タイトル : Re: メニューハンドルの取得方法 投稿日 : 2013/06/01(Sat) 21:59 投稿者 : 魔界の仮面弁士
> OS:WindowsXP ということは、権限周りの問題や、64bitアプリとの通信問題は 除外して考えてよさそうですね。 > そのメニューバーのウィンドウハンドルhwndmnbは、spy++等で > 得られていますが、GetMenu(hwndmnb)では0が戻ってきてしまい > メニューハンドルが取得できません。 Spy++ で得た HWND を GetMenu に渡している…ということでしょうか。 (取得したいのは、ポップアップメニューではないのですよね?) Option Explicit Private Declare Function GetMenu Lib "user32" (ByVal hWnd As OLE_HANDLE) As OLE_HANDLE Private Sub Command1_Click() Dim target As OLE_HANDLE target = CLng(Text1.Text) 'Spy++で調べたウィンドウハンドルを入れておく Text2.Text = CStr(GetMenu(target)) Text3.Text = CStr(Err.LastDllError) End Sub 戻り値に 0 が返却されたときに、Err.LastDllError は何を返しますか? On Error Resume Next 等で、エラーを握りつぶしており、 実際には別の場所に問題を抱えていた…ということはありませんか? > (浅知恵ですが、プロセスとかスレッドが保有するメニューを知るような方法 > が無いか、とか…) メニューはウィンドウに所属するので、本来はGetMenu が最適でしょうね。 > (このアプリが独自のメニュー実装になっているからか・・・) そのアプリが、別ウィンドウに所属するメニューを、 ポップアップメニューとして表示しているとか…? |