Вверх ↑
Этот топик читают: Гость
Ответов: 9
Рейтинг: 0
#1: 2012-07-09 08:42:18 ЛС | профиль | цитата
Доброе время суток.

Мышка Prestigio, на боковые кнопки которй назначена комбинация клавиш Ctrl Alt + и Ctrl Alt -. Моя программка назначает в системе те же клавиши, Ctrl Alt + и Ctrl Alt - и эмулирует соответственно коды нажатия клавиш клавиатуры 107 и 109, драйвер клавиатуры Genius перехватывает эмуляцию этих клавиш 107 и 109 и делает в системе громкость больше или громкость меньше, таким образом программа позволяет регулировать уровень громкости с мышки. Так вот. Как программа эта схема отлично работает, громкость регулируется.

code_28429.txt

А как сервис нет, вообще ничего не происходит.

code_28430.txt

А я бы хотел использовать эту программу именно как сервис. Помогите пожалуйста разобраться почему не работает как сервис? Инсталирую сервис VCM_Service.exe /install, запускаю службу net start VCM_Service.exe но не работает. OS Windows 7. Подскажите пожалуйста, что не так делаю?
карма: 0

0
файлы: 2code_28429.txt [947B] [160], code_28430.txt [1KB] [220]
Ответов: 3889
Рейтинг: 362
#2: 2012-07-09 08:46:28 ЛС | профиль | цитата
Galf, у сервисов в современных системах физически штатно нет очереди собщений, так как и окон-то у них тоже нет. Глобальные горячие клавиши принимаются окнами(даже если оно невидимо). То, у чего нет окна, штатно принять сообщение о нажатии комбинации горячих клавиш не сможет.
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2012-07-09 09:11:52 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2025-01-17 15:35:18
карма: 0

0
Ответов: 9
Рейтинг: 0
#4: 2012-07-09 10:38:41 ЛС | профиль | цитата
1nd1g0, Тоесть не KeyEvent а GHotKey конечно, ошибся.
------------ Дoбавленo в 10.38:
А перехват нажатия клавиш клавиатуры не на основе оконных сообщений в HiAsm можно как нибудь реализовать?
карма: 0

0
Ответов: 3889
Рейтинг: 362
#5: 2012-07-09 10:49:46 ЛС | профиль | цитата
Galf, в современных ОС старательно блокируют попытки сервисов иметь интерфейс, это обходится всякими шаманскими способами, но в Вашем случае, требующем регистрации в очереди сообщений, явно либо приложение пользовательского режима нужно, либо попробовать мою статью: Keyboard:global_keys_capture
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#6: 2012-07-09 10:49:54 ЛС | профиль | цитата
Galf, попробуй коды 174,175.
173 - выключение звука.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26324
Рейтинг: 2148
#7: 2012-07-09 10:58:29 ЛС | профиль | цитата
37.99.108.10 писал(а):
в сервис вставляться не должен

Невозможность вставки чего-то куда-то реализуется на уровне среды
------------ Дoбавленo в 10.58:
1nd1g0, а если попытаться регулярно прокручивать глобальную очередь событий



Add(NTService,2953706,196,126)
{
link(onStep,12985013:doLoopMessages,[])
}
Add(Application,12985013,259,126)
{
Point(doLoopMessages)
}

карма: 22

0
Ответов: 3889
Рейтинг: 362
#8: 2012-07-09 11:13:57 ЛС | профиль | цитата
nesco, вроде, в NTService прокутка уже есть. А вот больше никакой работы с очередью сообщений нет, ЕМНИП.
------------ Дoбавленo в 11.08:
Пардон, наврал, там прокрутка в случае постановки на паузу.
------------ Дoбавленo в 11.13:
37.99.108.10 писал(а):
принудительно в сервис какое либо окно

Компонент GHotKey именно это и делает. Он пытается создать невидимое окно нулевого размера, которое будет принимать нажатия глобальных клавиш. Подключитесь к onError и посмотрите, не выходит ли что-нибудь оттуда, скорее всего это будет код 1 или 2 - не удалось создать классокно. А не удалось потому, что это служба, которой запрещено иметь интерфейс с пользователем. Вернее, страшная тайна заключается в том, что у служб по умолчанию свой контекст системных объектов(не путать с правами, права у службы могут быть чьи угодно, контекст - свой). Теоретически можно "затащить" службу в контекст нужного пользователя и дать доступ к его рабочему столу, но это практически не имеет смысла т.к. требует массу телодвижений и получается обычное приложение, запущенное очень кривым способом. Гораздо умнее запускать приложение с невидимым окном. Если так хочется, можно делать это своей, подставной службой-загрузчиком. Популярный нынче метод у всяких навязчивых сервисов типа гугломейлояндексоквипа, не говоря уже о зловредах.
карма: 1

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#9: 2012-07-09 11:20:19 ЛС | профиль | цитата
1nd1g0 писал(а):
А не удалось потому, что это служба, которой запрещено иметь интерфейс с пользователем

Я вообще не пойму -- чем ТС не устраивает фоновое приложение
карма: 22

0
Ответов: 3889
Рейтинг: 362
#10: 2012-07-09 11:21:42 ЛС | профиль | цитата
nesco писал(а):
Я вообще не пойму -- чем не устраивает фоновое приложение

Я - тоже, см. пост выше.
------------ Дoбавленo в 11.21:
nesco, [offtop]хотя, есть кое что неприятное в фоновом приложении для меня, они у меня стабильно виснут через сутки работы на сервере. Но это давняя история, при перезапуске самих себя ещё сутки работает.[/offtop]
карма: 1

0
Ответов: 9
Рейтинг: 0
#11: 2012-07-09 11:54:02 ЛС | профиль | цитата
1nd1g0, На основе компонента Keyboard я тоже пробовал, но этот компонент не распознаёт коды мультимедийных клавиш, 174 и 175, нажимаешь громкость большеменьше - ничего не происходит, а обычные клавиши распознаёт конечно.

Tad, действительно коды 174 и 175, 107 и 109 это я при написании сообщения попутал невнимательно.

nesco, Так тоже пробовал, Но видимо если нет вообще никаких окон, то и прокручивать видимо нечего.

Жаль. програмка бы запускалась от системы, работала бы в фоне, это было бы рационально так как програмка должна ведь работать постоянно да и функциональность её минимальна, а громкость с мышки бы регулировалась, это удобно, а так, надо затевать автозагрузку, ешё один "250ый") процесс в Диспетчере Задач, вобщем не то. Больше ни у кого никаких соображений нет?
------------ Дoбавленo в 11.54:
nesco, Да не то что бы не устраивает, ради одной функции которую выполняет программа затевать автозагрузку и очередной процесс в диспетчере задач как то не то, так бы она работала сервисом и я бы про неё забыл. Ну и зная, что в HiAsm есть такой компонент - сервис, решил воспользоваться, однако узнал здесь, на форуме, что компонент с окнами не работает. Зайду с другой стороны, нет ли возможности обрабатывать нажатия горячих клавиш способом не очереди оконных сообщений?
карма: 0

0
Ответов: 3889
Рейтинг: 362
#12: 2012-07-09 12:01:09 ЛС | профиль | цитата
Galf писал(а):
ешё один "250ый") процесс в Диспетчере Задач, вобщем не то

Можно подумать, сервис у Вас не будет "ещё одним процессом". Автозагрузка как раз гораздо проще танцев с бубном и сервисами. У меня есть фоновые приложения в трее, выполняют свои функции, но если там есть таймерыпотоки, то где-то через сутки они могут перестать работать. Для реакции на глобальные клавиши, по идее, не актуально, должно работать долго и без проблем. Я Вам даже больше скажу, я не поленился проверить - проводник без проблем позволяет повесить два ярлыка на рабочий стол, реагирующие на Ctrl Alt +-. Вешаем туда изменение громкости и всё. Этакий гиковский вариант, и никаких автозагрузок
------------ Дoбавленo в 12.01:
Galf писал(а):
нет ли возможности обрабатывать нажатия горячих клавиш способом не очереди оконных сообщений?

А как выглядит Ваша (не работающая?) схема на Keyboard или IC от Ivann, что я давал в своей статье?
карма: 1

0
Ответов: 4672
Рейтинг: 768
#13: 2012-07-09 12:10:03 ЛС | профиль | цитата
А в сервисе не получится поставить хук на нажатия клавиш?
карма: 26

0
Ответов: 3889
Рейтинг: 362
#14: 2012-07-09 12:19:58 ЛС | профиль | цитата
Netspirit писал(а):
А в сервисе не получится поставить хук на нажатия клавиш?

Если у него 64-хбитная система, то, по идее, он (хук) будет виртуализирован и приложения вне WOW64 всё равно будут ловить паразитные нажатия.
карма: 1

0
Ответов: 9
Рейтинг: 0
#15: 2012-07-09 12:59:11 ЛС | профиль | цитата
1nd1g0, "Если так хочется, можно делать это своей, подставной службой-загрузчиком. Популярный нынче метод у всяких навязчивых сервисов типа гугломейлояндексоквипа, не говоря уже о зловредах." Да, придётся, сделать службу-загрузчик, которая будет ещё помимо загрузки проверять есть ли фоновое приложение в процессах и если нет запускать, а саму прожку делать как фоновое приложение. Я просто не думал и не знал, что сервис работает таким образом и что ради того что бы приложение получило оконное сообщение нужно городить такой огород с службой-загрузчиком и запускаемым фоновым приложением, да и сам сервис тогда не нужен, толку от него, что он сможет только лишь перезапускать прожку.

"Я Вам даже больше скажу, я не поленился проверить - проводник без проблем позволяет повесить два ярлыка на рабочий стол, реагирующие на Ctrl Alt +-. Вешаем туда изменение громкости и всё. Этакий гиковский вариант, и никаких автозагрузок и" Я недавно поставил семёрку и решил попробовать сделать прожку полностью на HiAsm а с ярлыками у меня было раньше на XP правда я использова nircmd и лежали они
%USERPROFILE%Главное меню ПрограммыСтандартныеразвлечениеГромкость большеменьше.lnk так что этот способ я знаю, и nircmd подвисала при таком способе, т.е. нажимаешь на кнопочку мышки раз, два, а потом нужно ждать пока она обработает это и начнёт регулировать громкость, я предположил что может быть это не nircmd виновата а именно такой способ через ярлыки. Поэтому решил на новой системе сделать это минуя использование ярлыков поностью на HiAsm. Рискую вызвать Ваш гнев, но всё же спрошу, а зачем тогда HiAsm если есть ярлыки? такой замечательный элемент программирования)
------------ Дoбавленo в 12.31:
Netspirit, 1nd1g0, Не система X86. А это возможно поставить хук на нажатия клавиш?
------------ Дoбавленo в 12.38:
1nd1g0, моей схемы на Keyboard нет, а схема

Add(MainForm,12638894,315,196)
{
Caption="Пример использования Keyboard"
Point(MouseX)
Point(MouseY)
Point(onMouseDown)
}
Add(Timer,902923,315,245)
{
Interval=500
link(onTimer,11862857:doReadKey,[])
}
Add(Keyboard,11862857,378,245)
{
link(onReadKey,7463474:doCheck,[])
link(Key,11357661:Text,[])
}
Add(CheckBox,7463474,441,245)
{
Left=200
Top=130
Caption="key"
}
Add(Edit,11357661,378,196)
{
Left=125
Top=130
Text="174"
}

Из справки HiAsm не работает с мультимедийными клавишами код которых 174, 175
------------ Дoбавленo в 12.59:
Прошу прощения я не увидел сначала Вариант от Ivann (на базе Inline Code). Этот код определяет клавиши 174, 175, но так как дельфи я не знаю спрошу, этот код работает через оконные сообщения? т.е. в сервисе он работать будет?
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)