スキャナから画像をスキャンする必要があるアプリケーションを作成しています。スキャナのプログレスバーのウィンドウが表示されない
私はこのプロジェクト http://www.codeproject.com/Articles/171666/Twain-for-WPF-Applications-Look-Ma-No-Handles 上で自分のアプリケーションをベースとしましたし、走査部はexcelently動作します。
私の問題は次のとおりです。ユーザーにウィンドウを表示せずにスキャンを行う必要があります。
上記のプロジェクトでは、スキャナー設定オプション画面をユーザに表示させないようにするために、 が表示されますが、まだ進行状況バーが表示されます。
プログレスバーが現れ(およびスキャンが始まります)私は
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はプログレスバーを関連付けるウィンドウハンドルを必要とするため、最初は一時ウィンドウを作成します。
これは私が作成している私のtmpWindowのイベントではなく、プログレスバーを受け取る私のコード
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();
です。私はここで何が欠けていますか?
* EDIT:*は、トウェインの既製の機能が利用可能になったとき、これらすべてのことを行うために、なぜこの記事で
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&upでは、Windowsサービスはデスクトップとのやりとりが禁止されています(これがフックイベントを受信していない可能性があります)。問題を特定するには、まずサービスではないアプリケーションからこれを実行してみてください。その場合、プログレスバーの押下を処理できるサービスからデスクトップアプリケーションを起動することができます。 – user1227804
私が行ったすべてのテストはWindowsフォームアプリケーションからのものです; –
TwainはWindows上ではかなり古くなっています。 WIA(Windows Image Acquisition)に移行する必要があります。 Google離れて。 –