управление программой с помощью кнопки
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
- Реклама
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
- Реклама
....Где-то видел обсуждалась такая темка, не смог найти:
Возможно подключить на USB кнопку напрямую (без всякой микроэлектроники) и регистрировать её нажатия?
Возможно подключить на USB кнопку напрямую (без всякой микроэлектроники) и регистрировать её нажатия?
Скелет колобка состоит из черепа.
да то есть выводит окно "завершить сейчас" или отмена, стандартное окно если прога не может выйти или при зависанииПухич писал(а):Т.е. как? При выключении винды такое требует, или когда?larik писал(а):кстати выплыл такой нюанс - выключится не может нормально требует завершить вручную... или эт тока у меня ?
Ответ: да, можо.Аксель писал(а): Возможно подключить на USB кнопку напрямую (без всякой микроэлектроники) и регистрировать её нажатия?
Дальше в теме изложено как это сделать.
Последний раз редактировалось Аксель Ср окт 07, 2009 08:48:20, всего редактировалось 1 раз.
Скелет колобка состоит из черепа.
врятли, а про то что вы говорите было на форуме схема на меге8 была, вот сылочка на другой http://forum.vingrad.ru/forum/s/c86df82 ... 05/15.html
Да, если нет петли обработки системных сообщений - так и будет. При выключении система посылает широковещательное сообщение всем прогаммам. Если есть ГУИ (особенно построенное во всяких билдерах) - оно автоматом обрабатывается, завершая приложение. Если это консольная программа - либо делать петлю обработки (что есть извращение), либо регистрировать её как службуТ.е. как? При выключении винды такое требует, или когда?
- Сообщения: 732
- Зарегистрирован: Пт авг 22, 2008 16:59:43
C Lpt портом проще простого, если надо стучи, скажу 
...про usb-кнопку
Еще раз немножко перефразирую (изначально вопрос про кнопку, не про определение кз)
Скажем так: если подключать к компу некое устройство USB, но без линии "DATA+", то комп определяет некое устройство подключено (но неправильно
)
А если отключить и линию "DATA-", то комп определяет, что некоторое устройство уже отключено.
А если опять подключить только линию "DATA-", то комп определяет некое устройство подключено.
Зная на каком порту USB находится это некоторое устройство, можно програмно этот порт отслеживать и обрабатывать USB кнопочку - дальше зависит от программиста.
В качестве некоторого устройства USB можно взять флешку.
Делаем небольшой переходничек USB-USB с кнопкой на "DATA-" и не подключенной "DATA+" (дабы не терять возможность пользования устройства USB по изначальному назначению) и вуаля: (при наличии готового софта) простая USB-кнопочка из разряда сделай сам по быстрому - готова.
=============
Здесь теоретически все должно быть ясно.
Так вот вопрос, чем можно заменить некое устройство USB (допустим нашу флешку)? Чем-то попроще и чем проще, тем лучше.
Еще раз немножко перефразирую (изначально вопрос про кнопку, не про определение кз)
Скажем так: если подключать к компу некое устройство USB, но без линии "DATA+", то комп определяет некое устройство подключено (но неправильно
А если отключить и линию "DATA-", то комп определяет, что некоторое устройство уже отключено.
А если опять подключить только линию "DATA-", то комп определяет некое устройство подключено.
Зная на каком порту USB находится это некоторое устройство, можно програмно этот порт отслеживать и обрабатывать USB кнопочку - дальше зависит от программиста.
В качестве некоторого устройства USB можно взять флешку.
Делаем небольшой переходничек USB-USB с кнопкой на "DATA-" и не подключенной "DATA+" (дабы не терять возможность пользования устройства USB по изначальному назначению) и вуаля: (при наличии готового софта) простая USB-кнопочка из разряда сделай сам по быстрому - готова.
=============
Здесь теоретически все должно быть ясно.
Так вот вопрос, чем можно заменить некое устройство USB (допустим нашу флешку)? Чем-то попроще и чем проще, тем лучше.
Скелет колобка состоит из черепа.
Протестировано.
-----------------------
Итого: ОТ +5 ----> R 3.3K ----- стабилитрон на 3.6 В (на землю его
второй вывод) -----> "DATA -"
Комп определяет "неопознанное устройство"
============
Всё. USB-кнопка - готова. Дело за ПО.
Кто возьмется?
А в общем, как вам идея с простой кнопкой на USB?
-----------------------
Итого: ОТ +5 ----> R 3.3K ----- стабилитрон на 3.6 В (на землю его
Комп определяет "неопознанное устройство"
============
Всё. USB-кнопка - готова. Дело за ПО.
Кто возьмется?
А в общем, как вам идея с простой кнопкой на USB?
Скелет колобка состоит из черепа.
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
Юр, я в курсе, почему это происходит. В линуксе аналогично - сначала все процессы получают SIGTERM (пытаясь при этом завершиться корректно), а затем, если продолжают висеть (например нет обработчика данного сигнала), то их выносит рассылка SIGKILL. Не вполне ясно, почему в винде делается запрос на завершение, ну пусть будет так. Тут вот что важно - прога по сути ГУИшная, а не консольная, т.к. есть форма, есть для нее модуль, но она не создается (нет вызова метода CreateForm), более того, я даже метод Application->Run() не вызывал. Форму я не создаю, чтобы не появлялось окно формы (отсутствие окна формы создает иллюзию того, что это службаploop писал(а):Да, если нет петли обработки системных сообщений - так и будет. При выключении система посылает широковещательное сообщение всем прогаммам. Если есть ГУИ (особенно построенное во всяких билдерах) - оно автоматом обрабатывается, завершая приложение. Если это консольная программа - либо делать петлю обработки (что есть извращение), либо регистрировать её как службу
Юр, ты тему читал?Я бы предложил тупо гуишную программу в автозагрузке, которую за пол-часа слепить на дельфях или с-билдере можно, но ни разу не работал с ЛПТ портом...
Тут уже давно все есть, мне и форму запустить несложно, и код в нее перенести из ВинМэйна. Правда придется еще и таймер запускать, чтобы в его обработчик повесить код проверки кнопки. Тут вот какая проблема - вследствие непонятного мне косяка у меня при отладке не срабатывают метод Form->Hide() и свойство Form->Visible. Т.е. я пытаюсь форму скрыть, а она не скрывается. Т.е. опять же окно будет торчать, це не гуд.
Блин, вы решительно тему не читаете, господа!Cat_CooLeR писал(а):C Lpt портом проще простого, если надо стучи, скажу
Знание - сила!
- Сообщения: 87
- Зарегистрирован: Ср авг 26, 2009 15:59:39
Для обработки сообщений используется функция GetMessage, в описании присутствует пример обработки сообщений. При получении сообщения WM_QUIT функция возвращает 0, если какое другое то не 0, -1 если произошла какая-то ошибка.
Самый простой вариант вынести код ожидания сигнала с LPT порта в отдельный поток, а в winmain обрабатывать сообщения и при получении сообщения завершения работы останавливать поток и завершать выполнение приложения.
P.S. для создания потока можно юзать функцию _beginthread
Самый простой вариант вынести код ожидания сигнала с LPT порта в отдельный поток, а в winmain обрабатывать сообщения и при получении сообщения завершения работы останавливать поток и завершать выполнение приложения.
P.S. для создания потока можно юзать функцию _beginthread
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
Я в курсе относительно этой функции. Только вот не знал про специфику возвращаемого значения применительно к WM_QUIT. Спасибо за инфу, попробую применить. Я так полагаю, что надо будет тупо проверять в цикле равенство нулю результата работы GetMessage и завершаться при таковом. Можно даже без потока.izmmisha писал(а):Для обработки сообщений используется функция GetMessage, в описании присутствует пример обработки сообщений. При получении сообщения WM_QUIT функция возвращает 0, если какое другое то не 0, -1 если произошла какая-то ошибка.
А не проще CreateThread? Я ее обычно вызывал.P.S. для создания потока можно юзать функцию _beginthread
Знание - сила!


