#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&
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved