Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Вниз

Есть ли способы перехвата клавиш...   Найти похожие ветки 

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.052 c
15-1198677259
Ega23
2007-12-26 16:54
2008.02.03
поделитесь ссылкой


15-1198658013
user_
2007-12-26 11:33
2008.02.03
Tray


6-1179759600
Nucer
2007-05-21 19:00
2008.02.03
Как определить, что соединение разорвано?


4-1183109513
евнен
2007-06-29 13:31
2008.02.03
форматирование диска без участия пользователя


15-1198592492
Astaldo
2007-12-25 17:21
2008.02.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский