![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Cristall512 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 29.7.2006 Репутация: нет Всего: нет |
Нужно написать невидимую программу, реагирующую на горячие клавиши. По-моему, это делается с помощью перехвата клавиатуры. Вот фрагмент кода:
А вот фрагмент из DLL (чисто для теста):
Программа должна реагировать на нажатие SHIFT, но этого не происходит. Где ошибка? Да, ещё: если поставить вызов блокнота в тело KeyboardProc, тоже ничего не происходит, то есть программа вообще не реагирует на события клавиатуры Это сообщение отредактировал(а) Cristall512 - 8.1.2011, 19:05 |
||||
|
|||||
| Cristall512 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 29.7.2006 Репутация: нет Всего: нет |
Добавил кое-что:
Теперь блокнот всё равно не вызывается, то есть SetWindowsHookEx не работает... почему? У меня Win7 64 |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
советую Вам мое более красивое решение. клик + не все комбинации легальными способами можно перехватить , в операционной системе защита стоит . Это сообщение отредактировал(а) bra1ny - 8.1.2011, 20:26 --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| Cristall512 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 29.7.2006 Репутация: нет Всего: нет |
"Хочется отметить, что в Висте механизм регистрации горячих клавиш немного изменен"
в семёрке, наверное, тоже. у меня семёрка |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
изменен тем , что там не список хоткеев а хэш таблица.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Красивое решение это делать на ассемблере ? нет уж спасибо.
Какие например нельзя перехватить ???? Чето не припомню. Но точно знаю что просто так не перехватишь кнопку Sleep ибо ее раньше всего перехватит винда, а нажатие в систему не выдаст. Перехватить можно если поставить свой драйвер. 2 Cristall512 Вот почитай что попроще. http://www.xakep.ru/post/29476/default.asp?print=true -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
| Cristall512 |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 29.7.2006 Репутация: нет Всего: нет |
непонимаю... как там обошлись без длл?
.................
где и как они вызываются, я так и не понял. где SetWindowsHookEx? как они обошлись без этой функции? и помогите мне, пожалуйста, найти ошибку в МОЁМ коде... вот новая длл:
я выяснил, что в основной программе возможно получить адрес ф-ции mykey, но невозможно получить адрес KeyboardProc. Может, в dll функцию типа LRESULT CALLBACK надо описывать как-то по-другому? при наведении курсора мыши на CALLBACK всплывает подсказка #define CALLBACK __stdcall, но у меня стоит соглашение __cdecl. При соглашении __stdcall тоже не работает Это сообщение отредактировал(а) Cristall512 - 9.1.2011, 12:06 |
||||||||
|
|||||||||
| Cristall512 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 29.7.2006 Репутация: нет Всего: нет |
убрал CALLBACK, заработало, но функция вызывается только один раз... как изменить код, оставив CALLBACK?
|
|||
|
||||
| Cristall512 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 29.7.2006 Репутация: нет Всего: нет |
проблема решена. с модификатором callback к имени функции при компиляции добавляется префикс _ и постфикс @12
|
|||
|
||||
| Cristall512 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 29.7.2006 Репутация: нет Всего: нет |
так... ещё проблема. вот код:
почему-то при нажатии клавиш при активном окне какого-либо приложения вызывается несколько блокнотов, а должен один. При активном окне каталога или калькулятора (и, наверное, много ещё чего) блокнот не вызывается вообще, а окно перестаёт реагировать на нажатия мыши |
||||
|
|||||
| bra1ny |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
Так на си написано же.
crtl+alt+del. --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |