Alle 5 Minuten Enter drücken



  • Guten Morgen,
    ich möchte gerne, dass mein Programm automatisch die Enter-Taste 'drückt'. Und das alle 5 Minuten. Den Timer zu erstellen ist kein Problem, jedoch finde ich keine geeignete Funktion, um eine Taste drücken zu lassen. Ich dachte erst an DispatchMessage(), wüßte aber nicht, wie ich das damit machen soll.
    Ich arbeite im Übrigen mit einer Dialog basierenden Anwendung.
    😉

    Schönen Gruß.
    Paul.



  • Ich würde es mal so versuchen:

    SendMessage(WM_KEYDOWN, VK_RETURN);
    

    Aber da es ein Dialog ist, wundert es mich, warum du nicht einfach OnOK aufrufst. 😕



  • Ich versuche es mal zu erklären. Ich nutze eine dll einer Firma. Diese ist voll funktionstüchtig, jedoch erscheint alle 5 Minuten eine MessageBox. Um diese nicht jedesmal mit der Entertaste zu beenden, will ich das lieber automatisch machen lasse.



  • Dann musst du aber mit FindWindow arbeiten, damit das Enter auch bei der MessageBox ankommt und nicht bei deinem Dialog.

    Da musste aber die Suche bemühen, das kann ich nicht so aus dem Kopf. 😉
    *FindWindow*



  • Ok, danke, werden ich machen. 😉
    Aber dann erst FindWindow() und dann SendMessage(), richtig?



  • Überleg mal, was passiert, wenn du es andersrum machst. 😉



  • Hab schon verstanden. 🤡
    Dann werde ich mal sehen, was ich so hinbekomme.
    Meld mich dann wieder.



  • So ich habe nun folgendes gemacht:

    LRESULT res;
    CClassB* pWnd = (CClassB*)CWnd::FindWindow(NULL,_T("Class B"));
    if (pWnd) res = pWnd->SendMessage(WM_KEYDOWN, VK_RETURN);
    

    Doch res gibt immer 0 zurück.
    Habe auch die PreTranslateFunktion in CClassB eingebaut, doch der erhält nichts. 😕
    pWnd ist aber nicht NULL.
    EDIT: Wenn ich die DefWindowProc einbinde, dann geht das mit der CClassB.
    Nun will ich aber immer ein PopUpFenster (MessagBox) unterbinden, welche wie gesagt alle 5 Minuten erscheint. Wie mache ich das? Da kann ich ja nicht die DefWindowProc irgendwo einbinden?!?



  • Anscheinend scheint es mit

    pWnd->DestroyWindow();
    

    zu funktionieren. Werde ich mal weiter testen. Falls jemand dennoch Ideen hat, wie das mit der Enter-Taste funktionieren könnte, kann er das hier ruhig schreiben. 😉



  • Versuch doch mal so!
    ich lasse einen Timer laufen der immer überprüft ob ein bestimmter Dialog geöffnet wurde! Wenn er gefunden wird, wird er geschlossen!

    void CDein_Dialog::OnTimer(UINT nIDEvent) 
    {
    	if (nIDEvent == 1)
    	{
    		HWND hWnd = NULL;
    		hWnd = ::FindWindow( NULL, "Bezeichnung der Messagebox" );
    		if( hWnd != NULL )
    		{
    		   ::SendMessage( hWnd, WM_CLOSE, 0, 0 );		
    		}
    	}	
    	CDialog::OnTimer(nIDEvent);
    }
    

    Sven



  • Danke, das funktioniert bestens.
    Hatte das vorher auch mal mit

    pWnd->OnClose();
    

    versucht, hat aber nicht geklappt. 🙂

    Gruß,
    Paul.


Anmelden zum Antworten