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 STRG + ALT + ENTF sperren (https://www.delphipraxis.net/21889-strg-alt-entf-sperren.html)

CReber 9. Mai 2004 15:03


STRG + ALT + ENTF sperren
 
Also ich habe jetzt schon viele Informationen zu dem System gesammelt trotzdem bin ich auf keine gute Lösung gekommen...

Habe das mit dem Taskmanager abschalten per Regedit probiert aber das ist keine wirklich elegante Lösung. Man hat mir gesagt man kann es per Hook machen aber ich hab nicht wirklich Ahnung von Hooks ;) Am liebsten wäre mir ja ein Code-Beispiel dafür...

thX

(am besten alle Systemeingaben sperren -> ESC + STRG + Q , ALT + F4 usw.)

fkerber 9. Mai 2004 15:07

Re: STRG + ALT + ENTF sperren
 
Hi!

Such mal hier, da gibt es schon einige Threads dazu.


Ciao fkerber

Ratte 9. Mai 2004 15:08

Re: STRG + ALT + ENTF sperren
 
Hi,

bei Win9x + WinME geht das hier.

Rate

alcaeus 9. Mai 2004 15:10

Re: STRG + ALT + ENTF sperren
 
Sieh mal was die MSDN dazu bereithält:
Systemtastenkombinationen blockieren
Scroll ein bisschen runter, da steht genug Code.
Ansonsten such hier auf dem Forum, das war hier oft genug...

Alexander 9. Mai 2004 15:12

Re: STRG + ALT + ENTF sperren
 
DArf man fragen, wozu Strg+Alt+Entf sperren willst? Solch ein Programm würde bei mir gleich runterfliegen ;-)

PS: Unter NTff ist es ohne sehr große Umstände gar nicht möglich die Kombination zu sperren. Ich glaube Assarbad hat dazu mal was geschrieben... Such hier am besten mal-..

alcaeus 9. Mai 2004 15:15

Re: STRG + ALT + ENTF sperren
 
Erstens: Wozu Alt+F4 sperren? Ein Fenster schließen kann ich auch anders.
Zweitens: Auch wenn du Strg+Alt+Entf sperrst, ich brauche nur taskmgr auszuführen und dein Programm ist überlistet.
Drittens: Was macht denn eigentlich ESC + STRG + Q? Strg+Esc macht das Startmenü auf, aber das Q?

Skiron 9. Mai 2004 15:18

Re: STRG + ALT + ENTF sperren
 
is war sicher nicht das einfachste, aber von der Funktionalität her das beste:
Programmier den Tastaturtreiber neu / fang die nachrighten gleich da ab -> asm, asm, asm

Luckie 9. Mai 2004 15:38

Re: STRG + ALT + ENTF sperren
 
Erstes auch ein Hook nützt da nichts, da diese Tastenkombination von Windows extra behandelt wird. Da hilft nur abfangen bevor Windows seinen Daumen drauf hat. Dies wird aber nur über einen Tastaturtreiber gehen, also nix mit Delphi.

Alt + F4:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := False:
end;
Und jetzt meine beliebteste Frage zu diesem Thema: Warum das ganze? Wenn ich einen Rechner dicht machen will, dann geht das über den von MS empfohlenen Weg und zwar über Policies - einstellbar über den Policie-Editor. Und erklär mir nicht du wolltest Software für ein Internet-Cafe oder für das Schulnetzwerkschreiben, das ist blödsinn.

CReber 9. Mai 2004 15:42

Re: STRG + ALT + ENTF sperren
 
Zitat:

Hi!

Such mal hier, da gibt es schon einige Threads dazu.


Ciao fkerber
argh wie ich solche beiträge liebe ;)

Zitat:

Wenn ich einen Rechner dicht machen will, dann geht das über den von MS empfohlenen Weg und zwar über Policies - einstellbar über den Policie-Editor.
Ah, endlich nen guter Lösungsvorschlag ! Hab noch nie was von Policies gehört, ich gucks mir mal an.


Zitat:

Und erklär mir nicht du wolltest Software für ein Internet-Cafe oder für das Schulnetzwerkschreiben, das ist blödsinn.
Was ein unnützer Kommentar... Ich werde mein fertiges Programm hier präsentieren....

Luckie 9. Mai 2004 15:48

Re: STRG + ALT + ENTF sperren
 
Zitat:

Zitat von hOnkibOnk
Was ein unnützer Kommentar... Ich werde mein fertiges Programm hier präsentieren....

Na da bin ich ja mal gespannt, wie das aussieht, wenn du dein Problem mittels Policies löst. :roll:

CReber 9. Mai 2004 15:51

Re: STRG + ALT + ENTF sperren
 
Also ich hab mich grad ein wenig schlau gemacht und so wie es scheint sind Policies ja nur im Netzwerk funktionstüchtig oder? Ich brauche eine Methode den Rechner über eine bestimmte Dauer dicht zu machen bis das (hardwaregesteuerte) Ereignis wieder auftritt und der Rechner entsperrt wird...

Angenommen es handelt sich z.b. um einen Rechner wo viele Leute dran vorbeilaufen ;) Dann muss er gesperrt sein und genau daran arbeite ich gerade ... mit LockWorkStation oder BlockInput ist es noch nicht das wahre...

Luckie 9. Mai 2004 15:52

Re: STRG + ALT + ENTF sperren
 
Policies sollten auch lokal funktionieren.

alcaeus 9. Mai 2004 15:55

Re: STRG + ALT + ENTF sperren
 
Erklär bitte mal genau, was für eine Art von Programm du machen willst und wieso du gar alles Sperren willst. Ich kenne da auch ne andere Methode: Tastatur mitnehmen und Superkleber in die PS2-Schnittstelle :mrgreen:
Nein, im Ernst jetzt, warum bist du mit dem Sperren der Arbeitsstation nicht zufrieden?

CReber 9. Mai 2004 16:00

Re: STRG + ALT + ENTF sperren
 
So ich habs jetzt anders gelöst ;)) Bald isset soweit dann release ich es hehe ;)

fkerber 9. Mai 2004 16:27

Re: STRG + ALT + ENTF sperren
 
Hi!

Verrätst du uns auch wie?
Falls mal wieder jemand das Problem hat.


Ciao fkerber

CReber 9. Mai 2004 16:53

Re: STRG + ALT + ENTF sperren
 
Mit LockWorkStation... ist zwar nicht so komfortabel und sieht nicht so schick aus ;) aber egal... Vlt. findet sich ja irgendwann ein anderer Weg

Thorben86 9. Mai 2004 17:06

Re: STRG + ALT + ENTF sperren
 
Also wenn ihr doch den Code fürs sperren des Taskmanagers doch noch braucht, könnt ich mal nach suchen, hab den mal irgendwo gespeichert.

fiasko 9. Mai 2004 17:35

Re: STRG + ALT + ENTF sperren
 
Hallo,

ab Win 2k gibt es einen Hook mit dem du alles bis auf CTRL+ALT+ENTF abschalten kannst (mit WH_KEYBOARD_LL (mein Delphi 6 kennt das allerdings noch nicht, da muß man etwas Hand anlegen).

Die Buttons beim Drücken von CTRL+ALT+ENTF zu deaktivieren kann man entweder in'ner Domain per Policy oder einfach von Hand die entsprechenden Registry-Werte setzen (unter HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies).

Luckie 9. Mai 2004 17:43

Re: STRG + ALT + ENTF sperren
 
Zitat:

Zitat von fiasko
ab Win 2k gibt es einen Hook mit dem du alles bis auf CTRL+ALT+ENTF abschalten kannst

Schön, aber genau um Strg+Alt+Entf ging es ihm ja. :roll:

fiasko 9. Mai 2004 17:47

Re: STRG + ALT + ENTF sperren
 
Zitat:

Zitat von hOnkibOnk
(am besten alle Systemeingaben sperren -> ESC + STRG + Q , ALT + F4 usw.)

:mrgreen: nicht nur...

Luckie 9. Mai 2004 17:48

Re: STRG + ALT + ENTF sperren
 
Alt + F4 kann er direkt im Source deaktivieren und Strg + Esc + Q ist vollkommener Quak, da bei Strg + Esc das Startmenü aufklappt.

CReber 9. Mai 2004 18:29

Re: STRG + ALT + ENTF sperren
 
Code:
ab Win 2k gibt es einen Hook mit dem du alles bis auf CTRL+ALT+ENTF abschalten kannst (mit WH_KEYBOARD_LL (mein Delphi 6 kennt das allerdings noch nicht, da muß man etwas Hand anlegen).
Weiß einer wie das Programmiertechnisch umzusetzen ist?

Luckie 9. Mai 2004 18:31

Re: STRG + ALT + ENTF sperren
 
"_LL" ist ein LowLevel Keyboardhook. Bemüh mal die Forensuche oder Google. Aber nicht überrascht sein, wenn du nur C Code findest. ;)

fiasko 9. Mai 2004 20:56

Re: STRG + ALT + ENTF sperren
 
Ich verwende folgende Kode für ne DLL die das macht:

Delphi-Quellcode:
library foo;

uses
  Windows,
  Messages,
  SysUtils;

var
  g_hHookKbdLL: HHOOK = 0;

{ This only works with on Win NT 5.0 (formely known as Win 2000) upwards,
  but Delphi's WinAPI is somethink like obselete in this manner. }
const
  WH_KEYBOARD_LL = 13;
  LLKHF_ALTDOWN = 0x00000020;
type
  { Structure used by WH_KEYBOARD_LL }
  KBDLLHOOKSTRUCT = record
                      vkCode: DWORD;
                      scanCode: DWORD;
                      flags: DWORD;
                      time: DWORD;
                      dwExtraInfo: DWORD;
                    end;
  PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;

{ Trap task-switching keys by returning without passing along. }
function MyTaskKeyHookLL(nCode: Integer; wp: WPARAM; lp: LPARAM): LRESULT; stdcall;
var
  pkh: PKBDLLHOOKSTRUCT;
  bCtrlKeyDown: BOOL;
begin
  pkh:=PKBDLLHOOKSTRUCT(lp);

  if nCode=HC_ACTION then
  begin
    bCtrlKeyDown := GetAsyncKeyState(VK_CONTROL) shr ((sizeof(SHORT) * 8) - 1)<>0;
       // Ctrl+Esc
    if ((pkh^.vkCode=VK_ESCAPE) and bCtrlKeyDown) or
       // Alt+TAB
       ((pkh^.vkCode=VK_TAB) and (pkh^.flags and LLKHF_ALTDOWN=LLKHF_ALTDOWN)) or
       // Alt+Esc
       ((pkh^.vkCode=VK_ESCAPE) and (pkh^.flags and LLKHF_ALTDOWN=LLKHF_ALTDOWN)) or
       // Start Menu
       ((pkh^.vkCode=VK_LWIN) or (pkh^.vkCode=VK_RWIN)) then
    begin
      result:=1;
      exit;
    end;
  end;
  result:=CallNextHookEx(g_hHookKbdLL, nCode, wp, lp);
end;

function DisableTaskKeys(bDisable: bool): bool; stdcall;
begin
  if bDisable then
  begin
    if g_hHookKbdLL=0 then
     g_hHookKbdLL := SetWindowsHookEx(WH_KEYBOARD_LL, MyTaskKeyHookLL, HInstance, 0);
  end
  else
  if g_hHookKbdLL<>0 then
  begin
    UnhookWindowsHookEx(g_hHookKbdLL);
    g_hHookKbdLL := 0;
  end;

  result:=g_hHookKbdLL<>0;
end;

exports
  DisableTaskKeys name 'DisableTaskKeys';

end.

CReber 10. Mai 2004 08:11

Re: STRG + ALT + ENTF sperren
 
Code:
  LLKHF_ALTDOWN = 0x00000020;
Da kommt nen Fehler -> ; erwartet aber 0x00000020 gefunden... Liegt's an Delphi? Steht ja im Sourcecode irgendwas ;)

Luckie 10. Mai 2004 08:16

Re: STRG + ALT + ENTF sperren
 
0x00000020 ist die C Notation für eine Hexadezimalzahl in Delphi ist das: $00000020.

w3seek 10. Mai 2004 08:32

Re: STRG + ALT + ENTF sperren
 
schreib dir einen msgina hook, damit kannst du system events hooken und z.b. ctrl+alt+del abfangen

MisterNiceGuy 10. Mai 2004 09:01

Re: STRG + ALT + ENTF sperren
 
Und es weiß immernoch niemand, wozu das ganze jetzt gut sein soll... Das ist als ob man jemand eine Pistole in die Hand drückt und ihn fragt:"Wozu brauchst du die?" Und er antwortet:"Hm, ich werd sie bald benutzen und euch dann sagen, wozu sie war!"

:roll:

Also das kann in meinen Augen nur für irgendein böses Programm zu benutzen sein, sonst würde der gute hOnkibOnk schon längst mal verraten haben, wozu das Prog denn nu gut ist...

alcaeus 10. Mai 2004 13:25

Re: STRG + ALT + ENTF sperren
 
@MisterNiceGuy:
[quote="hOnkibOnkIch werde mein fertiges Programm hier präsentieren....[/quote]

Ich bin auch noch gespannt ;)

Thorben86 10. Mai 2004 13:29

Re: STRG + ALT + ENTF sperren
 
Also mir fällt außer bösen programmen nur eins ein, nämlich Eins, um den PC abzusperren. Wollen wir mal Hoffen, dass du an sowas bastelst. Hab auch mal damit angefangen, ber liegt immoment on ice

HaCkAttaCk2001 16. Mai 2004 13:26

Re: STRG + ALT + ENTF sperren
 
Hi.

Um den Taskmanager zu sperren hab ich letztendlich einen Timer genommen und das hier reingeschrieben:

Code:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 h: HWND; //Variable für das Handle des Fensters
begin
  h := FindWindow(nil, PChar('Windows Task-Manager')); //nach Fenster mit dem Namen "Windows Task-Manager" suchen
  if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);      //wenn gefunden (Handle ist ungleich 0) dann sende eine Message: WM_CLOSE - schließen
end;
Wenn man das mit 20 ms oder so timert reicht das vollkommen aus ;) .

Edit: Wie man sieht blockiert der Code nur die Wirkung und nicht die Ursache... das geht aber wesentlich einfacher zu programmieren ;) . Das Startmenü kann man ähnlich blockieren... dort ist die Fensterbezeichnung "Startmenü". Ich glaub aber das die Fenster bei anderen Sprachversionen von Windows auch anders heißen... aber das ist ja jetzt erstmal egal... es geht ums Prinzip :D .

C ya!

gmarts 16. Mai 2004 13:31

Re: STRG + ALT + ENTF sperren
 
Das ist ja schrecklich unelegant!

Skiron 16. Mai 2004 13:39

Re: STRG + ALT + ENTF sperren
 
@HaCkAttaCk2001: Eigentlich reicht das in der Timerproc aus:
Delphi-Quellcode:
SendMessage(FindWindow(nil, 'Windows Task-Manager'), WM_CLOSE, 0, 0);
Zitat:

Zitat von gmarts
Das ist ja schrecklich unelegant!

Stimmt dann auch wieder! Aber es funktioniert!

CReber 16. Mai 2004 14:30

Re: STRG + ALT + ENTF sperren
 
ICh hab es ein wenig anders gelöst und das Programm ist unter Freeware zu finden ;)

HaCkAttaCk2001 16. Mai 2004 22:02

Re: STRG + ALT + ENTF sperren
 
Zitat:

Zitat von gmarts
Das ist ja schrecklich unelegant!

Hi.

Das mag wohl sein... aber wenn einem nichts wirklich besseres einfällt nimmt man das halt.


Und was soll man sagen? Es funktioniert!


C Ya!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr.

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