Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определить путь приложения в обработке хука 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]

плакать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо