Страница 3 из 4

Добавлено: Вт сен 29, 2009 23:41:58
Пухич
Обкатали уже прогу на объекте? Работает?

Добавлено: Сб окт 03, 2009 11:10:34
larik
да отлично все =)

Добавлено: Сб окт 03, 2009 22:22:10
Пухич
larik писал(а):да отлично все =)
Ну и слава Богу. Чистите лог своевременно. :)

Добавлено: Пн окт 05, 2009 00:29:35
larik
кстати выплыл такой нюанс - выключится не может нормально требует завершить вручную... или эт тока у меня ?

Добавлено: Пн окт 05, 2009 01:25:02
Пухич
larik писал(а):кстати выплыл такой нюанс - выключится не может нормально требует завершить вручную... или эт тока у меня ?
Т.е. как? При выключении винды такое требует, или когда?

Добавлено: Пн окт 05, 2009 14:04:21
Аксель
....Где-то видел обсуждалась такая темка, не смог найти:

Возможно подключить на USB кнопку напрямую (без всякой микроэлектроники) и регистрировать её нажатия?

Добавлено: Пн окт 05, 2009 14:41:38
larik
Аксель писал(а):....Где-то видел обсуждалась такая темка, не смог найти:

Возможно подключить на USB кнопку напрямую (без всякой микроэлектроники) и регистрировать её нажатия?
USB это протокол и без микроэлектроники не обойтись

Добавлено: Пн окт 05, 2009 14:42:56
larik
Пухич писал(а):
larik писал(а):кстати выплыл такой нюанс - выключится не может нормально требует завершить вручную... или эт тока у меня ?
Т.е. как? При выключении винды такое требует, или когда?
да то есть выводит окно "завершить сейчас" или отмена, стандартное окно если прога не может выйти или при зависании

Добавлено: Пн окт 05, 2009 14:58:58
Аксель
Аксель писал(а): Возможно подключить на USB кнопку напрямую (без всякой микроэлектроники) и регистрировать её нажатия?
Ответ: да, можо.
Дальше в теме изложено как это сделать.

Добавлено: Пн окт 05, 2009 15:02:25
larik
врятли, а про то что вы говорите было на форуме схема на меге8 была, вот сылочка на другой http://forum.vingrad.ru/forum/s/c86df82 ... 05/15.html

Добавлено: Пн окт 05, 2009 15:20:49
ploop
Т.е. как? При выключении винды такое требует, или когда?
Да, если нет петли обработки системных сообщений - так и будет. При выключении система посылает широковещательное сообщение всем прогаммам. Если есть ГУИ (особенно построенное во всяких билдерах) - оно автоматом обрабатывается, завершая приложение. Если это консольная программа - либо делать петлю обработки (что есть извращение), либо регистрировать её как службу :)

Добавлено: Пн окт 05, 2009 15:31:53
larik
то есть переделка проги в корне ? если сложно то тода другим путем пойдем =)

Добавлено: Пн окт 05, 2009 15:43:35
ploop
Я бы предложил тупо гуишную программу в автозагрузке, которую за пол-часа слепить на дельфях или с-билдере можно, но ни разу не работал с ЛПТ портом... :oops:

Мог бы дома повозиться, но интернету пока нэту... :(

Добавлено: Пн окт 05, 2009 15:49:04
Cat_CooLeR
C Lpt портом проще простого, если надо стучи, скажу :))

Добавлено: Пн окт 05, 2009 15:52:43
ploop
Да и сам нашел бы, был бы интернет и часок времени свободного... На работе интернет есть, но проверить нечем - если застукают за цеплянием проводов к рабочему компу - объясняться целый день придётся :)))

Добавлено: Пн окт 05, 2009 16:28:39
Аксель
...про usb-кнопку

Еще раз немножко перефразирую (изначально вопрос про кнопку, не про определение кз)


Скажем так: если подключать к компу некое устройство USB, но без линии "DATA+", то комп определяет некое устройство подключено (но неправильно :) )

А если отключить и линию "DATA-", то комп определяет, что некоторое устройство уже отключено.

А если опять подключить только линию "DATA-", то комп определяет некое устройство подключено.



Зная на каком порту USB находится это некоторое устройство, можно програмно этот порт отслеживать и обрабатывать USB кнопочку - дальше зависит от программиста.


В качестве некоторого устройства USB можно взять флешку.
Делаем небольшой переходничек USB-USB с кнопкой на "DATA-" и не подключенной "DATA+" (дабы не терять возможность пользования устройства USB по изначальному назначению) и вуаля: (при наличии готового софта) простая USB-кнопочка из разряда сделай сам по быстрому - готова.

=============
Здесь теоретически все должно быть ясно.


Так вот вопрос, чем можно заменить некое устройство USB (допустим нашу флешку)? Чем-то попроще и чем проще, тем лучше. :music:

Добавлено: Пн окт 05, 2009 19:19:20
Аксель
Протестировано.
-----------------------
Итого: ОТ +5 ----> R 3.3K ----- стабилитрон на 3.6 В (на землю его :) второй вывод) -----> "DATA -"


Комп определяет "неопознанное устройство"
============
Всё. USB-кнопка - готова. Дело за ПО.
Кто возьмется? :))

А в общем, как вам идея с простой кнопкой на USB?

Добавлено: Пн окт 05, 2009 22:08:29
Пухич
ploop писал(а):Да, если нет петли обработки системных сообщений - так и будет. При выключении система посылает широковещательное сообщение всем прогаммам. Если есть ГУИ (особенно построенное во всяких билдерах) - оно автоматом обрабатывается, завершая приложение. Если это консольная программа - либо делать петлю обработки (что есть извращение), либо регистрировать её как службу
Юр, я в курсе, почему это происходит. В линуксе аналогично - сначала все процессы получают SIGTERM (пытаясь при этом завершиться корректно), а затем, если продолжают висеть (например нет обработчика данного сигнала), то их выносит рассылка SIGKILL. Не вполне ясно, почему в винде делается запрос на завершение, ну пусть будет так. Тут вот что важно - прога по сути ГУИшная, а не консольная, т.к. есть форма, есть для нее модуль, но она не создается (нет вызова метода CreateForm), более того, я даже метод Application->Run() не вызывал. Форму я не создаю, чтобы не появлялось окно формы (отсутствие окна формы создает иллюзию того, что это служба :) ). Было бы хорошо, если бы ты вкратце описал, как эта петля делается. Она случаем не в стандартном try-catch спрятана? Как регистрировать прогу, как службу, я тоже не в курсе.
Я бы предложил тупо гуишную программу в автозагрузке, которую за пол-часа слепить на дельфях или с-билдере можно, но ни разу не работал с ЛПТ портом...
Юр, ты тему читал? :wink:
Тут уже давно все есть, мне и форму запустить несложно, и код в нее перенести из ВинМэйна. Правда придется еще и таймер запускать, чтобы в его обработчик повесить код проверки кнопки. Тут вот какая проблема - вследствие непонятного мне косяка у меня при отладке не срабатывают метод Form->Hide() и свойство Form->Visible. Т.е. я пытаюсь форму скрыть, а она не скрывается. Т.е. опять же окно будет торчать, це не гуд.
Cat_CooLeR писал(а):C Lpt портом проще простого, если надо стучи, скажу
Блин, вы решительно тему не читаете, господа! :)))

Добавлено: Пн окт 05, 2009 22:26:26
izmmisha
Для обработки сообщений используется функция GetMessage, в описании присутствует пример обработки сообщений. При получении сообщения WM_QUIT функция возвращает 0, если какое другое то не 0, -1 если произошла какая-то ошибка.

Самый простой вариант вынести код ожидания сигнала с LPT порта в отдельный поток, а в winmain обрабатывать сообщения и при получении сообщения завершения работы останавливать поток и завершать выполнение приложения.

P.S. для создания потока можно юзать функцию _beginthread

Добавлено: Пн окт 05, 2009 22:55:28
Пухич
izmmisha писал(а):Для обработки сообщений используется функция GetMessage, в описании присутствует пример обработки сообщений. При получении сообщения WM_QUIT функция возвращает 0, если какое другое то не 0, -1 если произошла какая-то ошибка.
Я в курсе относительно этой функции. Только вот не знал про специфику возвращаемого значения применительно к WM_QUIT. Спасибо за инфу, попробую применить. Я так полагаю, что надо будет тупо проверять в цикле равенство нулю результата работы GetMessage и завершаться при таковом. Можно даже без потока.
P.S. для создания потока можно юзать функцию _beginthread
А не проще CreateThread? Я ее обычно вызывал.