AW: Schließen Kreuz
22.04.2007 14:07:00
Nepumuk
Hallo Heiko,
1. Die Funktion aus der vba332.dll benötige ich um das Handle (ein Pointer im Stackframe) der aufrufenden Prozedur zu bekommen. Damit kann ich dann den Hook auf die Msgbox setzen.
2. Versuch es mal einfach so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32.dll" ( _
ByVal hWnd As Long) As Long
Private Const GWL_STYLE = -&H10
Private Const WS_SYSMENU = &H80000
Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"
Private Const GC_CLASSNAMEMSDIALOG = "#32770"
Private Const BOX_TITLE = "Microsoft Excel"
Private XL_hWnd As Long, BOX_hWnd As Long
Public Sub Schaltfläche8_BeiKlick()
XL_hWnd = FindWindow(GC_CLASSNAMEMSEXCEL, Application.Caption)
SetTimer XL_hWnd, 0, 10, AddressOf prcTimer
If MsgBox("Text Nummer eins !!!", vbExclamation + vbYesNo, BOX_TITLE) = vbYes Then
SetTimer XL_hWnd, 0, 10, AddressOf prcTimer
MsgBox "Text Nummer zwei", vbOKOnly, BOX_TITLE
Else
SetTimer XL_hWnd, 0, 10, AddressOf prcTimer
MsgBox "Text Nummer drei !!!", vbOKOnly, BOX_TITLE
End If
End Sub
Private Sub prcTimer(ByVal hWnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Call prcKillTimer
Call prcSetWindow
End Sub
Private Sub prcKillTimer()
KillTimer XL_hWnd, 0
End Sub
Private Sub prcSetWindow()
BOX_hWnd = FindWindow(GC_CLASSNAMEMSDIALOG, BOX_TITLE)
If BOX_hWnd <> 0 Then
SetWindowLong BOX_hWnd, GWL_STYLE, _
GetWindowLong(BOX_hWnd, GWL_STYLE) And Not WS_SYSMENU
DrawMenuBar BOX_hWnd
End If
End Sub
Gruß
Nepumuk