最近做和掃描儀接入的掃描應用程序,深深感覺到了來自底層設備和WINDOWS協議的惡意。軟件專業,對計算機深層次通知機制和協議,以及與之相連接的機器的接入協議和一些參數,當時並木有認真學習和了解,前一陣子做到真是淚流滿面。Codeproject,Stackoverflow,codeplex都要翻到吐了。感覺有時間還是把計算機底層認真去學習了解一下才是正道。先在這里把我前一陣的探索和想到的解決方法列出來給同樣需要的朋友們吧。
掃描儀API最初只有TWAIN協議,之后增加了WIA協議,直到最近有做到富士通的一款掃描儀,它兩者均不具有,接入必須使用其驅動軟件,這也增加了我們開發掃描儀接入程序的難度。
后面是我總結的關於這三種情況的解決方法。
1. TWAIN。此為大多數掃描儀基礎協議。是C++語言寫的底層dll,對.NET來說通過DLLImport來擴展使用。
此協議是很底層的協議,並沒有經過.NET封裝。所以要了解其機制才能更好的來開發。
官網及其樣例:http://www.twain.org/scannerserviceproviders/specification-and-tools.html
CNBLOG其實有蠻多文章。先是介紹:http://www.cnblogs.com/cjcanet/articles/2393416.html
需要DLL導入的.h文件 http://www.cnblogs.com/len0031/p/3483821.html
.NET 例子:http://www.codeproject.com/Articles/1376/NET-TWAIN-image-scanner,http://www.codeproject.com/Articles/171666/Twain-for-WPF-Applications-Look-Ma-No-Handles
(這兩個例子我都試驗過。都很OK的)
2. WIA。假如您的機器支持這個協議。那就可以好好開心一下了。.NET已經封裝了支持該協議的dll。在COM里導入Windows.Image.Acquire.dll 使用其方法就可以了。一般最近念頭的掃描儀都支持這個協議。
介紹和使用:http://www.cnblogs.com/lvfeilong/archive/2013/01/28/khgskjdfhg.html
3. 假如都不支持!很不幸樓主就碰到了,這個時候就要轉換思維了。經過研究發現
所有的掃描儀自帶的驅動程序及其擴展程序都會有掃描完成后觸發一個程序的功能(比如掃描完成后打開image程序來進行瀏覽)
此處就要找到其配置文件。一般都在appdata,rooming中等。可以關鍵字來進行搜索。
找到后更改配置用compare(推薦TortoiseMerge) 來進行前后對比,發現相應修改的地方。
之后就是啟動自己程序的時候把該文件修改了,換成觸發自己程序的路徑,這樣每次掃描到圖片都會觸發自己寫的程序並傳入圖片的args。關閉時候再修復就好了。
這種思路有種曲線救國的意思,其實有時候應用層的開發感覺就是這樣。並不需要大力氣來做底層的事情,而是你需要找到相應的支持就好了。
站在巨人的肩膀上便是這種感覺吧。剩下的時間便可以做提升自己的事情了。
程序員也是需要生活的!