GetSubMenu (user32)
Last changed: -111.91.67.118

.
Summary

C# Signature:

[DllImport("user32.dll")]
static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos);

VB Signature:

<DllImport("user32.dll")> _
Public Shared Function GetSubMenu(ByVal hMenu As IntPtr, ByVal nPos As Integer) As IntPtr
End Function

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code (VB):

Dim hwndMain as IntPtr = FindWindowEx(intptr.Zero,intptr.Zero,vbNullString,"My Window Title") 'Get the Window Handle
Dim hwndMenu As IntPtr = GetMenu(hwndMain) 'Get the MenuHandle
Dim hwndSubmenu as intptr = GetSubMenu(hwndMenu,1) 'Get the SubMenuHandle to the visible MenuItem, in this case the second one (counting from zero)
Dim intMID as Integer = GetMenuitemID(hwndSubmenu,2)) 'Get the MenuItemID of the third SubMenu under the previous Handle (counting from zero)
Sendmessage(hwndMain, WM_COMMAND, intMID,  0) 'Click the MenuItem!

Sample Code (C#):

    [DllImport("user32.dll")]
    private static extern IntPtr GetMenu(IntPtr hWnd);

    [DllImport("user32.dll")]
    private static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos);

    [DllImport("user32.dll")]
    private static extern int GetMenuItemCount(IntPtr hMenu);

    IntPtr mainMenu = GetMenu(handle);
    IntPtr fileMenu = GetSubMenu(mainMenu, 0);
    uint itemIndex = (uint) GetMenuItemCount(fileMenu);    

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
GetSubMenu on MSDN