GetSystemMenu

機能
システムメニューのハンドル取得
Declare Function GetSystemMenu Lib "user32.dll" _
(ByVal hWnd As Long, ByVal bRevert As Long) As Long
Declare Function GetSystemMenu Lib "user32.dll" _
(ByVal hWnd As Integer, ByVal bRevert As Integer) As Integer

HMENU GetSystemMenu(
HWND hWnd,
BOOL bRevert
);
引数
hWnd

ウィンドウのハンドル
bRevert
動作方法を指定する定数
戻り値
bRevert=0のとき        システムメニューのハンドル
同、1のとき            0
bRevertの定数

現在のシステムメニューを取得するとき    0
システムメニューを元の状態に戻すとき    1
サンプル
ダウンロード(GetSystemMenu.lzh 3.70KB)

Private Sub Command1_Click()
Dim hSysMenu As Long, SysMenuCnt As Long
Dim Temp As String

'リストボックスのクリア
Me.List1.Clear

'システムメニューのハンドル取得
hSysMenu = GetSystemMenu(Me.hWnd, 0)

'システムメニューの項目数を取得
SysMenuCnt = GetMenuItemCount(hSysMenu)

'各項目のキャプションを取得
For a = 0 To SysMenuCnt - 1
    Temp = String(256, Chr(0))
    Call GetMenuString(hSysMenu, a, Temp, Len(Temp), MF_BYPOSITION)
    
    b = InStr(Temp, Chr(0))
    If b - 1 > 0 Then
        Me.List1.AddItem Mid(Temp, 1, b - 1)
    Else
        Me.List1.AddItem ""
    End If
Next
End Sub

Private Sub List1_Click() Dim ListIndex As Long Dim hSysMenu As Long, SysMenuCnt As Long Dim Temp As String, hSubMenu As Long, IDItem As Long Dim lpmii As MENUITEMINFO, rc As Long 'システムメニューのハンドル取得 hSysMenu = GetSystemMenu(Me.hWnd, 0) '現在選択されている項目の番号を取得 ListIndex = Me.List1.ListIndex If ListIndex <> -1 Then 'キャプション取得 Temp = String(256, Chr(0)) Call GetMenuString(hSysMenu, ListIndex, Temp, Len(Temp), MF_BYPOSITION) b = InStr(Temp, Chr(0)) If b - 1 > 0 Then Me.Text1.Text = Mid(Temp, 1, b - 1) Else Me.Text1.Text = "" End If 'ID取得 IDItem = GetMenuItemID(hSysMenu, ListIndex) Me.Text2.Text = IDItem '状態取得 With lpmii .cbSize = Len(lpmii) .fMask = MIIM_STATE End With Call GetMenuItemInfo(hSysMenu, ListIndex, MF_BYPOSITION, lpmii) rc = lpmii.fState Select Case rc Case 0: Temp = "選択可" Case 3: Temp = "選択不可" Case 4096: Temp = "選択可(強調表示)" End Select If Temp = "" Then Temp = "?????????" Me.Text3.Text = Temp End If End Sub