Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Есть ли способы перехвата клавиш... [D7, WinXP]


Страницы:   1 2

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


Вроди всё .


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо