Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.021 c
15-1198396172
ДжонС
2007-12-23 10:49
2008.02.03
DEC - > HEX


15-1198672117
Юрий Зотов
2007-12-26 15:28
2008.02.03
Хотя сегодня и не пятница, но... (задачка от Васи Пупкина)


2-1200160636
петрович07
2008-01-12 20:57
2008.02.03
imagelist


15-1199108732
philin
2007-12-31 16:45
2008.02.03
Windows Mobile


15-1197891695
data
2007-12-17 14:41
2008.02.03
а кто куда носит компы в ремонт?