Schliessen über Alt + F4 bzw X in der Ecke verhinden



  • Wie kann ich ein Schließen einen Programms über Alt + F4 oder das X in der Ecke verhindern?
    Es soll aber über einen schließen-Button schließbar sein.



  • Du kannst u.A ein Fenster ohne "X" erstellen oder in der MessageQueue die entsprechende Message (WM_CLOSE???) so bearbeiten, wie du es möchtest.



  • Wenn ich das X wegmache kann ich trotzdem in der Taskleiste mit einem rechtsklick auf das Programm und dann auf schliessen klicken. Außerdem funktioniert Alt + F4 immernoch.

    Kann mir jemand MessageQueue erklären (am besten mit code)?



  • Bocky< schrieb:
    Wie kann ich ein Schließen einen Programms über Alt + F4 oder das X in der Ecke verhindern?
    Es soll aber über einen schließen-Button schließbar sein.

    WM_CLOSE abfangen.

    EDIT: Achja, ggf. noch WM_SYSCOMMAND mit wParam auf SC_CLOSE prüfen. Das kommt bei nem Klick auf 'schließen' in der Taskleiste.



  • Mit welcher Funktion bzw. wie kann ich das denn abfangen?
    Hab in anderen Posts was von KeyboardProc gelesen, versteh das aber net.
    Kann mir jemand nen Code dafür sagen, der einfach Alt + F4 abfängt und das von der Taskleiste auch?



  • Falls es um ein eigenes Programm geht :

    // schliessen verhindern (in WndProc)
    ...
     case WM_SYSCOMMAND : {
      if ( wParam == SC_CLOSE ) { return 0; }
      break;
     }
    ...
    

    Falls die SysMenuItems stören, dann lasse sie einfach verschwinden :

    // SysMenuItems verschwinden lassen (in WinMain, nach CreateWindow ())
     HMENU sysmenu = 
     GetSystemMenu   (hWnd,false);                    // hWnd vom Hauptfenster
     DeleteMenu      (sysmenu,0x0000,  MF_BYCOMMAND); // "Separator", id=0, ev. nachprüfen !
     DeleteMenu      (sysmenu,SC_CLOSE,MF_BYCOMMAND); // "schliessen"
    

    WM_CLOSE darfst Du nicht abfangen weil sich das Programm sonst nicht mehr beenden lässt.



  • merker schrieb:

    WM_CLOSE darfst Du nicht abfangen weil sich das Programm sonst nicht mehr beenden lässt.

    lol, klar kann er die abfangen, es kommt ganz darauf an, was er damit macht. Er will ja sein Programm in bestimmten Situationen beenden (und in bestimmten eben nicht).



  • 1. die systemitemmenüs verschwinden nicht (das handle hab ich mir so geholt:

    HANDLE hWnd;
    DuplicateHandle(GetCurrentProcess(),GetCurrentThread(),GetCurrentProcess(),&hWnd,0,FALSE,DUPLICATE_SAME_ACCESS);
    

    )
    2. Was bedeutet bei dem schliessen mit Alt + F4 verhindern das "in WinProc"
    3. Warum steht dort eine case-anweisung mitten im Raum? Also was muss bei dem switch rein, welches drumherum gehört?


Anmelden zum Antworten