Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[Excel] Systemkreuzklick abfangen
#1
Liebe Leserin, lieber Leser,

will man verhindern, dass Excel über das Systemkreuz "X" oben rechts neben dem Caption beendet wird, kann man das neben anderen Methoden (wie z.B. eine globale Variable mit entsprechender Information setzen und abfragen usw.) auch durch die Abfrage des Systemkreuzklicks steuern.

Denkbar sind auch andere Anforderungen, bei denen man wissen muss, ob der User diese Beendigungsmöglichkeit angeklickt hat.

Hier mal ein Beispiel dazu: (Der Code kommt in DieseArbeitsmappe)

Code:

Private Declare PtrSafe Function GetWindowRect Lib "user32" ( _
        ByVal hwnd As LongPtr, lpRect As RECT) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare PtrSafe Function ScreenToClient Lib "user32" ( _
        ByVal hwnd As LongPtr, lpPoint As POINTAPI) As Long

Private Type RECT
  Left   As Long
  Top    As Long
  Right  As Long
  Bottom As Long
End Type

Private Type POINTAPI
  x As Long
  y As Long
End Type

Function CheckSystemkreuzClick() As Boolean
  Dim PT As POINTAPI, R As RECT
 
  GetCursorPos PT                               ' Mausposition holen
  ScreenToClient Application.hwnd, PT           ' Koordinaten umrechnen auf Fenster
  GetWindowRect Application.hwnd, R             ' Maße des Excelfensters holen
  If PT.x < R.Right And PT.x > (R.Right - 68) And _
     PT.y > R.Top And PT.y < R.Top + 50 Then CheckSystemkreuzClick = True
End Function

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If CheckSystemkreuzClick Then
     MsgBox "Bitte nicht über das Systemkreuz beenden!", vbExclamation
     Cancel = True: Exit Sub
  End If
End Sub

'Private Sub Workbook_BeforeClose(Cancel As Boolean)
'  Kurzform ohne Information
'  Cancel = CheckSystemkreuzClick
'End Sub

_________
viele Grüße
Karl-Heinz
[-] Folgende(r) 2 Nutzer sagen Danke an volti für diesen Beitrag:
  • o0Julia0o, Necrosonicus
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste