Thema Datum  Von Nutzer Rating
Antwort
12.07.2024 13:56:19 Bernd
Solved
Blau Dialog automatisch beenden
12.07.2024 16:02:38 volti
NotSolved
12.07.2024 16:54:10 Gast69258
NotSolved
12.07.2024 16:56:25 Gast73372
NotSolved
22.07.2024 17:16:17 volti
NotSolved

Ansicht des Beitrags:
Von:
volti
Datum:
12.07.2024 16:02:38
Views:
164
Rating: Antwort:
  Ja
Thema:
Dialog automatisch beenden

Hallo Bernd,

<i>Private Const BUTTON_CAPTION = "Beenden"  bringt auch nichts.
Hat es vlt. etwas hiermit zu tun "#32770"? Hat jeder Button eine spezielle Zahl?</i>

Alle Dialogboxen haben den Klassennamen "#32770", so wie Excel den Klassennamen XLMAIn hat.
Das hat also damit nichts zu tun.

Alle Buttons (Childwindows) haben eine ID-Nummer oder sollten diese haben. Hierüber kann man sie ansprechen. 
Falls man keine ID vergeben hat, muss man den Button anders ansprechen, z.B. über den Captiontext.

Die ID eines Button kann Du Dir z.B. über ein Windowspyprogramm besorgen.
Ich habe mir mal eins gebastelt:
https://www.clever-excel-forum.de/Thread-Windows-Spy-und-Pixelfarben

Auf den ersten Blick müsste Dein Tool auch den Beenden-Button anklicken.
Du arbeitest hier ja mit FindWindowEx, das das entsprechend über den Buttontext erlaubt.
Ich kann es jetzt nicht testen, da Du nur einen Teil des Codes hier bereitstellst.

Vielleicht muss auch nur noch noch die Unterstreichungsmarkierung mit rein: "Be&enden". 
Bedeutet, dass der Button durch Drücken von Alt-E getriggert wird.

PS: Dein Code ist noch für alte Excel, ggf. mal anpassen.....

Code:
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
Private Declare PtrSafe Function FindWindowA Lib "user32" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As StringAs LongPtr
Private Declare PtrSafe Function FindWindowExA Lib "user32" ( _
        ByVal hWnd1 As LongPtr, _
        ByVal hWnd2 As LongPtr, _
        ByVal lpsz1 As String, _
        ByVal lpsz2 As StringAs LongPtr
Private Declare PtrSafe Function SendMessage Lib "user32Alias "SendMessageA" ( _
        ByVal hwnd As LongPtrByVal wMsg As Long, _
        ByVal wParam As LongPtr, lParam As AnyAs LongPtr

Private Const BM_CLICK = &HF5
Private Const GC_CLASSNAMEDIALOG = "#32770"
Private Const GC_CLASSNAMEBUTTON = "Button"
Private Const DIALOG_CAPTION = "Microsoft Office Excel"
Private Const BUTTON_CAPTION = "OK"

Public dtmNextTime As Date

Public Sub StartTimer()
  Dim lngDialogHwnd As LongPtr, lngButtonHwnd As LongPtr

  lngDialogHwnd = FindWindowA(GC_CLASSNAMEDIALOGDIALOG_CAPTION)
  If CBool(lngDialogHwnd) Then
     lngButtonHwnd = FindWindowExA(lngDialogHwnd, ByVal 0&GC_CLASSNAMEBUTTONBUTTON_CAPTION)
     If CBool(lngButtonHwnd) Then
        Call SendMessageA(lngButtonHwnd, BM_CLICK0&0&)
     End If
  End If
  dtmNextTime = Now + TimeSerial(0010)
  Application.OnTime dtmNextTime, "StartTimer"
End Sub
 

Du könntest alternativ auch über die ID gehen, der Beenden-Button müsste die ID 2 haben. Hängt aber vom Diaglog ab.
Code:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
Private Declare PtrSafe Function KillTimer Lib "user32" ( _
        ByVal hWnd As LongPtrByVal nIDEvent As LongPtrAs Long
Private Declare PtrSafe Function SetTimer Lib "user32" ( _
        ByVal hWnd As LongPtrByVal nIDEvent As LongPtr, _
        ByVal uElapse As LongByVal lpTimerFunc As LongPtrAs LongPtr
Private Declare PtrSafe Function SendDlgItemMessageA Lib "user32" ( _
        ByVal hDlg As LongPtrByVal nIDDlgItem As Long, _
        ByVal wMsg As LongByVal wParam As LongPtr, _
        ByVal lParam As LongPtrAs LongPtr
Private Declare PtrSafe Function FindWindowA Lib "user32" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As StringAs LongPtr

Dim mhTimer As LongPtr

Private Sub DlgClickProc()
' Klickt den gewünschten Button an
  Dim hDlg As LongPtr

  hDlg = FindWindowA("#32770", "SAP Meldung")   ' MsgBox-Anzeige abfangen
  If hDlg > 0 Then
     SendDlgItemMessageA hDlg, 2&HF50&0&  ' 6=ja, 2=nein/OK
     KillTimer 0&, mhTimer                      ' Timer abschalten
  End If
End Sub
 

Hier noch was zum Nachlesen, denn es geht auch mit dem Buttontext ohne FindwindowEx......
https://www.clever-excel-forum.de/Thread-Button-in-Dialogbox-automatisch-anklicken

 

Gruß aus Hessen
Karl-Heinz


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
12.07.2024 13:56:19 Bernd
Solved
Blau Dialog automatisch beenden
12.07.2024 16:02:38 volti
NotSolved
12.07.2024 16:54:10 Gast69258
NotSolved
12.07.2024 16:56:25 Gast73372
NotSolved
22.07.2024 17:16:17 volti
NotSolved