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

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

Клавиатурный шпион [D7, WinXP]


Dmitry_177 ©   (2006-07-26 18:19:00) 

Попробовал сделать свой клавиатурный шпион, чисто из интереса как это работает, не подумайте ничего плохого.. Сделал я так, в библиотеке:

var
 SysHook: HHook = 0;

function SysMsgProc(nCode: integer; wParam: word; lParam: longint): longint; stdcall;
var
 ModuleFileName: array[0..MAX_PATH-1] of Char;
 KeyName: array[0..16] of Char;
begin
 if (nCode = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then
   begin
     GetKeyNameText(lParam, KeyName, SizeOf(KeyName));
     GetModuleFileName(0, ModuleFileName, SizeOf(ModuleFileName));
     ShowMessage(ModuleFileName + #10#13 + KeyName);
     Result := 0;
   end
 else
   Result := CallNextHookEx(SysHook, nCode, wParam, lParam);
end;

procedure RunHook; export; stdcall;  // для запуска хука
begin
 SysHook := SetWindowsHookEx(WH_KEYBOARD, @SysMsgProc, HInstance, 0);
end;

procedure StopHook; export; stdcall;  // для остановки хука
begin
 UnHookWindowsHookEx(SysHook);
 SysHook := 0;
end;

Все работает, при каждом вводе символа в любом окне, выскакивает окно с символом и путь программы в котором был этот символ введен... Но у меня появилось 2 вопросика:
 1. Почему символы только на английском показываются, т.е. хоть даже раскладка клавиатуры будет русской, символы всеравно на английском показываются? Можно ли это как-то исправить?
 2. Можно ли узнать еще заголовок окна программы?


KilkennyCat   (2006-07-26 23:46:00) [1]

http://www.firststeps.ru/mfc/winapi/keyb/r.php?23


Dmitry_177   (2006-07-26 20:12:00) [2]

Пробовал без функции GetKeyNameText, так:

var
KeyBS: TKeyboardState;
BufKeyName: array[0..16] of Char;
...

GetKeyBoardState(KeyBS);
ToAsciiEx(wParam, 0, KeyBS, BufKeyName, 0, GetKeyboardLayout(0));

выводит не правильно символы.. Подскажите пожалуйста...


Dmitry_177   (2006-07-26 19:51:00) [3]

Я как понимаю нужно использовать функцию ToAsciiEx, подскажите как ее использовать, что-то я не разберусь, мсдн читал про нее...
Подскажите пожалуйста еще по второму вопросу...


PSPF2003   (2006-07-26 18:32:00) [4]


>  1. Почему символы только на английском показываются, т.
> е. хоть даже раскладка клавиатуры будет русской, символы
> всеравно на английском показываются? Можно ли это как-то
> исправить?

Почитай как работает клава.


Наверх

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