Ich mache eine Anwendung, die ein Bild von einem Scanner scannen muss.Verstecken Scanner Fortschrittsbalkenfenster
Ich habe meine Anwendung auf dieses Projekt http://www.codeproject.com/Articles/171666/Twain-for-WPF-Applications-Look-Ma-No-Handles basiert und der Scan-Teil funktioniert ausgezeichnet.
Aber hier ist mein Problem: Ich muss den Scan machen, ohne dem Benutzer ein Fenster zu zeigen.
Das obige Projekt ermöglicht es mir, den Scanner Konfigurationsoption Bildschirm für den Benutzer nicht anzuzeigen, aber es zeigt immer noch die Fortschrittsleiste.
Der Fortschrittsbalken zeigt (und der Scan beginnt), wenn ich
nennenDSixfer(
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);
ich über alle Parameter gesucht, aber konnte nicht jeder sehen, dass die Fortschrittsanzeige deaktivieren könnte.
Also entschied ich mich, das Ereignis des Fortschrittsbalkenfensters zu erfassen und es zu verstecken (gibt es einen besseren Weg?), Aber das Ereignis wird nicht abgefangen.
Zuerst erstelle ich ein temporäres Fenster, weil meine Anwendung ein Windows-Dienst sein wird und auch, weil TWAIN ein Fensterhandle benötigt, dem es die Fortschrittsleiste zuordnet.
Dies ist mein Code
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();
Ich erhalte das Ereignis meines tmpWindow aber nicht der Fortschrittsbalken geschaffen. Was fehlt mir hier?
* EDIT: * vergessen haben meine Hook-Funktion in diesem Beitrag hinzufügen
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;
}
in windows vista & up ist es Windows-Diensten verboten, mit dem Desktop zu interagieren (dies könnte der Grund dafür sein, dass Sie kein Hook-Ereignis erhalten). Um das Problem zu isolieren, versuchen Sie es zuerst von einer Anwendung, die kein Dienst ist, zu sehen, ob Sie den Haken dort erhalten. Wenn dies der Fall ist, könnten Sie eine Desktop-Anwendung vom Dienst starten, die die Unterdrückung des Fortschrittsbalkens übernehmen könnte. – user1227804
Alle Tests, die ich gemacht habe, sind nur aus einer Windows-Form-Anwendung;) –
Twain ist auf Windows grob veraltet. Sie müssen zu WIA (Windows Image Acquisition) wechseln. Google entfernt –