Announcement

Collapse
No announcement yet.

tasten alt + F4 abfangen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • tasten alt + F4 abfangen

    Hallo,

    mein Chef möchte, dass man bei einer bestimmten Anwendung, das Programm mit Taste Alt + F4 <b>nicht</b> beenden kann!
    weiss jemand wie das geht?

    Gruß

    Markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hi Marcus,
    probier mal folgendes (Unit in Project aufnehmen):
    <CODE>
    unit KILL_AltF4;
    interface
    Uses
    Classes, Windows, Forms;
    Var
    FKeyHook : HHook;
    implementation
    function KeyboardHook(code: Integer; wParam: WPARAM;
    lParam: LPARAM): LRESULT; stdcall;
    Var
    KeyboardState: TKeyboardState;
    i : Integer;
    begin
    GetKeyboardState(KeyboardState);
    if (KeyboardStateToShiftState(KeyboardState) = [ssAlt]) and (wParam = VK_F4) then
    Result := 1
    else
    Result := CallNextHookEx(FKeyHook, code, wParam, lParam);
    end;
    initialization
    FKeyHook := SetWindowsHookEx(WH_KEYBOARD, KeyboardHook, 0, GetCurrentThreadId);
    finalization
    UnhookWindowsHookEx(FKeyHook);
    end.
    <CODE>
    Musst du allerdings mal austesten!
    Fran

    Comment


    • #3
      Eleganter ist fieleicht das Ereigniss OnCloseQuery zu benutzen

      Comment


      • #4
        procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
        Shift: TShiftState);
        begin
        if (Shift = [ssAlt]) and (Key = VK_F4)
        then begin
        ShowMessage('Hier nicht erlaubt');
        Key:=0;
        end;
        end

        Comment


        • #5
          hi Jay Doubleu,

          deine lösung habe ich gerade getestet, klappt nicht!
          die if abfrage klappt schon nicht!

          @Frank Reim
          deine lösung muss ich noch testen!
          habe aber gerade zuwenig zeit
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Manfred Pawelziks Lösung sollte hier die sauberste Lösung sein. Genau dafür ist das Event ja da.<p>
            Mari
            Schöne Grüße, Mario

            Comment


            • #7
              ich teste es noch bei gelegenheit!
              @Jay Doubleu
              geht doch! in meiner motorradsoftware geht es nicht!
              in einer testanwendung geht es!!
              Herzliche Grüße

              Markus Lemcke
              barrierefreies Webdesign

              Comment


              • #8
                Hallo,
                @Manfred @Mario
                ich glaub, manchmal seh ich den Wald vor lauter Bäumen nicht.
                Könnt ihr mir mal auf die Sprünge helfen, wie man im OnCloseQuery an die Info komme, dass das Schliessen mit ALT + F4 ausgelöst wurde? Der Code würde mich interessieren.
                Gruß, Fran

                Comment


                • #9
                  Hallo Frank,

                  du kannst immerhin abfragen, ob das Ereignis von deinen zulässigen Elementen ausgelöst wurde und alles andere blockieren...

                  Grüße

                  Juli

                  Comment


                  • #10
                    Hi Julia,
                    meinst du über Sender?
                    Ich hab mal ein Form erzeugt und schliesse es einmal über den Close - Button im Systemmenü, über einen eigenen Buttun und Aufruf von Close und einmal über ALT + F4. Jedesmal ist Form1 der Sender.
                    Fran

                    Comment


                    • #11
                      hi,

                      wenn es nur einen bestimmten button zum beenden gibt ... nutz einfach eine boolean-variable, die nur gesetzt wird, wenn dieser knopf gedrückt wird ...

                      und im OnCloseQuery-Event fragst du die variable ab ... simple and working (I think) ;-)

                      var
                      btnEndePressed : Boolean;

                      procedure Tfrm_Main.btnEndeClick(Sender: TObject);
                      begin
                      btnEndePressed := True
                      end;

                      procedure Tfrm_Main.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
                      begin
                      if btnEndePressed then
                      CanClose := True
                      else
                      Canclose := False;
                      end;

                      wenn generell verhindert werden soll, daß die anwendung geschlossen wird ... pack in die onclose eine passwortabfrage ... ist die falsch wird weitergelaufen, ansonsten wird geclosed ;-)

                      mfg C

                      Comment


                      • #12
                        @Cornell
                        das ursprüngliche Thema:
                        ...das Programm mit Taste Alt + F4 nicht beenden kann!
                        der Umgang mit Variablen ist mir schon klar!
                        Fran

                        Comment


                        • #13

                          @Frank

                          und ... du kannst es damit nun nicht mehr beenden ... ziel gelöst ...

                          aso der btnEnde sollte dann auch noch Close(); aufrufen ...

                          btw. daß du mit variablen umzugehen weißt, ist mir schon klar bzw. setze ich es mal eben voraus :-) ... aber aus der frage ging nichts hervor, was spezifische bedingen nennt ... Alt+F4 soll das Prog nicht beenden ... dieses ist mit meiner genannten lösung erfüllt worden ...

                          so long stranger ... seeya *blib*

                          mfg C

                          Comment


                          • #14
                            habe sowas schon programmiert und in einer eigenen unit gespeichert. soll ich's mal posten
                            If it's there and you can see it – it's REAL
                            If it's there and you can't see it – it's TRANSPARENT
                            If it's not there and you can see it – it's VIRTUAL
                            If it's not there and you can't see it – it's GONE!

                            Comment


                            • #15
                              ja, bin immer neugierig *grins
                              Herzliche Grüße

                              Markus Lemcke
                              barrierefreies Webdesign

                              Comment

                              Working...
                              X