Założenie globalnego hooka na skrót Alt+Ctrl+Del

0

Mam pytanie jak założyć hoka globalnego w delphi na klawiaturę po wciśnięciu Ctrl + Alt + Delete. Chodzi mi o to jak wcisnę powyższą kombinację klawiatury ma wykonać się odpowiednia procedura. Z tego co wiem jest to kombinacja wyjątkowa systemowa i ciężko ją przechwycić.

1

Można wykryć naciśnięcie tych klawiszy, ale nie można przechwycić samego naciśnięcia tak by nie dotarło do systemu. System i tak wykona to co normalnie wykonuje po naciśnięciu Ctrl+Alt+Delete.

Nawet VMWare czy Virtual Box które mocno grzebią w systemie nie są w stanie przechwycić tego skrótu.

0

A może przechwycić było by lepiej okno z wyświetleniem komunikatu:

Zablokuj ten komputer
Przełącz użytkownika
Wyloguj
Zmień hasło
Uruchom Menadżera zadań

Może wie ktoś jak?

Azarien dotrzeć do systemu mogą. Chodzi mi o równoległe przechwycenie tego skrótu dla potrzeb mojego programu. Hok może być w dll.

0
Brunatny Polityk napisał(a):

A może przechwycić było by lepiej okno z wyświetleniem komunikatu:

Zablokuj ten komputer
Przełącz użytkownika
Wyloguj
Zmień hasło
Uruchom Menadżera zadań

Może wie ktoś jak?

A to okno nie tworzy jakiegoś nowego procesu? pytam, bo nie idzie mi sprawdzenie tego :P

#Edit
Chyba mam ten process ;)

Wynik:
LogonUI.exe

cmd.exe                       5100 Console                    2     3˙172 KB
conhost.exe                   4728 Console                    2     5˙472 KB

LogonUI.exe                   5312 Console                    2    22˙312 KB <----

tasklist.exe                  3084 Console                    2     6˙176 KB

Żeby go wyciągnąć zapisz jako .bat

ping 127.0.0.1 -n 6 > nul

cls

tasklist > C:\tasklist.txt

Odpal plik, szybko kliknij ctrl+alt+del (to okno), poczekaj 7sec i dopiero wtedy je zamknij.

Skopiuj gdzieś zawartość i zrób to samo, tylko, że bez ctrl+alt+del. Następnie po prostu porównaj zawartości


Musisz pobrać listę procesów i sprawdzić czy istnieje LogonUI.exe

Nie wiem jak w delphi, ale w c# się to dość prosto robi. Jednakże, gdybyś miał z tym problem, to zrób po prostu

tasklist > C:\tasklist.txt

i z pliku odczytaj albo sprawdź czy string.contains

0

Oki poradziłem sobie wystarczyło przechwycić WTS_SESSION_LOGOFF

WeiXiao z tym LogonUI.exe mialeś rację dzieki

procedure TForm1.Timer1Timer(Sender: TObject);
var
HWND : THandle;
Proc : TProcessEntry32;
i : integer;
begin
  ListBox1.Clear;
  HWND := CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);

  Proc.dwSize := SizeOf(Proc);

  if Integer(Process32First(HWND, Proc)) <> 0 then
  repeat
    if pos('LogonUI.exe',Proc.szExeFile) > 0 then
    ListBox1.Items.Add(Proc.szExeFile);

  until Integer(Process32Next(HWND, Proc)) = 0;

CloseHandle(HWND);
end;
0

Po co rzutujesz rezultat funkcji Process32First i Process32Next na liczbę, skoro te funkcje zwracają wartość logiczną? Niepotrzebnie zaciemniasz kod.

0
Brunatny Polityk napisał(a):

Oki poradziłem sobie wystarczyło przechwycić WTS_SESSION_LOGOFF

WeiXiao z tym LogonUI.exe mialeś rację dzieki

procedure TForm1.Timer1Timer(Sender: TObject);
var
HWND : THandle;
Proc : TProcessEntry32;
i : integer;
begin
  ListBox1.Clear;
  HWND := CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);

  Proc.dwSize := SizeOf(Proc);

  if Integer(Process32First(HWND, Proc)) <> 0 then
  repeat
    if pos('LogonUI.exe',Proc.szExeFile) > 0 then
    ListBox1.Items.Add(Proc.szExeFile);

  until Integer(Process32Next(HWND, Proc)) = 0;

CloseHandle(HWND);
end;

Hej, jakby coś, to pamiętaj, że (jeśli dobrze pamiętam) to LogonUI odpala się również przy starcie i zamykaniu systemu (i znając życie pewnie przy czymś tam jeszcze (może przelogowanie?))

tak "w razie w" żeby cię jakieś dziwne bugi nie męczyły :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1