Ok, ist doch ganz schon verzwickt die Sache
Der WebBrowser hat kein Event, was geworfen wird.
Auch wird keine WindowsMessage gesendet
Es läuft alles rein durch den IE, der im Hintergrund läuft.
Aktuell bin ich soweit, dass ich das COM-Objekt von dem IE-Webbrowser habe und die ComTypeDescription.
Und da hänge ich ...
Ich habe 51 Events, zwei davon heißen:
PRINTTEMPLATEINSTANTIATION
PRINTTEMPLATETEARDOWN
Zu diesen beiden Events bekomme ich dann aber auch nur eine sourceIID (Doppeltes I ist gewollt, das heißt so)
Das COM_Objekt selber wird vom WinForms-WebBrowser mit Hilfe
dieses Interfaces genutzt.
Allerdings sieht das auch nicht so aus, als bekäme ich da hilfreiche Infos.
Wenn noch jemand eine Idee hat, wie ich irgendwie erfahren kann, ob sich das Ding geöffnet hat oder noch besser: Wie ich das abbrechen kann, ich bin ganz Ohr
Damit ich aber nicht ganz mit leeren Händen da stehe, hab ich mal das CloseWindow über die WinApi zum Laufen gebracht.
Das Problem war, dass der PrintDialog asynchron angezeigt wird. Der ist also noch gar nicht da, wenn versucht wird, das Fenster zu schließen.
Also hab ich das ganze in eine asynchrone Methode gelegt, die alle 10 Millisekunden prüft ob das Fenster da ist und es dann auch direkt wieder schließt.
Daraus könnte man dann natürlich auch ein Event machen, damit Du dann z.B. auf eigene Faust drucken kannst.
Dss das Fenster kurz auf flackert kann ich aber nicht verhindern.
Der Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| private async Task ClosePrintDialog() { const string PRINTDLG_CLASS = "#32770"; const string PRINTDLG_WINDOW = "Drucken"; const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060;
int printDialogWindowHandle;
do { printDialogWindowHandle = FindWindow(PRINTDLG_CLASS, PRINTDLG_WINDOW); await Task.Delay(10); } while (printDialogWindowHandle == 0);
SendMessage(printDialogWindowHandle, WM_SYSCOMMAND, SC_CLOSE, 0); ClosePrintDialogTimer.Stop(); }
[DllImport("User32.dll")] static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll")] static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); |