システムメニューの属性変更 <TOP>
GetSystemMenu システムメニューのハンドル取得
GetMenuString システムメニューのラベルを取得
ModifyMenu メニューの属性を変更
DrawMenuBar メニューバーを再描画
例では、「実行」をクリック後システムメニューを見ると、「閉じる(C)」がグレー表示されているのが確認できる。
「実行」後はフォームをダブルクリックして終了させてください。
'================================================================ '= システムメニューの属性変更 '= (ModifyMenu.bas) '================================================================ #include "Windows.bi" ' システムメニューのハンドル取得 Declare Function Api_GetSystemMenu& Lib "user32" Alias "GetSystemMenu" (ByVal hWnd&, ByVal bRevert&) ' システムメニューのラベルを取得 Declare Function Api_GetMenuString& Lib "user32" Alias "GetMenuStringA" (ByVal hMenu&, ByVal uIDItem&, ByVal lpString$, ByVal nMaxCount&, ByVal uFlag&) ' メニューの属性を変更 Declare Function Api_ModifyMenu& Lib "user32" Alias "ModifyMenuA" (ByVal hMenu&, ByVal nPosition&, ByVal wFlags&, ByVal wIDNewItem&, ByVal lpString$) ' メニューバーを再描画 Declare Function Api_DrawMenuBar& Lib "user32" Alias "DrawMenuBar" (ByVal hWnd&) #define SC_CLOSE &HF060 '閉じる #define MF_GRAYED &H1 'グレー表示されて選択できない Var Shared Button1 As Object Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var MyStr As String Var hWnd As Long Var Length As Long Var Ret As Long 'バッファを確保する MyStr = String$(250, Chr$(0)) Length = Len(MyStr) 'システムメニューのハンドルを確保 hWnd = Api_GetSystemMenu(GethWnd, 0) 'システムメニューのラベルを取得 Ret = Api_GetMenuString(hWnd, SC_CLOSE, MyStr, Length, MF_GRAYED) 'メニューの属性を変更 Ret = Api_ModifyMenu(hWnd, SC_CLOSE, MF_GRAYED, 0, MyStr) 'メニューバーを再描画 Ret = Api_DrawMenuBar(GethWnd) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_DblClick edecl () Sub MainForm_DblClick() End End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End