システムメニューのハンドル取得
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のとき システムメニューのハンドルbRevertの定数
同、1のとき 0
サンプル
現在のシステムメニューを取得するとき 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