Witajcie,
Bawię się przykładem http://www.codeproject.com/Articles/1376/NET-TWAIN-image-scanner do obsługi skanera poprzez TWAIN.
Obsługa sprowadza się do 5 kroków:
Init();
Select();
Acquire();
PassMessage();
TransferPictures();
Generalnie użytkownik musi wykonać minimalnie 3 kliknięcia - wcisnąć w mojej aplikacji SKANUJ, potwierdzić na liście wybór sterwonika TWAIN i w oknie tego sterownika wcisnąć START/SKANUJ, który rozpocznie proces skanowania. Chcę go wyręczyć i te kliknięcia wyeliminować.
Metoda Select() korzysta z takiej oto linijki, która otwiera mi okno wyboru skanera (a właściwie dostępnych uchwytów do Twain, WIA itd. wszystkich urządzeń widzianych przez system):
rc = DSMident( appid, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.UserSelect, srcds );
Gdy nie wykorzystam Select(), to wybrany zostanie pierwszy z listy skaner.
Pytanie 1 - jak mogę wskazać mu, który skaner ma wybrać, tak żeby tego nie robić ręcznie, ale żeby to nie był pierwszy z nich?
Pytanie 2 - gdy skaner jest już wybrany, metoda Acquire() otwiera mi okno sterownika TWAIN danego urządzenia, gdzie mogę ustawić parametry skanowania. Następnie w pętli nasłuchiwane jest, co to okno wysyła w świat:
IMessageFilter.PreFilterMessage(ref Message m)
Gdy wcisnę skan/start, to zaczyna się skanowanie. Czy mogę też ten krok pominąć, tzn. wywołać przycisk skanowania od razu w aplikacji, znów żeby użytkownik nie musiał robić kolejnego kliku? Czy mogę przesłać parametry skanu, tzn. z pominięciem okna drivera TWAIN ustawić, że chcę np. czarno biały skan o określonym DPI, oczywiście w zakresie na jaki pozwala mi sterownik danego urządzenia?