tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 が最適でしょうね。


>  (このアプリが独自のメニュー実装になっているからか・・・)
そのアプリが、別ウィンドウに所属するメニューを、
ポップアップメニューとして表示しているとか…?

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。