Уведомление о подключении сканера

Я разрабатываю приложение для сканирования и хочу активировать кнопку "Сканировать" только тогда, когда доступен мой/любой сканер.

Я пытался добиться этого с помощью GdPicture, но безуспешно (кстати, это действительно плохая библиотека, не используйте ее). Я также пытался получить подобное событие, используя ATalasoft TWAIN и низкоуровневую библиотеку TWAIN (которую я нашел благодаря этому post). Ни один не работал.

У меня также есть идея обнаружить новые устройства, подключенные к компьютеру, а затем выполнить повторное сканирование устройств TWAIN, но, возможно, кто-то из вас знает лучшее решение. Любые идеи?


person SOReader    schedule 04.06.2012    source источник


Ответы (1)


Возможно, вам придется написать оболочку для сканера самостоятельно. Если вышеупомянутые библиотеки не имеют API для определения состояния сканера, вы можете попробовать подключиться к сканеру, если вы подключитесь, это означает, что сканер работает. Я думаю, что они предоставляют API подключения для сканера.

person Kamran Amini    schedule 04.06.2012
comment
Хм, так нельзя. Если сканер не подключен к вашему компьютеру, вы не сможете открыть к нему подключение. Мне нужно какое-то событие при подключении нового устройства. - person SOReader; 05.06.2012
comment
Конечно, но я не думаю, что вы сможете найти фреймворк, который сделает это за вас. Все, что я чувствую, это то, что вы должны реализовать это самостоятельно. За системой, ориентированной на события, стоит своего рода мониторинг или прерывание. - person Kamran Amini; 05.06.2012
comment
@SOReader Уведомление о подключении было тем, что я пытался реализовать в своем приложении для сканирования. Но это оказалось сложной работой... но лично для моего приложения для сканирования это не обязательная функция. Мне удалось определить, доступны ли какие-либо драйверы сканера (хотя сам сканер может быть физически не подключен). Если нет, то я сделаю кнопку сканирования серой. Эта идея действительно работает. Кстати, я использую Dynamsoft's NET TWAIN... отлично работает . - person Logan; 06.06.2012
comment
@SOReader, я не думаю, что есть прямой API для удовлетворения ваших требований. Однако вы можете попробовать следующий обходной путь: 1. Определите, доступен ли на машине драйвер TWAIN. 2. Как только драйвер будет обнаружен, вы можете попробовать открыть исходный код. 3. Если вам не удается открыть выбранный источник (открытый источник возвращает false), вы можете сделать кнопку «Сканировать» серой. Логан, я работаю на Дайнамсофт. Дайте знать, если у вас появятся вопросы. - person Windy; 06.06.2012
comment
@Windy: Конечно, но тогда вам придется делать это периодически (опрос) :( - person SOReader; 06.06.2012
comment
@SOReader: Верно. Рассматривали ли вы возможность добавления сообщения за кнопкой «Сканировать» вместо того, чтобы затенить кнопку серым цветом (например, «Сканер недоступен»). - person Windy; 06.06.2012
comment
Кстати. для некоторых сканеров (точнее, их драйверов) решение TryOpen не сработает, потому что при попытке открыть соединение появится окно с предложением выбрать другое устройство. Я не мог найти способ остановить это. - person SOReader; 06.06.2012
comment
Вам надоело пользоваться родной dll вашего вендора?! Обычно приложения, поставляемые со сканерами, могут определить состояние устройства, но они не используют обертки и промежуточные интерфейсы. Возможно, вам стоит попробовать использовать родные dll поставщика. Но вы будете ограничены несколькими поставщиками, чьи собственные файлы вы можете использовать. - person Kamran Amini; 06.06.2012
comment
@Kamran: нет, я не делал этого, потому что я не могу этого сделать. Приложение должно работать с любым сканером TWAIN, и я не могу вручную поддерживать всех возможных производителей :( - person SOReader; 06.06.2012
comment
@Windy SOReader прав. Для большинства драйверов сканера, которые я тестировал, метод OpenSource() всегда возвращает всплывающие окна, показывающие, что устройство не готово/недоступно. Возможно, нет возможности определить доступность каждого устройства :) - person Logan; 08.06.2012