#339 | Access本体のコントロールメニューを使えなくするには? | VBA、API | |
Access本体のウィンドウ左上にあるコントロールメニューを使えなくする方法です。 次のプログラム例では、コントロールメニューのハンドルを取得して、そこからすべてのメニュー項目を1つずつ削除することによって、コントロールメニュー全体をなくしています。Accessのアイコン部分をクリックしても何も表示されなくなります。 Option Compare Database Option Explicit Public Declare Function GetSystemMenu Lib "user32" _ (ByVal hWnd As Long, ByVal bRevert As Long) As Long Public Declare Function DeleteMenu Lib "user32" _ (ByVal hMenu As Long, ByVal nPosition As Long, _ ByVal wFlags As Long) As Long Public Declare Function DrawMenuBar Lib "user32" _ (ByVal hWnd As Long) As Long Private Const MF_BYCOMMAND = &H0& 'メニュー項目の識別子 Private Const MF_BYPOSITION = &H400& 'メニュー項目の番号 Private Const SC_SIZE = &HF000 '[サイズ変更]コントロールメニュー Private Const SC_MOVE = &HF010 '[移動]コントロールメニュー Private Const SC_MINIMIZE = &HF020 '[最小化]コントロールメニュー Private Const SC_MAXIMIZE = &HF030 '[最大化]コントロールメニュー Private Const SC_CLOSE = &HF060 '[閉じる]コントロールメニュー Private Const SC_RESTORE = &HF120 '[元に戻す]コントロールメニュー Public Sub InvalidSysMenu() Dim lngMenuWnd As Long 'コントロールメニューのハンドルを取得 lngMenuWnd = GetSystemMenu(Application.hWndAccessApp, False) '[閉じる]メニューを削除 DeleteMenu lngMenuWnd, SC_CLOSE, MF_BYCOMMAND '[閉じる]メニューの上の横線を削除 DeleteMenu lngMenuWnd, 5&, MF_BYPOSITION '[元のサイズに戻す]メニューを削除 DeleteMenu lngMenuWnd, SC_RESTORE, MF_BYCOMMAND '[移動]メニューを削除 DeleteMenu lngMenuWnd, SC_MOVE, MF_BYCOMMAND '[サイズ変更]メニューを削除 DeleteMenu lngMenuWnd, SC_SIZE, MF_BYCOMMAND '[最小化]メニューを削除 DeleteMenu lngMenuWnd, SC_MINIMIZE, MF_BYCOMMAND '[最大化]メニューを削除 DeleteMenu lngMenuWnd, SC_MAXIMIZE, MF_BYCOMMAND '変更を反映させるためメニューを再描画 DrawMenuBar Application.hWndAccessApp End Sub コントロールメニューを元の状態に戻すには、次の1行を実行するだけです。 GetSystemMenu Application.hWndAccessApp, 1&
|
|||
|
Copyright © T'sWare All rights reserved |