Delphi-PRAXiS
Seite 1 von 2  1 2      

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+ESC ... Sperren (Hooks?) (https://www.delphipraxis.net/39204-strg-esc-sperren-hooks.html)

quizzmaster 30. Jan 2005 13:21


STRG+ESC ... Sperren (Hooks?)
 
Hi, ich weis was jetzt gleich kommt, benutz die Suchfunktion, aber ich habe jetzt mindestens ne halbe stunde gesucht und nix brauchbares dazu gefunden.

Ich will STRG+ESC u.ä. sperren (STRG+ALT+ENTF ist hinfällig, da ich Win XP mit dem neuen design benutze und da einfach den tasgmanager gesperrt hab).

Ich weis, dass das mit hooks funktioniert, ich hatte auch mal einen, allerdings für c++

wäre nett wenn ihr mir helfen könntet
mfg
quizzmaster

toms 30. Jan 2005 13:34

Re: STRG+ESC ... Sperren (Hooks?)
 
Schaue mal hier:

http://www.swissdelphicenter.ch/en/showcode.php?id=1212

quizzmaster 30. Jan 2005 13:53

Re: STRG+ESC ... Sperren (Hooks?)
 
Danke, das hilft mir schon sehr weiter, nur bräucht ich noch einen anhaltspunkt, was ich im quelltext der dll dazuschreiben muss, damit ALT+TAB auch nicht mehr geht, der rest ist da ja schon drinne

Luckie 30. Jan 2005 22:33

Re: STRG+ESC ... Sperren (Hooks?)
 
Hat das irgend einen Grund warum du das machen willst? Denn dem Benutzer den Taskmanager sperren ist nicht gerade sehr schön. Microsoft hat sich schon was dabei gedacht, dass man Strg+Alt+Entf nicht so einfach sperren kann. Ist ungefähr so, als wenn du aus einem Zug alle Notbremsen ausbaust.

CReber 30. Jan 2005 23:16

Re: STRG+ESC ... Sperren (Hooks?)
 
@Luckie: Irgendwie musste ich grinsen... Nahezu das selbe hast du auch mal zu mir gesagt :)

Ich brauchte das ebenfalls mal und habe daraus diese DLL gemacht: (kA woher ich das hatte)

Delphi-Quellcode:
library Project1;

uses
  Windows,
  Messages,
  SysUtils,
  Registry;

var
  g_hHookKbdLL: HHOOK = 0;
  g_hHookKbd: HHOOK = 0;
  HookHandle: Cardinal = 0;
  WindowHandle: Cardinal = 0;

const
  WH_KEYBOARD_LL = 13;
  LLKHF_ALTDOWN = 32;
  WM_HOOKMESSAGEID = WM_USER + 7328;
type
  KBDLLHOOKSTRUCT = record
                      vkCode: DWORD;
                      scanCode: DWORD;
                      flags: DWORD;
                      time: DWORD;
                      dwExtraInfo: DWORD;
                    end;
  PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;

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+F4
       ((pkh^.vkCode=VK_F4) and (pkh^.flags and LLKHF_ALTDOWN=LLKHF_ALTDOWN)) 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 KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
    TRUE: exit;
    FALSE: Postmessage(WindowHandle,WM_HOOKMESSAGEID,0,0);
  end;
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;

function EnableKeyboardCheck(HWND: Cardinal; Activate: Boolean): boolean; stdcall;
begin
  if Activate = TRUE then
    begin
      Result := False;
      if HookHandle = 0 then begin
        HookHandle := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardHookProc, HInstance, 0);
        WindowHandle := Hwnd;
        Result := TRUE;
      end;
    end
  else
    begin
      Result := UnhookWindowsHookEx(HookHandle);
      HookHandle := 0;
    end;
end;

exports
  DisableTaskKeys, EnableKeyboardCheck;

begin
end.

quizzmaster 31. Jan 2005 14:15

Re: STRG+ESC ... Sperren (Hooks?)
 
Da muss ich jetzt auch mal grinsen :D

@Luckie: Wenn ihr alle wisst wie das geht, warum kommt sowas nicht mal in die FAQ, dann können interesierte da einfach schauen und das für ihre zwecke nutzen.

Ich brauche das für einen Presentationsbrowser der am Tag der offenen Tür an meiner Schule eingesetzt werden soll und die kleinen Kinder und die Eltern nicht irgendwas anderes an den Rechnern machen sollen.

Das Strg+Alt+Entf nicht zu sperren geht ist mir klar, das brauch ich jetzt auch nicht so unbedingt, mir reicht schon wenn ich abmelden und herunterfahren sperren kann, Die tastenkombinationen stehen hier und taskmanager hab ich auch schon gefunden.

quizzmaster 2. Feb 2005 15:08

Re: STRG+ESC ... Sperren (Hooks?)
 
gibts da eigentlich auch eine Variante ohne DLL?

weil für einen kleinen presentations browser möchte ich eigentlich nur ungerne eine dll benutzen.

Ultimator 2. Feb 2005 15:09

Re: STRG+ESC ... Sperren (Hooks?)
 
Soweit ich weiß geht das nicht ohne DLL ;-)

Boombuler 2. Feb 2005 15:23

Re: STRG+ESC ... Sperren (Hooks?)
 
[SprachGammel]
Ohne Dll wird das nix... (weil wegen Globaler Hook)

PS:
Taskmanager kann man recht einfach Sperren:
1. TM mit SW_HIDE starten wenn er nicht schon läuft (sonst auf SW_Hide stellen)
2. Komischen TM TrayIcon weg machen...

der TM läuft zwar aber kann man so ohne weiteres nix mit machen... und da man die Karre nur einmal starten kann = Gewonnen
[/SprachGammel]
Greetz
Boombuler

Edit: Sprachgammel Tags hinzugefügt

quizzmaster 2. Feb 2005 18:03

Re: STRG+ESC ... Sperren (Hooks?)
 
[Hinweis]
such mal hier Hier im Forum suchenTaskmanager deaktivieren

da gibts ne viel einfachere möglichkeit
[/Hinweis]


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr.
Seite 1 von 2  1 2      

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