用API可以实现菜单的单击,如:
SendMessage(WM_COMMAND,ID_FILE_OPEN)但在VB中如何实现? 比如mnuFileOpen(打开...)的单击。
因为mnuFileOpen只是VB的名称,并不是一个菜单句柄。??

解决方案 »

  1.   

    Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
      

  2.   

    Option Explicit'窗体上弄了个菜单menu111,子菜单menu222  Private Declare Function GetMenu Lib "user32.dll" (ByVal hwnd As Long) As Long
      Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
      Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      Private Declare Function GetMenuItemID Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long
      Private Declare Function GetSubMenu Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long
          
      Private Const WM_COMMAND             As Long = &H111
          
      Private Sub Command1_Click()
                    Dim h1         As Long, h2             As Long, id             As Long
                          
                    h1 = FindWindow(vbNullString, "Form1")
                    Debug.Print h1
                    h2 = GetMenu(h1)
                    h2 = GetSubMenu(h2, 0)
                                                                                           
                    id = GetMenuItemID(h2, 0)
                    SendMessage h1, WM_COMMAND, id, ByVal 0&
                          
      End Sub
        
      
    Private Sub menu222_Click()
        MsgBox "222"
    End Sub你要这样的效果?
      

  3.   

    其实楼上的误会我的意思了,这种方法我是知道的。
    我现在的问题是如何取得如上的menu222这个菜单的位置,我菜单的位置不一定就是0啊。
      

  4.   

    就像我题目止说的mnuFile(文件打开)不一定就是在第一列菜单的第一项。
      

  5.   

    找菜单有两种方式,一种是by position的,一种是by command的,你是想按by command方式吧。
      

  6.   

    那请问楼上,by command怎么取??我只知道VB中的菜单名称,只跟VB有关,在Win32中并没有任何意义和表现.我现在的意思正如你说的,就是要找菜单。
      

  7.   

    GetMenuString可以取得菜单的caption属性值,
    你遍历所有菜单,找到你要点击的菜单位置不就行了