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 ...
-
Hallo
da gibt es in der FAQ ein Beispiel zu Hooks
vermute mal das du sowas verwenden musstMfG
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.
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->ShowModalWenn 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...
-
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