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ückEinige 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.
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.
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.
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.
Ich versuche dies, aber nicht gut mit TWAIN mybe versuchen WIA
mybe versuche das:
auf Buton-Run-Scanner
%Vor%bei Ereignistimer-Tick
%Vor%