![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определить путь приложения в обработке хука WH_KEYBOARD_LL [D7, WinXP]
Dmitry_177 © (2006-10-19 00:11:00)Обрабатываю хук WH_KEYBOARD_LL в программе, если обрабатывать в библиотеке то можно WH_KEYBOARD использовать, и там можно узнать путь к программе в котором происходит ввод с клавиатуры функцией GetModuleFileName, а как быть в такой ситуации?
Dmitry_177 (2006-10-19 14:25:00) [1]Что вы скажете по поводу Dmitry_177 (19.10.06 13:31) [15]?
На счет ToAscii смотрел.. в коде там она используется...
Romkin (2006-10-19 13:36:00) [2]И насчет преобразования в символ - см ToAscii
Dmitry_177 (2006-10-19 13:31:00) [3]По поводу выделения памяти PChar может так будет лучше?
GetMem(KeyName, 3);
...
FreeMem(KeyName);
или еще меньше байтов надо выделить?
Сергей М. (2006-10-19 13:17:00) [4]Для Win32 - везде.
Читай справку.
Dmitry_177 (2006-10-19 13:15:00) [5]А это только в хуках или вообще везде и в обработке сообщений объявлять как longint?
Сергей М. (2006-10-19 13:06:00) [6]
> что не так?
type
WPARAM = Longint;
!!
Dmitry_177 (2006-10-19 13:03:00) [7]WParam: Word;, а что не так?
Юрий Зотов (2006-10-19 12:57:00) [8]> WParam: Word;
Снова и снова... одно и то же... блин...
Сергей М. (2006-10-19 12:55:00) [9]
> Dmitry_177 (19.10.06 12:32) [6]
>
> PChar, это же всего лишь указатель на нуль-терминальную
> строку
Вот ты и запросил ровно 4(!) байта при этом)
DVM (2006-10-19 12:44:00) [10]
> Это же ведь типизированный указатель, для него можно выделить
> память функцией New.
Для этого есть специальные функции.
Ketmar (2006-10-19 12:37:00) [11]>[6] Dmitry_177 19-Oct-2006, 12:32
>PChar, это же всего лишь указатель на нуль-терминальную
>строку.. Это же ведь типизированный указатель, для него
>можно выделить память функцией New.
опять??? доколе? а ещё можно заливать в "запорожец" дизтопливо. а толку?
Dmitry_177 (2006-10-19 12:32:00) [12]PChar, это же всего лишь указатель на нуль-терминальную строку.. Это же ведь типизированный указатель, для него можно выделить память функцией New.
Сергей М. (2006-10-19 12:24:00) [13]
> Dmitry_177 (19.10.06 12:18) [3]
var
KeyName: PChar;
...
New(KeyName); //<- сам-то понял, что ты тут здесь написал ?
...
Dispose(KeyName);
KeyName := nil;
DVM (2006-10-19 12:20:00) [14]
> Dmitry_177 (19.10.06 12:18) [3]
Ты не понимаешь сути. Хук отслеживает нажатия кнопок клавиатуры, а не ввод БУКВ. Принимая во внимание состояние Alt, Shift, Ctrl и т.д. и язык ввода - получаем символ.
Dmitry_177 (2006-10-19 12:18:00) [15]Еще один вопросик по хуку 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;
Сергей М. (2006-10-19 09:17:00) [16]
> Dmitry_177 (19.10.06 00:11)
1. Получить хэндл окна, имеющего фокус ввода.
2. Получить Id процесса, создавшего окно.
3. Получить полный путь к исп.файлу, из которого был стартован процесс приложения.
Ketmar (2006-10-19 00:50:00) [17]плакать.