Beenden eines Prg



  • Hallo!

    Nochmal danke für den Beispielcode.

    Ich bekomm leider nach wie vor kein gültiges Handle (nur 0).
    Wenn ich z. B. "Achtung" durch den Fenstertitel des Dialogs ersetze, erhalte ich ein gültiges Handle und der Dialog wird beendet.
    Der Messagebox-Titel ergibt aber nie ein gültiges Handle. Vielleicht ist es ja doch keine Messagebox, die ich da zeitversetzt beendet möchte? 😮

    LG
    Phill



  • Hmm, also hab den Code eben getestet und bei mir funktioniert er

    Hier der ganze Code

    void CTestDlg::OnButton1() 
    {
    	// TODO: Add your control notification handler code here
    
    	SetTimer(tim, 5000, NULL);
    	MessageBox("Fehler: .......", "Achtung", MB_OK); 
    }
    
    void CTestDlg::OnTimer(UINT nIDEvent) 
    {
    	// TODO: Add your message handler code here and/or call default
    
    	if(nIDEvent == tim)
    	{
    		HWND hMessageBox = ::FindWindow(NULL, "Achtung"); 
    		::PostMessage(hMessageBox, WM_CLOSE, 0, 0); 
    	}
    
    	CDialog::OnTimer(nIDEvent);
    }
    

    Hoffe konnte dir weiterhelfen...

    Gruß
    :: NoName ::



  • Danke für deine Hilfe!

    Das Problem ist nur, dass es nicht funktioniert, wenn die Box mit z. B. AfxMessageBox() erzeugt wird. Außerdem weiß ich nicht mit welcher Funktion (wie viele es bloß gibt 😡 ), die Box, die ich zeitversetzt schließen möchte, erstellt wird.

    LG
    Phill



  • erstell doch in der fensterklasse deiner anwendung eine methode,
    die dir eine messagebox ausgibt.

    Auf die Fensterklasse haste ja immer zugriff, in der app, im fenster selbst und mit

    ((DeineApp*)AfxGetApp()->m_pMainWnd)->MachmalNeMessageBox("jo so iss es");
    

    Kannste ja deine MessageBox von überall in deinem programm aufrufen

    // CMeinFenster is ja bekanntlicherweise von CWnd (oder so) abgeleitet,
    // daher gibts nu nen zugriff auf die MessageBox von CWnd.
    // juhu sollte funzen !
    // Meine MessageBox is nun der Titel, den du mit FindWindow pollen kannest !
    void CMeinFenster::MachmalNeMssageBox(const CString& strMeldung)
    {
        MessageBox(strMeldung,"MeineMessageBox");
    }
    

    Ich für meinen Teil würde mir einen eigenen Dialog basteln, der eine messagebox "simuliert", und sich über ein einstellbares Timeout selbst terminieren kann.

    Braucht man ja nicht viel zu:

    - einen Dialog
    - ein Static für ein Icon
    - ein Static für den Haupttext
    - bis zu 3 Buttons

    einfach eine klasse, der zb denselben konstruktor besitzt wie die originalmessagebox (so mit buttons, icon, titel.....)



  • ach blödsinn.....
    ich dödel hab natürlich falsch gecastet.
    Gehört so:

    ((DeineFensterKlasse*)AfxGetApp()->m_pMainWnd)->MachmalNeMessageBox("jo so iss es");
    


  • Phill schrieb:

    Das Problem ist nur, dass es nicht funktioniert, wenn die Box mit z. B. AfxMessageBox() erzeugt wird. Außerdem weiß ich nicht mit welcher Funktion (wie viele es bloß gibt ), die Box, die ich zeitversetzt schließen möchte, erstellt wird.

    Normalerweise benutzt man nur AfxMessageBox() und MessageBox() ...

    Was genau möchtest du denn machen? Willst du eine MessageBox aus 'deinem' Programm nach wenigen Sekunden schließen oder generell alle von irgendwelchen Programmen...?

    Gruß
    :: NoName ::



  • Die Messagebox (oder was auch immer 🙄 ) kommt nach Aufruf einer DLL-Methode als Warnung. Und genau diese möchte ich zeitversetzt schließen.

    LG
    Phill



  • Phill schrieb:

    Die Messagebox (oder was auch immer ) kommt nach Aufruf einer DLL-Methode als Warnung. Und genau diese möchte ich zeitversetzt schließen.

    Und diese MessageBox wurde mit AfxMessageBox() erstellt, oder wie?

    Phill schrieb:

    Das Problem ist nur, dass es nicht funktioniert, wenn die Box mit z. B. AfxMessageBox() erzeugt wird

    Also bei mir funktioniert es trotzdem...

    Gruß
    :: NoName ::



  • Keine Ahnung, kann ja nicht in die DLL hineingucken!

    LG
    Phill



  • Aber das muss trotzdem funktionieren.
    Du musst eigentlich nur gucken wie der Title dieser MessageBox heißt, und
    sie dann mit FindWindow(NULL, "Title der MessageBox") suchen und schließen.

    Gruß
    :: NoName ::



  • Sollte das auch funktionieren, wenn die DLL z. B. in Pascal oder Delphi geschrieben wurde?

    LG
    Phill



  • Also eigentlich schon, solange der Title stimmt...

    Gruß
    :: NoName ::



  • Ich weiß zwar nicht warum, aber es funktioniert jetzt auf einmal :xmas1:

    Danke!

    LG
    Phill


Anmelden zum Antworten