EscapePRess




Private Type POINTAPI
x As Long
y As Long
End Type

Private Type MSGTYPE
hWnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type

Private Declare Function GetInputState Lib "user32" () As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg _
As MSGTYPE, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, _
ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long

Const WM_KEYFIRST = &H100
Const WM_KEYLAST = &H108
Const PM_REMOVE = &H1

' Returns the code of the last key that has been pressed, zero otherwise


' Check whether the user pressed the escape key, and optionally displays a

' message

' box that asks him or her to confirm that the job should be canceled

'

' example:

' Do

' ' do your processing here

' If EscapePressed("Do you want to stop processing?") Then Exit Do

' Loop



Public Function EscapePressed(Optional msgText As String) As Boolean
Dim mess As MSGTYPE

If GetInputState() Then
PeekMessage mess, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE
If mess.wParam = vbKeyEscape Then
If Len(msgText) = 0 Then
' Escape was pressed, return True without showing a msgbox

EscapePressed = True
Else
' Escape was pressed, ask user to confirm

EscapePressed = (MsgBox(msgText, vbQuestion + vbYesNo) = vbYes)
End If
End If
End If

End Function










( escapepress.html )- by Paolo Puglisi - Modifica del 17/12/2023