Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Хук WH_KEYBOARD_LL


Автор: Dmitry_177 19.10.2006, 11:40
Вопросик по хуку WH_KEYBOARD_LL, как узнать какая была нажата клавиша в зависимости от раскладки клавиатуры? У меня в коде показываются только английские буквы, хоть даже если ввод происходит русскими..

Код

type
 PKbdDllHookStrukt = ^TKbdDllHookStrukt;
 TKbdDllHookStrukt = record
   vkCode: DWORD;
   scanCode: DWORD;
   flags: DWORD;
   time: DWORD;
   dwExtraInfo: PDWORD;
 end;

var
 KeyHook: HHook = INVALID_HANDLE_VALUE;

function KeyHookProc(nCode: Integer; WParam: Word; LParam: LongInt): LongInt; stdcall;
var
 KeyState: TKeyboardState;
 KeyName: PChar;
begin
if (nCode = HC_ACTION) and (WParam = WM_KEYDOWN) then
   begin
     GetKeyboardState(KeyState);
     New(KeyName);
     ToAsciiEx(PKbdDllHookStrukt(LParam)^.vkCode, 0, KeyState, KeyName, 0, GetKeyboardLayout(0));

     Write(LogFile, KeyName^);
     Flush(LogFile);

     Dispose(KeyName);
     KeyName := nil;
     Result := 0;
   end
 else
   Result := CallNextHookEx(KeyHook, nCode, WParam, LParam);
end;

Автор: Romikgy 19.10.2006, 13:52
Цитата(Dmitry_177 @  19.10.2006,  10:40 Найти цитируемый пост)
от раскладки клавиатуры?

http://forum.vingrad.ru/index.php?showtopic=110439&view=findpost&p=842660

Автор: Dmitry_177 19.10.2006, 19:52
Я как понимаю все дело в функции GetKeyboardLayout(0), 0 - это текущий процесс, т.е. я как понимаю сама программа, а вот как узнать процесс в котором ловится хук?

Автор: Romikgy 19.10.2006, 20:31
Цитата(Dmitry_177 @  19.10.2006,  18:52 Найти цитируемый пост)
а вот как узнать процесс в котором ловится хук?

имхо это уже из другой оперы
и кто мешает GetCurrentThreadId юзать ведь у тя dll ка и она грузатся ко многим процессам и в них запускается

Автор: Dmitry_177 19.10.2006, 23:46
Забыл сказать, WH_KEYBOARD_LL я ловлю в программе...

Автор: bems 25.10.2006, 02:02
Romikgy, ..._LL хуки через спец. месагу передаются в контекст процесса установившего хук

Автор: Romikgy 25.10.2006, 08:59
Dmitry_177, где этот код находится? (тот что представлен)

Автор: Dmitry_177 25.10.2006, 13:23
Romikgy, В программе

Автор: Romikgy 25.10.2006, 15:01
тогда могу посоветовать такую связку GetActiveWindow
по окну ищем процесс CreateToolhelp32Snapshot+TH32CS_SNAPPROCESS    
и у процесса спрашиваем GetKeyboardLayout

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)