演習35 「API」 の解説 No.2
演習35 の (2)(3)(4) において、'Win32 API'関数を実際に使用する。
前ページで紹介した 《APIの参考書籍》 に、'Win32 API' の概念と
'Excel VBA' から操作する時の諸注意について、詳細な解説がされて
いるので、必読のこと。ここのコードも、書籍 の 215〜230 ページを
参考にしている。
《閉じる[x]ボタンを 無効(Gray化) にする》
'------------- [ThisWorkbook] -------------
Private Sub Workbook_Open()
UserForm2.Show
End Sub
'--------------- [Module2] ---------------
'API関数と定数の宣言
'クラスからウィンドウハンドルを取得
Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
'ウィンドウに関する情報を取得
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 Const SC_CLOSE = &HF060&
Public Const MF_BYCOMMAND = &H0&
'-------------- [UserForm2] --------------
Private Sub UserForm_Initialize()
'[x]ボタン無効(Gray化)
Dim hwnd As Long
Dim hMenu As Long
Dim rc As Long
Dim strClassName As String 'クラス名
'ユーザーフォームのクラス名を指定
strClassName = "ThunderDFrame"
'ウィンドウのハンドルを取得
hwnd = FindWindow(strClassName, Me.Caption)
'ウィンドウに関する情報を取得
hMenu = GetSystemMenu(hwnd, 0&)
'[x]ボタンを無効(Gray化)
rc = DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
'ウィンドウのメニューバーを再描画
rc = DrawMenuBar(hwnd)
End Sub
'-----------------------------------------
Private Sub CommandButton2_Click()
Unload Me
End Sub
'-----------------------------------------
API No.1 へ戻る.
API No.3 へ移る. back top