Текущий архив: 2008.02.03;
Скачать: CL | DM;
ВнизЕсть ли способы перехвата клавиш... Найти похожие ветки
← →
golum (2007-06-19 18:29) [0]...только без DLL? Если нет, то так и скажите.
← →
begin...end © (2007-06-19 18:30) [1]Есть. Для WinXP подойдёт низкоуровневый глобальный хук WH_KEYBOARD_LL.
← →
golum (2007-06-19 18:39) [2]глобальный? значит придется ДЛЛ писать всё таки?
← →
begin...end © (2007-06-19 18:54) [3]> golum (19.06.07 18:39) [2]
Нет, DLL писать не придётся. Вы какой-то странный, ей-богу.
← →
golum (2007-06-19 19:05) [4]но на сколько я знаю для глобального хука надо DLL писать. Или ваш случай особенный. Скажите хоть вкратце, как такой хук ставить
← →
begin...end © (2007-06-19 19:15) [5]> golum (19.06.07 19:05) [4]
В интернете есть много примеров по этой теме. Ключевое слово у Вас уже есть.
← →
golum (2007-06-19 19:17) [6]ладно, поищу
← →
Anatoly Podgoretsky © (2007-06-19 19:25) [7]> golum (19.06.2007 18:39:02) [2]
Для глобального обязательно.
← →
golum (2007-06-19 19:30) [8]я запутался: один говорит обязательно ДЛЛ делать, другой говорит нет. уж разберитесь, надо или нет
← →
Anatoly Podgoretsky © (2007-06-19 19:34) [9]> golum (19.06.2007 19:05:04) [4]
A global hook procedure can be called in the context of any application, so the procedure must be in a separate dynamic-link library (DLL) module.
← →
Anatoly Podgoretsky © (2007-06-19 19:35) [10]> golum (19.06.2007 19:30:08) [8]
А чего разбираться, у тебя что справки нет, ну так читай выписку из нее.
← →
golum (2007-06-19 19:37) [11]ну так а мне надо сделать перехват без DLL, чтобы был только файл программы
← →
Anatoly Podgoretsky © (2007-06-19 20:00) [12]> golum (19.06.2007 19:37:11) [11]
Ты прочитал выписку, справку или как?
← →
golum (2007-06-19 20:07) [13]прочитал, понял что без ДЛЛ нельзя
← →
etc (2007-06-19 20:08) [14]читать тут
http://msdn2.microsoft.com/en-us/library/ms644985.aspx.
пример (из гугл)
http://immortals.fake.hu/delphiportal/modules.php?name=News&file=article&sid=2699
← →
golum (2007-06-19 20:18) [15]Но можно же перехватывать без хуков и длл. мне друг(он вроде бы Cj здесь)дал самоде-ный компонент вот только .dcu, пере-щий кл-и
← →
golum (2007-06-19 20:22) [16]...а исходный код давать не хочет, спросил его говорит компо-нт без хуков, ну он вообщето их и не любит ставить
← →
A.L.E.X.A.N.D.E.R © (2007-06-19 23:54) [17]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
Вроди всё .
← →
golum (2007-06-20 02:02) [18]а если прога без форм, хнтя она у меня и так без форм, то как в таком случае
← →
Германн © (2007-06-20 02:19) [19]
> golum (20.06.07 02:02) [18]
>
> а если прога без форм, хнтя она у меня и так без форм, то
> как в таком случае
>
А погуглить или хотя бы пояндексить по поводу WH_KEYBOARD_LL слабо?
← →
Германн © (2007-06-20 02:31) [20]Тогда может быть поймёшь, что в [1] был дан верный ответ для указанной ОС. Примеры использования найдёшь там же.
← →
Cj © (2007-06-20 03:35) [21]18-> 1.Я тебе компонент дал? 2.Если компонент работает, зачем тебе исходник? 3.Я замучился удалять с твоих флешек WINFILE.EXE !
← →
golum (2007-06-20 03:44) [22](решил заглянуть?) 21-> ну скажи хоть, какими ф-ями пользуешся
← →
Cj © (2007-06-20 04:20) [23]
> golum (20.06.07 03:44) [22]
> (решил заглянуть?)
да
> ну скажи хоть, какими ф-ями пользуешся
я уже тебе говорил: GetKeyState в цикле, с таймером в потоке
← →
golum (2007-06-20 05:58) [24]GetKeyState в цикле, с таймером в потоке??? как это понимать люди?, может кто-нибуь из вас делал так, объясните плиз
← →
Cj © (2007-06-20 10:46) [25]
> как это понимать люди?
На скачивай, или зайди ко мне.
http://code.progler.ru/get/439
ps Скачивать тот который 2kb, первый-это я просто .pas добавил.
← →
Eraser © (2007-06-20 23:09) [26]> [9] Anatoly Podgoretsky © (19.06.07 19:34)
для low level не надо, т.к. процедура ловушки выполняется в контексте потока, который устанавливал её, механизм вызова отличается от обычных hook"ов.
← →
x3m (2007-06-23 11:32) [27]
> GetKeyState в цикле, с таймером в потоке??? как это понимать
> люди?, может кто-нибуь из вас делал так, объясните плиз
Тут и объяснять нечего. Способ довольно часто юзаемый. Задаётся системный таймер, каждый раз вызывается функция опрашивающая клаву на предмет нажатых клавишь. Почитай sdk по функции GetKeyState. Там про неё довольно подробно написано.
У мня воспрос другой к присутствующим: как узнать какой язык выбран без отслеживания сочетаний клавишь???
← →
Anatoly Podgoretsky © (2007-06-23 13:49) [28]> x3m (23.06.2007 11:32:27) [27]
GetKeyboardLayoutName
← →
x3m (2007-06-23 14:48) [29]спасибо)
← →
x3m (2007-06-24 13:21) [30]GetKeyboardLayoutName(buffer);
case ((StrToInt("$"+ Buffer)) and $03FF) of
LANG_ENGLISH: ShowMessage("Eng");
LANG_RUSSIAN: ShowMessage("Rus"); end;
МОжет кто-нибудь сказать почему этот код всегда выдаёт английский?? Используется в ДЛЛ.
← →
Leonid Troyanovsky © (2007-06-24 21:43) [31]
> x3m (24.06.07 13:21) [30]
> МОжет кто-нибудь сказать почему этот код всегда выдаёт английский?
В приведенном фрагменте ошибок нет, хотя, конечно,
код можно сделать немного компактней и точней.
--
Regards, LVT.
← →
DVM © (2007-06-24 23:51) [32]
> У мня воспрос другой к присутствующим: как узнать какой
> язык выбран без отслеживания сочетаний клавишь???
Можно опять же хуками, например WH_SHELL. Кстати, этот тип ловушки может быть установлен и без помощи dll. Точнее с помощью dll которая есть по-любому в системе - это одна из dll эксплорера.
← →
x3m (2007-06-26 16:23) [33]
> Можно опять же хуками, например WH_SHELL
Я хочу без всяких хуков определять язык в длл-библиотеке. Можно ли как то это сделать, с помощью функции которую подсказал Анатолий? Может быть она определяет язык неверно так как раскладка у каждого приложения своя?
← →
Eraser © (2007-06-26 18:07) [34]> [33] x3m (26.06.07 16:23)
именно, раскладка у каждого приложения, а точнее даже потока, своя. Чтобы определить раскладку у конкретного потока, нужно внедрить в целевое приложение свою dll (хук для этого идеально подойдет), а потом отослать в какое-либо окно свое пользовательское сообщение, а внутри хука перехватить это сообщение, получить идентификатор раскладки и передать его в основное приложение, к примеру, с пом. тоже какого-либо пользовательского сообщения.
← →
Eraser © (2007-06-26 18:10) [35]так же гляньте GetKeyboardLayout.
← →
x3m (2007-06-30 13:28) [36]Большое спасибо за советы. Помогло)
Страницы: 1 вся ветка
Текущий архив: 2008.02.03;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.067 c