Я не знаю ни одного способа использования WIN32 API для захвата Восстановить / развернуть Событие . Лучший обходной путь, который я могу придумать, - это использовать Win32 API в сочетании с событием Timer формы, которая всегда открыта (главное меню или какая-то скрытая форма), и периодически опрашивать главное окно доступа, чтобы определить, развернуто ли оно в настоящий момент.
Enum WindowSize
wsMax = 1
wsMin
wsRestore
End Enum
'Functions return 1 for true and 0 for false; multiply result by -1 to use as Boolean'
Private Declare Function IsZoomed Lib "User32" (ByVal hWnd As Long) As Integer
Private Declare Function IsIconic Lib "User32" (ByVal hWnd As Long) As Integer
Function IsMaximized(hWnd As Long) As Boolean
IsMaximized = IsZoomed(hWnd) * -1
End Function
Function IsMinimized(hWnd As Long) As Boolean
IsMinimized = IsIconic(hWnd) * -1
End Function
Private Sub Form_Timer()
Static PrevWinSize As WindowSize
If IsMaximized(hWndAccessApp) Then
If PrevWinSize <> wsMax Then
'Window has been maximized since we last checked'
MsgBox "Main Access window is maximized"
PrevWinSize = wsMax
End If
ElseIf IsMinimized(hWndAccessApp) Then
If PrevWinSize <> wsMin Then
'Window has been minimized since we last checked'
MsgBox "Main Access window is minimized"
PrevWinSize = wsMin
End If
Else
If PrevWinSize <> wsRestore Then
'Window has been restored since we last checked'
MsgBox "Main Access window is restored"
PrevWinSize = wsRestore
End If
End If
End Sub
Вам необходимо установить интервал в свойстве формы TimerInterval, чтобы контролировать, как часто вам нужно опрашивать размер окна.
РЕДАКТИРОВАТЬ : Очевидно, вы захотите отслеживать предыдущее состояние главного окна, чтобы не выполнять никакой ненужной обработки. Код в опубликованном виде отражает это.