Zistenie handle MsgBoxu a automatické zatvorenie   zodpovězená otázka

VB6/VBA

Zdravím všetkých.

Potrebujem radu. Mám aplikáciu, pomocou ktorej spúšťam inú (externú) aplikáciu. Ak sa zmení jedna z podmienok, moja aplikácia má zatvoriť externú aplikáciu a znova ju spustiť s inými hodnotami. Môj problém je v tom, že pri zatváraní externej aplikácie (nemám jej zdrojový kód) sa objaví message box, ktorý sa pýta na uloženie parametrov ("Uložiť zmeny?",Yes,No,Cancel). Ja potrebujem, aby užívateľ nemusel kliknúť na No, ale aby sa automaticky potvrdila voľba No a tým by sa aplikácia zatvorila. Môžete mi prosím niekto poradiť ako na to? Vopred ďakujem za radu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zjistit handle by mělo jít pomocí API funkce FindWindow, ale těžko říci, jestli to funguje i na MsgBox. Jediné, co mě napadá, je zavolat stisk klávesy N.

SendKeys "N"

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím, že to mám. Ešte musím doriešiť nejaké detaily, ale bude to fungovať. Ďakujem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pre zaujímavosť, kód pre zistenie handle MessageBoxu a jeho automatické zatvorenie

'Kód pre formulár
Private Declare Function SetTimer Lib "user32" ( _
     ByVal hwnd As Long, _
     ByVal nIDEvent As Long, _
     ByVal uElapse As Long, _
     ByVal lpTimerFunc As Long) As Long
Private Sub Command1_Click()
SetTimer Me.hwnd, NV_CLOSEMSGBOX, 5000, AddressOf TimerProc
MsgBox "Wait 5 sec!", vbOKOnly, "Close"


'Kód do modulu
Private Declare Function SetTimer Lib "user32" ( _
     ByVal hwnd As Long, _
     ByVal nIDEvent As Long, _
     ByVal uElapse As Long, _
     ByVal lpTimerFunc As Long) As Long

Private Declare Function KillTimer Lib "user32" ( _
     ByVal hwnd As Long, _
     ByVal nIDEvent As Long) As Long
     
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As Long
     
Private Declare Function SetForegroundWindow Lib "user32" ( _
     ByVal hwnd As Long) As Long

Public Const NV_CLOSEMSGBOX As Long = &H5000&

Public Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, _
ByVal idEvent As Long, ByVal dwTime As Long)
    Dim hMsgBox As Long
    KillTimer hwnd, idEvent
    If idEvent = NV_CLOSEMSGBOX Then
        hMsgBox = FindWindow("#32770", "Close")
            If hMsgBox Then
                SetForegroundWindow hMsgBox
                SendKeys "{enter}"
            End If
        End If
        
End Sub


.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback