Форум: "Основная";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизОпределить путь приложения в обработке хука 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c