Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

перехватчик клавиатуры без использования dll


hook ©   (2003-08-17 17:44:00) 

как создать перехватчик клавиатуры без использования dll


Дмитрий В. Белькевич   (2003-08-21 05:42:00) [1]

Для Игоря: RegisterServiceProcess решает только то, что оболочки в списке задач невидно, а толку? Все равно "alt-tab" работает, и половина игрух после этого виснет. У нас инета нет, iexplore и explore я вообще удалил, оболочку пользую свою. Напсал vxd - позатыкал все непотребные комбинации. Поправил commdlg32, что бы fileopen(sdave)dialog не вызывался (дыра еще та). И усе - сижу курю ;) Усеры к файлам не лезут - никаких проблем. Написал вместо comdlg32 пару дллок, которые нужны для программ, типа редакторов карт или для winamp. Заодно классную примочку в dll"ке для winamp"a (_не в плагине_) запихал - навороченный редактор списков + быстрый поиск.
Для ученика: да, действительно, Applications can disable ALT+TAB or CTRL+ESC by installing a low-level keyboard hook. A low-level keyboard hook (WH_KEYBOARD_LL) is installed by calling SetWindowsHookEx. Что ж, это хорошо. Можно будет как попробовать на xp перелезть без извратов с vxd"шками.


Игорь Шевченко   (2003-08-20 09:26:00) [2]

Дмитрий В. Белькевич © (19.08.03 21:51)

Для компьютерных клубов - нефига ставить туда NT-систему, в компьютерный клуб. Потребительской версии для этих клуюов хватает за глаза, в игрушки поиграться да по нету полазить. В этих версиях есть RegisterServiceProcess, который решает все проблемы. Если уж приспичило ставить NT, то используй policy для запрета снятия программы.
При ближайшем рассмотрении все эти горе-админы "компьютерных клубов" перехватывающие ctrl+alt+del оказываются обыкновенными пакостниками :)


Ученик   (2003-08-20 08:17:00) [3]

>Дмитрий В. Белькевич © (19.08.03 01:19) [8]
А WH_KEYBOARD_LL разве не ловит ?

http://support.microsoft.com/default.aspx?scid=kb;en-us;226359


Дмитрий В. Белькевич   (2003-08-19 21:51:00) [4]

Для Игоря: случаи всякие бывают. Пример: компьютерный клуб. Очень полезная фишка.
Для Song: под 9х не существует, под NT+ afaik всё равно _всё_ не ловит, хотя могу ошибаться.


Song   (2003-08-19 14:15:00) [5]

WH_JOURNALRECORD


Игорь Шевченко   (2003-08-19 09:10:00) [6]

Дмитрий В. Белькевич ©

А нафига их перехватывать ?


Дмитрий В. Белькевич   (2003-08-19 01:19:00) [7]

Для Игоря Шевченко: ну ну, ctrl+alt+del, alt+tab etc перехватишь?


Игорь Шевченко   (2003-08-18 10:12:00) [8]

Без DLL никак. С DLL - очень хорошо, без всяких драйверов.


Дмитрий В. Белькевич   (2003-08-18 01:27:00) [9]

Для hook: глобально - никак. Надежно - никак даже с длл. Только драйвер.


miek   (2003-08-17 19:12:00) [10]

В KOL просто ловить через OnMessage. Но будет работать, только пока программа на переднем плане


PVOzerski   (2003-08-17 18:00:00) [11]

Через GetAsyncKeyState можно тоже.


Shluz   (2003-08-17 17:57:00) [12]

хук в коде программы, например


DVM   (2003-08-17 17:55:00) [13]

Драйвер написать.


Shluz   (2003-08-17 17:54:00) [14]

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
private
public
end;

var
Form1: TForm1;
HookHandle: HHOOK;
implementation

{$R *.dfm}
function KeyboardProc (nCode:integer; wParam, LPARAM:Longint):Longint;stdcall;
var f: textfile;
begin
if nCode < 0 then
Result := CallNextHookEx(HookHandle,nCode, wParam, LPARAM)
else
Result := 0;
end;

function SetHook: boolean; stdcall;
begin
HookHandle := SetWindowsHookEx(WH_Keyboard, @KeyboardProc, hinstance, 0);
Result := HookHandle <> 0
end;
function RemoveHook: boolean; stdcall;
begin
Result := UnhookWindowsHookEx(HookHandle)
end;

procedure TForm1.FormCreate(Sender: TObject);

begin
if not sethook then showmessage("Не удалось установить ловушку...");
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not Removehook then showmessage("Не удалось снять ловушку...");
end;

end.


Наверх

Титульная страница Поиск, карта сайта Написать письмо