AW: Minimieren/Maximieren erkennen
15.09.2015 10:13:01
Nepumuk
Hallo,
teste es erst mal in einer neuen Mappe bevor du es in deine Produktivmappe einbaust.
In Excel 2013 wird beim Wiederherstellen des Fensters immer "normal" zurückgegeben auch wenn es maximiert ist. Das war in den Vorgängerversionen nicht so, aber Microsoft hat in 2013 das Fensterhandle geändert. Dagegen kann ich nichts machen.
Wenn du aber sowieso einen Timer am laufen hast, warum baust du die Abfrage nach "Application.WindowState" nicht mit da ein?
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not Saved Then
Select Case MsgBox("Sollen Ihre Änderungen in '" & Name & _
"' gespeichert werden", vbExclamation Or vbYesNoCancel)
Case vbYes
Save
Case vbNo
Saved = True
Case vbCancel
Cancel = True
End Select
End If
If Not Cancel Then UnHookMe
End Sub
Private Sub Workbook_Open()
Call Application.OnTime(EarliestTime:=Now, Procedure:=" HookMe")
End Sub
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Option Private Module
Private Declare PtrSafe Function SetWindowsHookExA Lib "user32.dll" ( _
ByVal idHook As Long, _
ByVal lpfn As LongPtr, _
ByVal hmod As LongPtr, _
ByVal dwThreadId As Long) As LongPtr
Private Declare PtrSafe Function CallNextHookEx Lib "user32.dll" ( _
ByVal hHook As LongPtr, _
ByVal ncode As Long, _
ByVal wParam As LongPtr, _
ByRef lParam As Any) As LongPtr
Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32.dll" ( _
ByVal hHook As LongPtr) As Long
Private Declare PtrSafe Function GetWindowThreadProcessId Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByRef lpdwProcessId As Long) As Long
Private Const HCBT_MINMAX As Long = 1
Private Const WH_CBT As Long = 5
Private llngptrHookID As Long
Public Sub HookMe()
Dim lngProcessID As Long
lngProcessID = GetWindowThreadProcessId(Application.hwnd, 0&)
llngptrHookID = SetWindowsHookExA(WH_CBT, AddressOf Hook, Application.Hinstance, lngProcessID)
End Sub
Public Sub UnHookMe()
Call UnhookWindowsHookEx(llngptrHookID)
End Sub
Private Function Hook(ByVal ncode As Long, ByVal wParam As LongPtr, ByVal lParam As Long) As LongPtr
If ncode = HCBT_MINMAX Then Call WindowResize(lParam)
Hook = CallNextHookEx(llngptrHookID, ncode, wParam, ByVal lParam)
End Function
Private Sub WindowResize(ByVal lParam As Long)
Select Case lParam
Case 3: MsgBox "Maximiert"
Case 6: MsgBox "Minimiert"
Case 9: MsgBox "Normal"
Case Else: MsgBox "Ooops"
End Select
End Sub
Gruß
Nepumuk