スキャナーから画像をスキャンする必要があるアプリケーションを作成しています。
このプロジェクト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;
}