2009-06-10 5 views
0

Mein Arbeitgeber hat ein Tool von Drittanbietern, OfficeConverter von Conveter Technology, erworben, das die Konvertierung/Reparatur von Office 2003-formatierten Dateien in Office 2007-Format automatisiert. Dieses Tool automatisiert auch die Übersetzung/Änderung von Macro/VBA-Code-Anforderungen zwischen Office 2003 und 2007.Wie kann ich Klicks oder Schlüssel von einer VB6-Anwendung an ein Excel-Dialogfeld senden?

Mein Problem ist, dass während der Konvertierung das Tool das gewünschte Office-Produkt, etwa Excel, öffnet und dann die Zielbenutzerdatei öffnet (z. B. Report.xls) und dann jeden VBA-/Makrocode auf Änderungsanforderungen prüft. Das Problem ist, dass, wenn der Excel-Dateicode von einem externen Tool wie einer OCX-Datei abhängig ist und wenn dieses Tool auf dem PC, auf dem ich diese Aktion ausführe, nicht existiert, Excel eine Nachricht, die das Objekt hat, öffnet nicht gefunden, stoppt den gesamten Konvertierungsprozess (Tausende von Dateien in einer Zeile), bis jemand kommt und MANUELL auf die entsprechende Schaltfläche klickt, um die Dialogbox zu schließen.

Ich dachte, dass das Erstellen einer kleinen Überwachungsanwendung in VB6 (hey, ich bin alt und meine Fähigkeiten sind) könnte auf dem gleichen PC sitzen und für diese Dialogfelder und, je nach der spezifischen Nachricht, klicken Sie auf die entsprechende Schaltfläche über den SendMessage-API-Aufruf.

Das Problem ist, dass ich SendMessage nicht bekommen konnte, um tatsächlich die Taste für mich zu drücken, habe ich versucht, es den Return-Schlüsselwert (VbKeyReturn) oder sogar den Leertaste (VbKeySpace), aber die Aktion nie Das schließt die Dialogbox, so wie es sein sollte. Ich kann den Fokus auf den Tab zwischen den Schaltflächen in der Dialogbox setzen, aber das ist alles.

Ich habe versucht, SendKeys zu verwenden, aber das ist weit weniger zuverlässig und stark von der aktuellen Dokumentation, die ich gesehen habe, abgeraten.

Irgendwelche Vorschläge? :)

+0

Haben Sie versucht, Escape zu senden? – stuartd

Antwort

4

Wenn Sie die hWnd für die Schaltfläche haben und die Maschine unbeaufsichtigt ist, können Sie mit MouseEvent den Cursor einfach über die Schaltfläche bewegen und darauf klicken. Dieses Beispiel enthält ein Drop-in bereit-Modul, das die schmutzige Arbeit tun, für Sie nur den Fenstergriff gegeben:

http://vb.mvps.org/samples/MouseEvent

Ansonsten ist der direkteste Weg wahrscheinlich nur ist WM_LBUTTONDOWN und WM_LBUTTONUP sequentiell zu senden.

EDIT: Wenn Sie "nur wollen, dass es getan wird" Jims Rat und versuchen Gary Chanson Window Demon Werkzeug.

+0

Willkommen bei Stack Overflow! – MarkJ

+0

Danke, Mark. Nettes Konzept, das hier geht. –

+0

Karl, ich habe deine Artikel in VBPJ seit JAHREN gelesen und nun antwortest du * meine * Frage ... Ich bin so glücklich! Ich werde Ihren Vorschlag versuchen. Danke für das Teilen! –

2

Werfen Sie einen Blick auf this utility "Window Demon" von Gary Chanson

Karl: wie schnell wir unsere Kumpels vergessen!

+0

Ja, Gary hat ein paar wirklich coole Werkzeuge. Mein Problem ist, dass ich selten nach einer bestehenden Lösung suche, wenn es so viel mehr Spaß macht, selbst eine zu bauen. Zumindest für solche Sachen. Du hast recht. Dieses ist ideal für dieses Problem! –

+0

Der Link zu der ZIP-Datei im Artikel ist ungültig. Ich habe eine Nachricht an den Kontakt zur Quellsite gesendet, um festzustellen, ob das Produkt noch vorhanden ist. Es scheint aus dem Beta-Bereich der Site entfernt worden zu sein. –

1

Ich würde vorschlagen, einen Blick auf AutoIt.

Es ist perfekt für diese Aufgabe, suchen Sie nach einem Fenster mit einem bestimmten Text darauf und klicken Sie auf eine Schaltfläche. Läuft in der Taskleiste als eigenständige Anwendung.

+0

Cool! Danke ben! Ich habe nicht den Kopf davon ... Ich werde es versuchen. –

Verwandte Themen