Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

Определить путь приложения в обработке хука WH_KEYBOARD_LL   Найти похожие ветки 

 
Dmitry_177   (2006-10-19 00:11) [0]

Обрабатываю хук WH_KEYBOARD_LL в программе, если обрабатывать в библиотеке то можно WH_KEYBOARD использовать, и там можно узнать путь к программе в котором происходит ввод с клавиатуры функцией GetModuleFileName, а как быть в такой ситуации?


 
Ketmar ©   (2006-10-19 00:50) [1]

плакать.


 
Сергей М. ©   (2006-10-19 09:17) [2]


> Dmitry_177   (19.10.06 00:11)


1. Получить хэндл окна, имеющего фокус ввода.
2. Получить Id процесса, создавшего окно.
3. Получить полный путь к исп.файлу, из которого был стартован процесс приложения.


 
Dmitry_177   (2006-10-19 12:18) [3]

Еще один вопросик по хуку 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;


 
DVM ©   (2006-10-19 12:20) [4]


> Dmitry_177   (19.10.06 12:18) [3]

Ты не понимаешь сути. Хук отслеживает нажатия кнопок клавиатуры, а не ввод БУКВ. Принимая во внимание состояние Alt, Shift, Ctrl и т.д. и язык ввода - получаем символ.


 
Сергей М. ©   (2006-10-19 12:24) [5]


> Dmitry_177   (19.10.06 12:18) [3]


var
 KeyName: PChar;
...
     New(KeyName); //<- сам-то понял, что ты тут здесь написал ?
...
    Dispose(KeyName);
    KeyName := nil;


 
Dmitry_177   (2006-10-19 12:32) [6]

PChar, это же всего лишь указатель на нуль-терминальную строку.. Это же ведь типизированный указатель, для него можно выделить память функцией New.


 
Ketmar ©   (2006-10-19 12:37) [7]

>[6] Dmitry_177 19-Oct-2006, 12:32
>PChar, это же всего лишь указатель на нуль-терминальную
>строку.. Это же ведь типизированный указатель, для него
>можно выделить память функцией New.
опять??? доколе? а ещё можно заливать в "запорожец" дизтопливо. а толку?


 
DVM ©   (2006-10-19 12:44) [8]


> Это же ведь типизированный указатель, для него можно выделить
> память функцией New.

Для этого есть специальные функции.


 
Сергей М. ©   (2006-10-19 12:55) [9]


> Dmitry_177   (19.10.06 12:32) [6]
>
> PChar, это же всего лишь указатель на нуль-терминальную
> строку


Вот ты и запросил ровно 4 (!) байта при этом)


 
Юрий Зотов ©   (2006-10-19 12:57) [10]

> WParam: Word;

Снова и снова... одно и то же... блин...


 
Dmitry_177   (2006-10-19 13:03) [11]

WParam: Word;, а что не так?


 
Сергей М. ©   (2006-10-19 13:06) [12]


> что не так?


type
 WPARAM = Longint;

!!


 
Dmitry_177   (2006-10-19 13:15) [13]

А это только в хуках или вообще везде и в обработке сообщений объявлять как longint?


 
Сергей М. ©   (2006-10-19 13:17) [14]

Для Win32 - везде.

Читай справку.


 
Dmitry_177   (2006-10-19 13:31) [15]

По поводу выделения памяти PChar может так будет лучше?

GetMem(KeyName, 3);
...

FreeMem(KeyName);


или еще меньше байтов надо выделить?


 
Romkin ©   (2006-10-19 13:36) [16]

И насчет преобразования в символ - см ToAscii


 
Dmitry_177   (2006-10-19 14:25) [17]

Что вы скажете по поводу Dmitry_177   (19.10.06 13:31) [15]?

На счет ToAscii смотрел.. в коде там она используется...



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
15-1163416926
wezzz
2006-11-13 14:22
2006.12.03
Определить без тестера 0 или заземление?


2-1163535181
DoktorX
2006-11-14 23:13
2006.12.03
А вы не могли бы мне подсказать как сравнить по пикселам два ч/б


15-1163158307
Андрей ББББ
2006-11-10 14:31
2006.12.03
проблемы с Windows XP


15-1163637724
Tirael
2006-11-16 03:42
2006.12.03
я тоже нихочу никого обидеть но...


2-1162990447
Okey
2006-11-08 15:54
2006.12.03
record для новичка