![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Клавиатурный шпион [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. Почему символы только на английском показываются, т.
> е. хоть даже раскладка клавиатуры будет русской, символы
> всеравно на английском показываются? Можно ли это как-то
> исправить?
Почитай как работает клава.