Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Maus und Tastatur sperren! (https://www.delphipraxis.net/140960-maus-und-tastatur-sperren.html)

cherry 29. Sep 2009 19:00


Maus und Tastatur sperren!
 
Hi Leuts.

Ich versuche gerade eine kleine Anwendung zu schreiben, welche die Maus- und Tastatureingaben vorübergehend untedrückt! Und zwar alle Eingaben, nicht nur die für mein Programm!

Wiso ich das brauche, wolltest du doch gleich fragen oder nicht?! ;-) Na ja... Ich lass jetzt mal die ganze Vorgeschichte, da ich sonst eine Stunde lang an diesem Beitrag schreibe. In einem Satzt gehts darum einmalig einen Batch auszuführen der unter keinen umständen unterbrochen werden darf.

Meine erste Idee war alle WH_MOUSE & WH_KEYBORD abzufangen und nicht weiterleiten, der Hook greift aber nicht genug weit unten...

Ideen?

hathor 29. Sep 2009 19:05

Re: Maus und Tastatur sperren!
 
LockWorkStation - ist eine WINDOWS-Funktion.

Anwendungsbeispiel:
Delphi-Quellcode:
function LastInput: DWord;
var LInput: TLastInputInfo;
begin
  LInput.cbSize := SizeOf(TLastInputInfo); GetLastInputInfo(LInput);
  Result := GetTickCount - LInput.dwTime;
end;
.
.
.
Procedure..
BEGIN
if Lastinput>100000 then //100 sec
Lockworkstation; // Programme laufen weiter, aber ohne neue Anmeldung keine Aktion möglich
END;
Mehr Infos zu

LASTINPUTINFO: Wenn kein keybd_event und kein mouse_event erfolgt, wird ein Zähler hochgezählt.
Wird ein gewählter Zählerstand (z.B. 100 000 = 100 sec) erreicht (Timer-Abfrage) , wird die WINDOWS-Funktion
LockWorkStation ausgelöst. Alle Programme laufen weiter, aber Tastatur- und Maus-Aktionen werden ohne
Neuanmeldung ignoriert.

http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

Anwendungsbeispiel:
Der Zählerstand wird auf 0 gesetzt mit dem Befehl mouse_event(0,0,0,0). Den kann man z.B. einfügen (if HIDexist then mouse_event(0,0,0,0)... , wenn der User einen bestimmten USB-Stick benutzt (HID: hiddev.ProductName, hiddev.Attributes.VendorID, hiddev.Attributes.ProductID, hiddev.SerialNumber). Entfernt der User den Stick, wird ein OnRemoval-Ereignis ausgelöst und LockWorkStation wird aktiv.

XXcD 29. Sep 2009 19:48

Re: Maus und Tastatur sperren!
 
Zu dem Thema kommt mir gerade ein Gedanke.
Soweit ich weiß lässt sich das ja nicht verhindern,
dass man Strg-Alt-Entf benutzt.

Wie wäre das denn wenn man temporär den Tastaturtreiber deaktiviert,
dann könnte man doch die tastatur garnicht mehr nutzen.

cherry 29. Sep 2009 19:53

Re: Maus und Tastatur sperren!
 
danke fuer deine antwort. gibt es denn keine moeglichkeit das ganze zu machen, ohne dass eine erneute authentifizierungnoetig noetig ist ?

kann man denn die geraete einfach deaktivieren ?

himitsu 29. Sep 2009 20:00

Re: Maus und Tastatur sperren!
 
Zitat:

Zitat von cherry
kann man denn die geraete einfach deaktivieren ?

Bei mir geht's nicht ... nur deinstallieren ginge, aber der PC müßte dazu neu gestartet werden und danach wäre die Tastatur dann eh wieder vorhanden :nerd:

Schreib einen Service, welcher die Batch in ihrem Kontext ausführt.
Ein normaler Benutzer kann diesen dann nicht einfach so beenden.

mleyen 29. Sep 2009 20:32

Re: Maus und Tastatur sperren!
 
Delphi-Quellcode:
function BlockInput(fBlock: Boolean): Boolean; stdcall; external 'user32.dll';
Untested, aber ich bin mir ziemlich sicher, dass das die Funktion ist die du suchst.

Edit #1:
Ok, habs gerade unter Vista getestet und der Affengriff hat tatsächlich funktioniert... :shock: (Das war unter XP aber nicht so, oder?)
Weiterhin könnte ich immernoch bequem über mein G15-Applet alle möglichen Prozesse abschießen und sonst auch mein ganzes System bediehnen... :twisted:

Edit #2:
Was passiert denn wenn es einen Stromausfall gibt und somit auch das unverzichtbare/göttliche Programm beendet wird? :P

cherry 29. Sep 2009 20:51

Re: Maus und Tastatur sperren!
 
Zitat:

Zitat von mleyen
Edit #1:
Ok, habs gerade unter Vista getestet und der Affengriff hat tatsächlich funktioniert... :shock: (Das war unter XP aber nicht so, oder?)
Weiterhin könnte ich immernoch bequem über mein G15-Applet alle möglichen Prozesse abschießen und sonst auch mein ganzes System bediehnen... :twisted:

Ich checks mal unter XP, denn es muss ohnehin nur da laufen! -> Hab grad kein Delphi zur Hand, bin morgen wieder im Büro...

Zitat:

Zitat von mleyen
Edit #2:
Was passiert denn wenn es einen Stromausfall gibt und somit auch das unverzichtbare/göttliche Programm beendet wird? :P

Tja dann, pech ! :lol:

Zacherl 29. Sep 2009 20:55

Re: Maus und Tastatur sperren!
 
STRG+ALT+ENTF geht auch unter XP trotz BlockInput(). Periodisch aufgerufen in sehr kurzen Intervallen, wird der Computer aber trotz STRG+ALT+ENTF dauerhaft blockiert.

cherry 29. Sep 2009 20:57

Re: Maus und Tastatur sperren!
 
Zitat:

Zitat von Zacherl
STRG+ALT+ENTF geht auch unter XP trotz BlockInput(). Periodisch aufgerufen in sehr kurzen Intervallen, wird der Computer aber trotz STRG+ALT+ENTF dauerhaft blockiert.

Naja, ich hätte da schon etwas weniger "gebastel" gedacht?!

Zacherl 29. Sep 2009 20:58

Re: Maus und Tastatur sperren!
 
Naja was heißt gebastel? In deinem Programm einfach:

Delphi-Quellcode:
while not Aborted do
begin
  BlockInput(true);
  Sleep(10);
end;

Luckie 29. Sep 2009 20:59

Re: Maus und Tastatur sperren!
 
Meinst du nicht auch, dass du es dem Anwender überlassen solltest, was er macht und was nicht? Wenn ich beim CD Brennen Nero abschieße, dann muss ich mir auch im Klaren darüber sein, dass die CD unbrauchbar wird. Und wenn ich ein Batchskript vorzeitig beende, dann muss mir auch klar sein, dass das eventuell zu Fehlern führt. Und wenn es der Anwender trotzdem macht, na dann hat er eben Pech gehabt. Schlimmer finde ich es, wenn du mir die Gewalt über meinen Rechner nehmen würdest.

cherry 29. Sep 2009 21:01

Re: Maus und Tastatur sperren!
 
@Luckie

Ja das ist ein guter Ansatz, ich denke da eingentlich ähnlich darüber. Jedoch muss ich für mein Vorhaben den Benutzer kurzfristig in die lokale Administratorengruppe schmeissen. Wenn der Batch dies am ende nicht wieder rückgängig mach und sich nicht abmeldet, dann bleibt der Benutzer in der lokalen Administratorengruppe. Und das ist dann mein Problem! ;-)

Zacherl 29. Sep 2009 21:04

Re: Maus und Tastatur sperren!
 
Ich als gemeiner User würde dann einfach schnell den Stecker ziehen, sobald das Script mich in die Admingruppe verschoben hat :twisted: Vielleicht besser mir CreateProcessAsUser() arbeiten?

cherry 29. Sep 2009 21:08

Re: Maus und Tastatur sperren!
 
Zitat:

Zitat von Zacherl
Ich als gemeiner User würde dann einfach schnell den Stecker ziehen, sobald das Script mich in die Admingruppe verschoben hat :twisted: Vielleicht besser mir CreateProcessAsUser() arbeiten?

Das weiss der Benutzer ja nicht. Und CreateProcessAsUser() hatte ich schon versucht und nicht nur einmal und zwar sämtliche WinAPI Funktionen die was änhliches machen, nicht nur CreateProcessAsUser() ... ich habs nicht hingekriegt !!!

genuschel: ( Vielleicht müsste ich aber trotzdem diesen Ansatz weiterverfolgen... )

Aber suchen wir doch erstmal ne Lösung für das sperren der Eingabegeräten, denn um das gehts ja hier im Thread. ;-)

Luckie 29. Sep 2009 21:21

Re: Maus und Tastatur sperren!
 
Zitat:

Zitat von cherry
Zitat:

Zitat von Zacherl
Ich als gemeiner User würde dann einfach schnell den Stecker ziehen, sobald das Script mich in die Admingruppe verschoben hat :twisted: Vielleicht besser mir CreateProcessAsUser() arbeiten?

Das weiss der Benutzer ja nicht.

Warte mal ab, wie schnell er das rausbekommt. Sicherheit, die auf angenommene Unwissenheit des Bneutzers basiert ist keine sicherheit.

Zitat:

Und CreateProcessAsUser() hatte ich schon versucht und nicht nur einmal und zwar sämtliche WinAPI Funktionen die was änhliches machen, nicht nur CreateProcessAsUser() ... ich habs nicht hingekriegt !!!
Nun ja, eigentlich wollte ich nur die Glühbirne wechseln. Das habe ich aber nicht hinbekommen, deswegen habe ich das ganze Haus abgerissen und neu gebaut. Probier es mal damit: http://www.michael-puff.de/Developer...thLogonW.shtml

Zitat:

Aber suchen wir doch erstmal ne Lösung für das sperren der Eingabegeräten, denn um das gehts ja hier im Thread. ;-)
Ich bin eher dafür, dass wir eine vernünftige Lösung, unabhängig vom Threadtitel, finden. Mit Gewalt dem Benutzer an der Benutzung seines Rechners zu hindern, ist nie eine gute Lösung. Zumal dies gar nicht richtig möglich ist. Microsoft selbst verfolgt die Philosophie, dass der Benutzer jeder Zeit volle gewalt über seinen Rechner haben sollte. Und wenn er den Rechner mit Absicht vor den Baum fährt, dann muss er eben mit den Konsequenzen leben. Als Administrator hält mich ja auch nichts und niemanden davon ab, mein System zu zerlegen.

cherry 29. Sep 2009 21:32

Re: Maus und Tastatur sperren!
 
CreateProcessWithLogonW hatte ich auch schon. brings nicht hin.
Ich werde morgen mal mein Code dazu Posten, vielleicht ist mir ja ein Fehler unterlaufen...

cherry 30. Sep 2009 08:46

Re: Maus und Tastatur sperren!
 
Zitat:

Zitat von Luckie
Zitat:

Und CreateProcessAsUser() hatte ich schon versucht und nicht nur einmal und zwar sämtliche WinAPI Funktionen die was änhliches machen, nicht nur CreateProcessAsUser() ... ich habs nicht hingekriegt !!!
Nun ja, eigentlich wollte ich nur die Glühbirne wechseln. Das habe ich aber nicht hinbekommen, deswegen habe ich das ganze Haus abgerissen und neu gebaut. Probier es mal damit: http://www.michael-puff.de/Developer...thLogonW.shtml

Ah, Dafür hatte ich ja schon nen Thread, damals konnte mir aber noch keiner Helfen?!!
http://www.delphipraxis.net/internal...107&highlight=

Habs jetzt in deinem Beispiel gesehen und konnte den Aufruf anpassen! Die entscheindende Stelle:

result := CreateProcessWithLogonW(PWideChar(USER),PWideChar( DOMAIN),
PWideChar(PW),LogonType,
nil, PWideChar(APPLICATION +' "'+ PARAMS +'"'),
CREATE_DEFAULT_ERROR_MODE,nil,nil,@si,@pif);

Jetzt bleibt noch das Problem mit dem Aspekt Sicherheit. Am liebesten würde ich den Parameter "Passwort" meiner Konsolenanwendung via Batch mitgeben, wie alle andern Parameter. Aber wie mach ich, das ich das Passwort verschlüsselt mitgeben kann? Ich kann den Schlüssel auch gleich als Parameter mitgeben, dann ist es aber nicht mehr Sicher... Wenn ich den Schlüssel im Programm mitkompiliere ist es aber auch nicht sicher, oder?

Ideen dazu?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz