我正在製作一個需要從掃描儀掃描圖像的應用程序。隱藏掃描儀進度條窗口
我已經基於我的應用程序在這個項目上 http://www.codeproject.com/Articles/171666/Twain-for-WPF-Applications-Look-Ma-No-Handles 和掃描部分工作得很好。
但這裏是我的問題:我需要進行掃描而不顯示任何窗口給用戶。
上述項目允許我不向用戶顯示掃描儀配置選項屏幕, 但它仍顯示進度條。
進度條顯示了(和掃描開始),當我打電話
DSixfer(
appid,
srcds,
TwDG.Image,
TwDAT.ImageNativeXfer,
TwMSG.Get,
ref hbitmap);
[DllImport("twain_32.dll", EntryPoint="#1")]
private static extern TwRC DSixfer([In, Out] TwIdentity origin, [In] TwIdentity dest, TwDG dg, TwDAT dat, TwMSG msg, ref IntPtr hbitmap);
我找遍整個所有的參數,但無法看到任何可以禁用進度條。
因此,我決定捕獲正在創建的進度條窗口的事件,並將其隱藏(有沒有更好的方法?),但事件並未被捕獲。
首先,我創建一個臨時窗口,因爲我的應用程序將是一個Windows服務,也因爲TWAIN需要一個窗口句柄,它將進度條關聯到該窗口句柄。
這是我的代碼
HookProc WindowCreationProcedure = new HookProc(WindowCreationHookProc);
int hHook = SetWindowsHookEx(WH_SHELL,
WindowCreationProcedure,
(IntPtr)0,
AppDomain.GetCurrentThreadId()
);
System.Windows.Window tmpWindow = new System.Windows.Window();
tmpWindow.WindowState = WindowState.Minimized; //So that the window isn't showed
tmpWindow.Show();
我收到創建我tmpWindow的事件,但沒有進度條。我在這裏錯過了什麼?
* 編輯:*忘了加我的鉤子函數在這個崗位
private const int WH_SHELL = 10;
private const int HSHELL_WINDOWCREATED = 1;
public static int WindowCreationHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode == HSHELL_WINDOWCREATED)
{
Console.WriteLine("WINDOW CREATED");
return 1;
}
return 0;
}
在windows vista及以上,windows服務被禁止與桌面交互(這可能是你沒有收到掛鉤事件的原因)。要隔離問題,請嘗試首先從不是服務的應用程序執行此操作,看看您是否收到掛鉤。如果是這種情況,你可以從服務啓動一個桌面應用程序,它可以處理進度條的壓縮。 – user1227804 2012-04-11 11:10:17
我所做的所有測試都是基於Windows窗體應用程序的;) – 2012-04-11 11:16:31
Twain在Windows上嚴重過時。您需要升級到WIA(Windows圖像採集)。谷歌走了。 – 2012-04-11 11:49:10