SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.10<<123456789101112131415161718192021222324252627282930>>2017.12
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

以前「タイトルバーの閉じるボタンを無効に」という記事を書いたが、ワークブックを閉じるときに元に戻したい旨のコメントがあったので、ちょっとやってみることにする。

前回の方法では、「閉じる」を削除してしまうので、元に戻すと言うのは難しい。

で、「閉じる」をグレー表示にしてみたが、うまくグレー表示にならない。
いろいろと調べていると、こちらを発見。参考にした。結局IDをSC_CLOSEから別のものに変えてしまうわけだ。

Private Declare Function FindWindow _
Lib "user32" Alias "FindWindowA" _
(ByVal classname As Any, ByVal winname As Any) As Long
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd&, ByVal bRevert&) As Long
Private Declare Function DeleteMenu Lib "user32" _
(ByVal hMenu&, ByVal nPos&, ByVal wFlag&) As Long
Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hwnd&) As Long

Private Declare Function GetMenuItemInfo Lib "user32.dll" _
Alias "GetMenuItemInfoA" _
(ByVal hMenu As Long, ByVal uItem As Long, _
ByVal fByPosition As Long, lpmii As MENUITEMINFO) As Long

Private Declare Function SetMenuItemInfo _
Lib "user32" Alias "SetMenuItemInfoA" _
(ByVal hMenu As Long, ByVal un As Long, _
ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long

Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnChecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type

Const SC_CLOSE = &HF060&
Const MF_BYCOMMAND = &H0&

Const MIIM_STATE = &H1&
Const MIIM_ID = &H2&

Const MFS_GRAYED = &H3&

Const SC_CLOSE_ALT = &HFF60&


Dim item As MENUITEMINFO

Private Sub Workbook_Open()
'閉じるを無効にする
hwnd& = FindWindow("XLMAIN", 0&)
If hwnd& <> 0 Then
hMenu& = GetSystemMenu(hwnd&, 0&)

item.cbSize = Len(item)
item.dwTypeData = String(80, 0)
item.cch = Len(item.dwTypeData)
item.fMask = MIIM_STATE
item.wID = SC_CLOSE
GetMenuItemInfo hMenu, item.wID, False, item

item.fMask = MIIM_ID
item.wID = SC_CLOSE_ALT
SetMenuItemInfo hMenu, SC_CLOSE, False, item

item.fMask = MIIM_STATE
item.fState = item.fState Or MFS_GRAYED
SetMenuItemInfo hMenu, item.wID, False, item

DrawMenuBar hwnd&
End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'閉じるを無効にする
hwnd& = FindWindow("XLMAIN", 0&)
If hwnd& <> 0 Then
hMenu& = GetSystemMenu(hwnd&, 0&)
item.fMask = MIIM_STATE
item.fState = item.fState - MFS_GRAYED
SetMenuItemInfo hMenu, item.wID, False, item

item.fMask = MIIM_ID
item.wID = SC_CLOSE
SetMenuItemInfo hMenu, SC_CLOSE_ALT, False, item

DrawMenuBar hwnd&
End If
End Sub



振り返るIDを &HFF60 としているが、使ってなければ何でも良い。

テーマ:エクセル - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。