Zugriff nur auf Form1 erlauben



  • Hi!

    Ich schreib gerade ein Password-Abfrage-Programm für Windows 98.

    Dieses lass ich beim Systemstart aufrufen. Mein Problem ist jetzt, dass man ja grad das Fenster ignorieren kann. (Alle Close, minimier etc. Buttons sind deaktiviert und FormStyle is auch auf fsStayOnTop) Man verschiebt es ein bisschen und kann dann dadurch auch schon ohne Passwort was machen.

    Frage:

    Wie sorg ich dafür, dass nur mein Fenster auf Tastendruck, Mausklick etc. reagiert? Und wie mach ich das dan später wieder rückgängig?

    Danke für Antworten.



  • Die anderen Fenster eventuell mit Hide verstecken ?
    Nur bei korrekter Eingabe Show.
    Oder Passworteingabe ShowModal ...


  • Mod

    Hallo

    da gibt es in der FAQ ein Beispiel zu Hooks
    vermute mal das du sowas verwenden musst

    MfG
    Klaus



  • @abcd

    Wie soll ich denn z.B Word mit Hide verstecken? Ich will nicht Fenster von meiner Anwendung blockieren sondern alle anderen Fenster (auch den Windowsdesktop, Startmenü etc.) außer mein Fenster.

    @KlausB

    Mit hooks kann man die Eingaben abfangen aber die Eingaben gehen trotzdem an ihr Originalziel. Deshalb bekommt Word zum Beispiel trotzdem ein eingetipptes 'D'. Mein Programm weis dann zwar da wurde ein 'D' eingetippt, aber an Word wirts trotzdem mitgeteilt. Oder versteh ich das falsch?



  • Ganz easy.
    Geh hin und mach 2 Forms. die gleich groß sind.
    Form1 ruft das Form2 auf.
    und das so (Form1 Ruft Form2 auf):
    Form2->ShowModal

    Wenn Form1 so groß ist wie der Desktop dann kann er das nicht schieben. Ist zwar eine dumme lösung aber die geht....



  • Und wenn noch ein anderes Programm läuft und Alt+Tab gedrückt wird? Kann mir nicht vorstellen, dass das so funktioniert...


  • Mod

    Hallo

    Strg-Alt-Entf geht trotzdem noch
    Startmenue auch
    usw...

    MfG
    Klaus



  • zu strg + alt + entf;

    einfach einen timer kreieren der regelmäßig (100 ms) nachschaut ob der taskmanager offen ist und dann schließen. Habs so schon mal gemacht.

    zu alt + tab weis ich leider nichts.



  • Hallo!

    Hab zwar auch keine schöne Lösung, aber in Google folgendes gefunden:

    unsigned long OldValue;
    
        // hide the taskbar
        HWND hTaskbarWnd;
        hTaskbarWnd = FindWindow("Shell_TrayWnd", NULL);
        ShowWindow(hTaskbarWnd, SW_HIDE);
    
        // hide the desktop
        HWND  hwnd;
        hwnd = FindWindow("ProgMan",NULL);
        hwnd = GetWindow(hwnd, GW_CHILD);
        hwnd = GetWindow(hwnd, GW_CHILD);
        ShowWindow(hwnd, SW_HIDE);
    
        // disable task switching
        SystemParametersInfo(97, true, &OldValue, 0);
    
        // hide from the task list
        Application->Title = "";
    
        // show the desktop again
        HWND  hwnd;
        hwnd = FindWindow("ProgMan",NULL);
        hwnd = GetWindow(hwnd, GW_CHILD);
        hwnd = GetWindow(hwnd, GW_CHILD);
        ShowWindow(hwnd, SW_SHOW);
    
        // show the taskbar again
        HWND hTaskbarWnd;
        hTaskbarWnd = FindWindow("Shell_TrayWnd", NULL);
        ShowWindow(hTaskbarWnd, SW_SHOW);
    
        // re-enable task switching
        SystemParametersInfo(97, false, &OldValue, 0);
    

    tschüss
    Robert



  • Danke Robert!

    Klappt wunderbar. Die Tastenkombinationen werden auch alle Deaktiviert.

    Nur noch eins:

    Wenn vor dem Ausführuen noch Programme aktive Fenster haben kann man auf diese Zugreifen. Wenn man sie dann jedoch minimiert gehts nätürlich nicht mehr. Kennt jemand nen Befehl mit dem ich alle Fenster außer meinem Minimieren kann?



  • Hallo!

    Variant oShell;
        try
        {
          oShell = CreateOleObject("Shell.Application");
        }
        catch (...)
        {
          ShowMessage("Falscher fehler");
        }
      oShell.OleFunction("MinimizeAll");
    

    Schöne Lösungen sind das aber alles nicht!

    tschüss
    Robert


Anmelden zum Antworten