Wie überprüfe ich, ob der Scanner eingesteckt ist (C #, .NET TWAIN)

8

Ich verwende den .NET TWAIN-Code von Ссылка in meinem Anwendung. Wenn ich versuche, ein Bild zu scannen, wenn der Scanner nicht angeschlossen ist, friert die Anwendung ein.

Wie kann ich überprüfen, ob das Gerät mit dem TWAIN-Treiber angeschlossen ist?

    
SelvirK 19.09.2008, 07:37
quelle

5 Antworten

12

Vielleicht nehme ich die Frage zu wörtlich, aber mit der TWAIN-API ist es nicht möglich zu prüfen, ob ein Gerät angeschlossen ist, d. h. angeschlossen und eingeschaltet. Der TWAIN-Standard definiert zu diesem Zweck eine Funktion namens CAP_DEVICEONLINE, aber diese Funktion ist so schlecht konzipiert, dass nur wenige Treiber sie so implementieren, dass sie in der Praxis nutzlos ist.

Der nächstgelegene Wert ist folgender: Öffnen Sie das Gerät (MSG_OPENDS): Fast alle Treiber suchen beim Öffnen nach dem Gerät und zeigen dem Benutzer einen Fehlerdialog an. Es gibt keinen TWAIN-Mechanismus, um diesen Dialog zu unterdrücken oder zu erkennen Einige Treiber erlauben es dem Benutzer, das Problem zu beheben und fortzufahren. In diesem Fall werden Sie (Ihre App) nie wissen, dass ein Problem vorliegt. Bei einigen Treibern kann der Benutzer den Vorgang abbrechen. In diesem Fall schlägt die MSG_OPENDS-Operation fehl und gibt wahrscheinlich TWRC_CANCEL, aber möglicherweise TWRC_FAILURE

zurück

Einige TWAIN-Treiber werden ohne Fehler geöffnet, obwohl das Gerät offline ist. Ein solcher Treiber kann FALSE zu einer Abfrage von CAP_DEVICEONLINE zurückgeben. Solch ein Treiber wird wahrscheinlich die Geräte-Online-Prüfung durchführen, wenn Sie das Gerät mit MSG_ENABLEDS aktivieren, und wenn das Gerät nicht online ist, erhalten Sie den Fehlerdialog für den Benutzer und so weiter wie oben.

Beiseite und IMPO: WIA ist "moderner", aber viel weniger umfassend zum Scannen als TWAIN, und meiner Erfahrung nach unbrauchbar für mehrseitiges Scannen mit einem Dokumenteneinzug. WIAs Designer und Betreuer scheinen Scanner nicht zu verstehen oder sich um sie zu kümmern, außer für Low-End-Verbraucherflachbetten. Es ist gut für Kameras.

    
Spike0xff 10.10.2008, 22:12
quelle
2

Ich habe mit demselben Quellcode begonnen, den Sie von CodeProject heruntergeladen haben, aber den Großteil des Codes in MainFrame.cs verschoben, der das Scannen in eine Scanner-Klasse initiiert. Um nach Scanfehlern zu suchen, rufe ich die folgende Methode auf, anstatt Twain.Acquire direkt aufzurufen:

%Vor%

Normalerweise initiiere ich das Scan-Ereignis in einem separaten Thread, damit die App während des Scanvorgangs nicht einfriert.

    
Veldmuis 01.10.2008 08:23
quelle
1

füge diesen Code einfach deinem TwainCommand (cmd)

hinzu %Vor%

Dies wird angezeigt, wenn die Systeme kein Gerät erkennen oder der Scan abgebrochen wurde.

    
happy11 24.06.2009 03:49
quelle
1

Sie können in der Registrierung einchecken. In:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{6bdd1fc6-810f-11d0-bec7-08002be2092f} Jeder Scanner, der jemals erkannt wurde, wird dort in den Unterschlüsseln aufgelistet.

Beginnen Sie mit 0000 , und prüfen Sie, ob der Wert CreateFileName leer ist oder Daten enthält.

Wenn Daten vorhanden sind, handelt es sich um einen angeschlossenen Scanner, wenn dieser leer ist, ist er nicht verbunden.

    
Dan Elm 18.12.2014 05:28
quelle
-2

Ich versuche dies, aber nicht gut mit TWAIN mybe versuchen WIA

mybe versuche das:

auf Buton-Run-Scanner

%Vor%

bei Ereignistimer-Tick

%Vor%     
Mariusz Szefera 24.04.2010 18:51
quelle

Tags und Links