![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Есть ли способы перехвата клавиш... [D7, WinXP]
golum © (2007-06-19 18:29:00)...только без DLL? Если нет, то так и скажите.
x3m (2007-06-30 13:28:00) [1]Большое спасибо за советы. Помогло)
Eraser (2007-06-26 18:10:00) [2]так же гляньте GetKeyboardLayout.
Eraser (2007-06-26 18:07:00) [3]> [33] x3m (26.06.07 16:23)
именно, раскладка у каждого приложения, а точнее даже потока, своя. Чтобы определить раскладку у конкретного потока, нужно внедрить в целевое приложение свою dll (хук для этого идеально подойдет), а потом отослать в какое-либо окно свое пользовательское сообщение, а внутри хука перехватить это сообщение, получить идентификатор раскладки и передать его в основное приложение, к примеру, с пом. тоже какого-либо пользовательского сообщения.
x3m (2007-06-26 16:23:00) [4]
> Можно опять же хуками, например WH_SHELL
Я хочу без всяких хуков определять язык в длл-библиотеке. Можно ли как то это сделать, с помощью функции которую подсказал Анатолий? Может быть она определяет язык неверно так как раскладка у каждого приложения своя?
DVM (2007-06-24 23:51:00) [5]
> У мня воспрос другой к присутствующим: как узнать какой
> язык выбран без отслеживания сочетаний клавишь???
Можно опять же хуками, например WH_SHELL. Кстати, этот тип ловушки может быть установлен и без помощи dll. Точнее с помощью dll которая есть по-любому в системе - это одна из dll эксплорера.
Leonid Troyanovsky (2007-06-24 21:43:00) [6]
> x3m (24.06.07 13:21) [30]
> МОжет кто-нибудь сказать почему этот код всегда выдаёт английский?
В приведенном фрагменте ошибок нет, хотя, конечно,
код можно сделать немного компактней и точней.
--
Regards, LVT.
x3m (2007-06-24 13:21:00) [7]GetKeyboardLayoutName(buffer);
case ((StrToInt('$'+ Buffer)) and $03FF) of
LANG_ENGLISH: ShowMessage('Eng');
LANG_RUSSIAN: ShowMessage('Rus'); end;
МОжет кто-нибудь сказать почему этот код всегда выдаёт английский?? Используется в ДЛЛ.
x3m (2007-06-23 14:48:00) [8]спасибо)
Anatoly Podgoretsky (2007-06-23 13:49:00) [9]> x3m (23.06.2007 11:32:27) [27]
GetKeyboardLayoutName
x3m (2007-06-23 11:32:00) [10]
> GetKeyState в цикле, с таймером в потоке??? как это понимать
> люди?, может кто-нибуь из вас делал так, объясните плиз
Тут и объяснять нечего. Способ довольно часто юзаемый. Задаётся системный таймер, каждый раз вызывается функция опрашивающая клаву на предмет нажатых клавишь. Почитай sdk по функции GetKeyState. Там про неё довольно подробно написано.
У мня воспрос другой к присутствующим: как узнать какой язык выбран без отслеживания сочетаний клавишь???
Eraser (2007-06-20 23:09:00) [11]> [9] Anatoly Podgoretsky © (19.06.07 19:34)
для low level не надо, т.к. процедура ловушки выполняется в контексте потока, который устанавливал её, механизм вызова отличается от обычных hook'ов.
Cj (2007-06-20 10:46:00) [12]
> как это понимать люди?
На скачивай, или зайди ко мне.
http://code.progler.ru/get/439
ps Скачивать тот который 2kb, первый-это я просто .pas добавил.
golum (2007-06-20 05:58:00) [13]GetKeyState в цикле, с таймером в потоке??? как это понимать люди?, может кто-нибуь из вас делал так, объясните плиз
Cj (2007-06-20 04:20:00) [14]
> golum (20.06.07 03:44) [22]
> (решил заглянуть?)
да
> ну скажи хоть, какими ф-ями пользуешся
я уже тебе говорил: GetKeyState в цикле, с таймером в потоке
golum (2007-06-20 03:44:00) [15](решил заглянуть?) 21-> ну скажи хоть, какими ф-ями пользуешся
Cj (2007-06-20 03:35:00) [16]18-> 1.Я тебе компонент дал? 2.Если компонент работает, зачем тебе исходник? 3.Я замучился удалять с твоих флешек WINFILE.EXE !
Германн (2007-06-20 02:31:00) [17]Тогда может быть поймёшь, что в [1] был дан верный ответ для указанной ОС. Примеры использования найдёшь там же.
Германн (2007-06-20 02:19:00) [18]
> golum (20.06.07 02:02) [18]
>
> а если прога без форм, хнтя она у меня и так без форм, то
> как в таком случае
>
А погуглить или хотя бы пояндексить по поводу WH_KEYBOARD_LL слабо?
golum (2007-06-20 02:02:00) [19]а если прога без форм, хнтя она у меня и так без форм, то как в таком случае
A.L.E.X.A.N.D.E.R (2007-06-19 23:54:00) [20]1)Объявляем процедуру :
procedure WMHotKey(var Mess:TWMHotKey);message WM_HOTKEY;
2)Регистрируем клавиши , чаще всего в процедуре создания формы :
RegisterHotKey(Handle, 1 ,0 , vk_F5);
// 1 - номер , под каким мы в дальнейшем будем работать с клавишей
3) Убираем регистрацию клавиши , чаще в "OnClose" формы :
UnregisterHotKey(Handle, 1);
4)И под конец пишим саму процедуру , в которой будем писать код , который нужен нам на опред. клавишу :
procedure TForm1.WMHotKey(var Mess: TWMHotKey);
begin
if mess.HotKey = 1 then ....
//1 - номер , который мы объявили
end
Вроди всё .