Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1161334225
alexvan
2006-10-20 12:50
2006.12.03
Вопрос по TCustomDBGrid


2-1163346433
Stan
2006-11-12 18:47
2006.12.03
Published свойство


2-1163670719
galyc
2006-11-16 12:51
2006.12.03
правильность ввода пути


9-1139388127
Creative
2006-02-08 11:42
2006.12.03
Save/Load


6-1152875173
NaLom
2006-07-14 15:06
2006.12.03
Блок инета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский