Wie kann ich ein Dialogfeld unterdrücken, das durch Code angezeigt wird, den ich nicht ändern kann?

8

Ich habe einen Inproc COM Server von einem Drittanbieter. Eine der Funktionen, die ich aufrufen, wird eine Fehlermeldung anzeigen, wenn es einen bestimmten Typ von Fehler abfängt. Das Problem ist, dass ich versuche, Daten in großen Mengen zu verarbeiten, und die Datenquelle, die ich verwende, verursacht, dass der Fehlerdialog häufig auftaucht. Dies wäre kein Problem, wenn 1000 Dialogfelder erzeugt würden, aber stattdessen blockiert es und die Funktion kehrt nicht zurück, bis Sie OK drücken.

Wie kann ich verhindern, dass der Dialog angezeigt wird, oder programmgesteuert OK drücken?

Hier ist eine Kopie des Anruf-Stacks, wie es auf mich wartet, um OK zu drücken

%Vor%

Ich bezweifle, dass es helfen wird (es gibt keine Optionen zum Deaktivieren des Meldungsfelds, zu abonnierende Ereignisse oder andere Überlastungen der Funktion), aber hier ist der aufrufende Code.

%Vor%     
Scott Chamberlain 21.09.2012, 14:45
quelle

2 Antworten

10

Ein Meldungsfeld pumpt eine Meldungsschleife. Das ist etwas, was Sie nutzen können, es ermöglicht Ihnen, Code mit Control.BeginInvoke () zu injizieren, das ausgeführt wird, sobald das Meldungsfeld angezeigt wird. Sie können diesen Code dann verwenden, um das Dialogfenster zu finden und es zu schließen. Fügen Sie Ihrem Projekt eine neue Klasse hinzu und fügen Sie diesen Code ein:

%Vor%

Beispielverwendung:

%Vor%     
Hans Passant 23.09.2012, 18:30
quelle
1

Zunächst wäre es sicherlich besser, wenn der COM-Server selbst in den Modus geschaltet werden könnte, wenn der Anrufer nicht durch unerwünschte UI-Aktionen ausgeschaltet wird. Vorausgesetzt, Sie können das Komponentenverhalten von Drittanbietern nicht ändern, können Sie weiterhin Nachrichten verarbeiten und das Meldungsfeld schließen.

Bevor Sie den Anruf auf dem Server des Drittanbieters ausführen, können Sie einen Nachrichten-Hook mit SetWindowsHookEx und WH_CALLWNDPROC installieren und Ihr Callback kann die Nachrichten überwachen. Insbesondere werden Sie in der Lage sein, Nachrichten zu veröffentlichen, WindowProc des Hookdialogs usw. einzubinden. Einschließlich programmatischem Schließen der Nachrichtenbox.

    
Roman R. 21.09.2012 15:02
quelle

Tags und Links