Hi,
ich habe folgendes Problem. Unsere Mitarbeiter sind leider faul und wollen so wenig Dialoge wie möglich bestätigen lassen. Im Prinzip wird dabei, Stand jetzt, mit Hilfe eines vom WIA Paket bereitgestellten Dialoges ein Scan Vorgang über einen WIA kompatiblen Scanner eingerichtet und gestartet. Diese Einrichtung soll aber automatisch erfolgen, d.h. der Benutzer will das der Scan sofort ohne Zwischendialog startet. Bis jetzt habe ich diesen Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| const string wiaFormatJpeg = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; CommonDialogClass wiaDiag = new CommonDialogClass(); WIA.ImageFile wiaImage = null;
WIA.Device device;
Device showSelectDevice = wiaDiag.ShowSelectDevice(WiaDeviceType.ScannerDeviceType, false, false);
if(showSelectDevice!=null) { wiaDiag.ShowDeviceProperties(showSelectDevice,true); }
|
In dem Fall klappt bereits die automatische Geräteauswahl (es ist sowieso nur immer ein Scanner angeschlossen) und ich hätte schon einmal die Referenz zum Gerät selber. Die Property Anzeige vom Scanner ist dabei nur testweise. Im Prinzip soll der wiaImage Dialog das selbe machen - also alles automatisch kennen und direkt zum Scan Vorgang durchgehen. Ich bin zwar noch auf der Suche nach einer Lösung - aber vielleicht kann mir hierbei jemand weiterhelfen der das schon einmal gemacht hat
MfG RBS2002
Edit:
So, habe nun doch eine für mich sehr gute Lösung finden können - bei dieser wird nur noch der ScanFortschritt gezeigt (Quelle war ein bereits fertiggestelltes Programm):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| CommonDialogClass commonDialogClass = new CommonDialogClass(); Device scannerDevice = commonDialogClass.ShowSelectDevice(WiaDeviceType.ScannerDeviceType, false, false); if (scannerDevice != null) { Item scannnerItem = scannerDevice.Items[1]; object scanResult = commonDialogClass.ShowTransfer(scannnerItem, WIA.FormatID.wiaFormatPNG, false); if (scanResult != null) { ImageFile image = (ImageFile)scanResult; string fileName = Path.GetTempPath() + DateTime.Now.ToString("dd-MM-yyyy-hh-mm-ss-fffffff") + ".png"; } } |
In dem Fall wird natürlich, wenn mehrere Scanner dranhängen, das Device abgefragt. Aber ich schätze mal das man im Ernstfall die Referenz serialisieren und absichern kann (damit es später gleich darauf, ohne Abfrage, zugreift). Ich bin damit erstmal zufrieden
