Win32APIを使用して、Accessの本体右上の閉じる・最小化・最大化・元に戻
すボタンと、システムメニュー(タイトルバー左端のアイコンをクリックした時
に出るメニュー)を無効化する方法を説明します。
● 準備 ●
新規の標準モジュールを用意し、以下のプロシージャを記述します。
● サンプル ●
Option Compare Database
Option Explicit
'【引数説明】
'DeleteMenuの第2引数のを変えると、使えなくなる機能が変わります。
'6-閉じる 4-最大化 3-最小化
'2-サイズ変更 1-移動 0-元のサイズに戻す
'※ 注意
' 機能を使用不可にした時に数字がシフトするので、複数の機能を使用不可
' にする場合は数字が大きい方からDeleteMenuして下さい
Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _
ByVal bRevert As Long _
) As Long
Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long _
) As Long
Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long _
) As Long
'■ 実行プロシージャ
Public Function DeleteAppMenu()
'エラートラップ
On Error GoTo Func_Err:
'閉じるを使用不可にする
DeleteMenu(GetSystemMenu(Application.hWndAccessApp, False), 6, 1024)
'サイズ変更を使用不可にする
DeleteMenu(GetSystemMenu(Application.hWndAccessApp, False), 2, 1024)
'元のサイズに戻すを使用不可にする
DeleteMenu(GetSystemMenu(Application.hWndAccessApp, False), 0, 1024)
'メニューを再描画する
DrawMenuBar(GetSystemMenu(Application.hWndAccessApp, False))
Func_Exit:
Exit Function
Func_Err:
MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
DoCmd.Quit acQuitSaveAll
Resume Func_Exit:
End Function
● 詳細 ●
サンプルでは、閉じるボタン・元に戻すボタン、システムメニューの閉じる
サイズ変更・元に戻す、の各機能を無効化します。
GetSystemMunu関数によってAccessのシステムメニューのハンドルを取得し、
DeleteMenuBar関数で実際に無効化、DrawMenuBar関数でシステムメニューを再
描画し、実際の環境に反映させています。
この関数を使用することにより、ユーザーの操作を全てカスタムメニュー経
由にさせる事などが出来るでしょう。
ちなみに、一度無効にしたボタン・機能もAccessを再起動すると復活します
ので、常時各機能を無効化するのであれば、AutoExecマクロでこの関数を実行
させる必要があります。
|