Bukker Geschrieben 10. März 2005 Teilen Geschrieben 10. März 2005 Hallo, ich bin ziemlich neu auf dem Gebiet des Builders, allerdings schon weit gekommen mit meinem Programm: Und zwar hab ich eine Passwortabfrage erstellt, der Gedanke dahinter ist, dass ich das Programm (wenn es fertig ist) öffnen will, und der PC dadurch gesperrt ist. Das Programm funktioniert soweit auch schon, nur kann man es deaktivieren, sprich, am Desktop weiter klicken. Mein Prob ist nun also, wie bekomme ich das Programm immer im Vordergrund gehalten und wie kann ich die Tasten ESC, Strg, ALT, Entf sperren? Wäre für Codes SEHR dankbar. Ich weiss das die nötigen Befehle OnKeyDown, OnKeyUp, OnKeyPress sind, soweit hab ich die Hilfe von Borland verstanden, mehr aber auch nicht wirklich. In C++ bin ich, was die "Basics" angeht, soweit fit (Funktionen, Klassen,...) Danke schonmal Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Manfred.Becker Geschrieben 11. März 2005 Teilen Geschrieben 11. März 2005 Hi Bukker, also das mit dem Programm immer im Vordergrund halten ist kein Problem. dazu gibts die Eigenschaft: MainForm->FormStyle = fsStayOnTop; Allerdings wirst du mit deinem Programm nicht die Kontrolle über das Betriebsystem übernehmen können! Wenn du also den Computer sperren willst, schreib doch einen Bildschirmschoner. Bei dem kann dann die Passwortsperre aktiviert werden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 11. März 2005 Teilen Geschrieben 11. März 2005 Hallo, Füge Deinem Dialog einfach PreTranslateMessage() hinzu. Darin kannst Du dann praktisch alle Fenstermeldungen abfangen und bearbeiten. Auch Mauseingaben oder was auch immer. Weiter unten werden dann noch bestimmte Fenstermeldungen rausgefiltert. Ich fange hier mal die Tasteneingaben ab und gebe sie im TRACE-Fenster vom Studio aus (so kannst Du spezielle Tasten rausfiltern) Man kann so ähnlich natürlich auch die Nachrichten praktisch ALLER Fenster vom Betriebssystem ausfiltern und bearbeiten... aber sowas muß man ja nicht gleich ins Forum schreiben (find ich). Es reicht doch völlig aus, wenn Du den Dialog Systemmodal machst (ist eine ganz normale Dialogeigenschaft - kannst ja im Forum danach suchen). MyDlg::PreTranslateMessage(MSG*pMsg) { bool returnvalue = false; if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP ) { // wParam = virtual Keycode, lParam = Key data TRACE("%x %x\n",pMsg->lParam, pMsg->wParam); returnvalue = true; } // SendMessage(WM_SYSCOMMAND,SC_MINIMIZE); // TRACE("%i\n",pMsg->message); if ((pMsg->message == WM_SYSCOMMAND && pMsg->wParam==SC_CLOSE) || (pMsg->message == WM_QUIT || pMsg->message == WM_CLOSE && pMsg->hwnd==m_hWnd)) returnvalue = true; return returnvalue; } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Diablo999 Geschrieben 11. März 2005 Teilen Geschrieben 11. März 2005 PreTranslateMessage kann ich mir nicht vorstellen dass das geht, glaube da kannst du nur Messages des eigenen Prozesses und nicht Systemweit abfangen... Wenn du Systemweit alle Nachrchten abfangen willst brauchst IMO einen systemweiten Hook. Hierzu kannst du dir mal die Funktionen SetWindowsHookEx und die Callback LowLevelKeyboardProc anschauen, damit müsste es dir möglich sein alle Keyboardevents des Systems abzufangen, außer natürlich wenn noch ein Prozess einen Hook installiert hat. Um das Sperren des gesamten Systems zu realisieren wäre es evtl. eine Alternative dein Programm anstatt der normalen Windowsshell zu starten und nur bei korrekter Eingabe des Passwortes die Shell nachzustarten :-) Gruß Diablo999 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bukker Geschrieben 12. März 2005 Autor Teilen Geschrieben 12. März 2005 Hmm,... Also verstehen tu ich das nicht grad alles, aber ich versuche mal was damit anzufangen. Ich melde mich wieder, danke schonmal Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bukker Geschrieben 13. März 2005 Autor Teilen Geschrieben 13. März 2005 Hi, da bin ich wieder. @ Manfred.Becker: Das hat nicht funktioniert, das Fenster auf diese Weise im Vordergrund zu halten. Realisiert hab ich es nun so: SetWindowPos( Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); @ Crush: Die Funktion PreTranslateMessage war dem Builder irgendwie nicht gekannt, hab mir da noch paar Infos von der MSDN Page geholt, aber des wollt ned so recht. @Diablo: Und das mit den Hooks, ist glaube schon ne Feine Sache, nur, des wollt auch ned so, habs ned hinbekommen. Anscheinend hab ich mich an etwas rangewagt, dass zu viel für mich ist !? Ich weiss es nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 13. März 2005 Teilen Geschrieben 13. März 2005 Du könntest den Befehl LockWorkStation() verwenden, dass sollte das Gleiche sein (ungetestet), als ob Du Windows+L auf der Tastatur drückst. Zum selbst probieren und für ein paar Hintergrundinfos kannst Du Dir folgenden Artikel anschauen: http://www.codeproject.com/win32/AntonioWinLock.asp Nachdem ich den Artiel überflogen habe würde ich jedoch sagen: lass es sein Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bukker Geschrieben 14. März 2005 Autor Teilen Geschrieben 14. März 2005 Also das WinLock sieht echt gut aus, hab noch ned ausprobiert, werde auch die nächsten paar Tage wenig Zeit finden, aber ich melde mich wieder, ganz bestimmt. Danke für den Link Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bukker Geschrieben 14. März 2005 Autor Teilen Geschrieben 14. März 2005 Da bin ich wieder... Also der Link war in Ordnung, hat mich auf paar Ideen gebracht, meine verschwundene Taskleiste ist der Beweis Muss euch aber mal fragen wo der Fehler in meinem Prog ist, habe Probleme mit der SetWindowsHookEx Funktion: Eingebunden habe ich die... #include <vcl.h> #include <windows.h> #include <Lmcons.h> #include <Winuser.h> #pragma hdrstop #include "Passwort_unit.h" #include "Passweingabe.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; Meine Funktion sieht wie folgt aus - schreibe dahinter die Fehlermeldung als Kommentar ! HHOOK SetWindowsHookEx ( WH_KEYBOARD, [b]//Konvertierung von INT nach VOID* nicht möglich // ) erwartet[/b] handle, User32.lib | user32.dll, 0 ); LRESULT KeyboardProc(...)[b]//Ungültige Verwendung von typedef 'LRESULT' //Auch in der 1. Zeile -> // In Anweisung fehlt ;[/b] { if (Key == VK_SOMEKEY) return 1; // Trap key //return CallNextHookEx(...); // Let the OS handle it }; } //ENDE TFORM1 !!! [b]//W8004 SetWindowsHookEx wurde ein Wert zugewiesen der nie verwendet wird[/b] [b]void __fastcall TForm1::bbCancelClick(TObject *Sender)[/b] { Application -> MessageBox ( "Die Aktion wurde durch den Benutzer abgebrochen.", "Passwortabfrage", MB_ICONSTOP); UnhookWindowsHookEx(); [b]//Zu wenige Parameter im Aufruf von.... Close(); }[/b] Könnt ihr mir da helfen ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bukker Geschrieben 14. März 2005 Autor Teilen Geschrieben 14. März 2005 Sorry wenn ich so oft poste, aber ich das Prob jetzt bis auf 2 Sachen hinbekommen: LRESULT CALLBACK HookProc(...)[b] //Ungültige Verwendung von typedef 'LRESULT' //Auch in der 1. Zeile -> // In Anweisung fehlt ;[/b] { if (Key == VK_SOMEKEY) return 1; // Trap key //return CallNextHookEx(...); // Let the OS handle it }; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.