Möchte automatisiert einen Teil einer Outlookmail drucken + dann zu EXCEL wechseln + Makro starten

  • Hallo ihr User,
    ich habe noch nie was mit AutoIT gemacht, aber es scheint, als könnte man damit eines meiner Aufgabenstellungen lösen. Vielleicht kann jemand helfen.

    Am besten wäre es ja, wenn man so wie in WORD oder EXCEL (ich verwende Office 2003 und WIN XP) Makros aufzeichnen könnte. Das geht schon mal in Outlook nicht. Und programmieren in VBA kann ich nicht.

    Ich habe täglich viele gleiche Outlook eMails (die ich einzeln öffne) und die immer aus zwei Teilen bestehen. Den oberen Teil will ich ausdrucken, den unteren Teil, der immer mit: <table>< beginnt, will ich in die Zwischenablage kopieren. Dann will ich zu einer bereits geöffneten bestimmten EXCEL Tabelle wechseln und evtl. dort sogar ein bestehendes Makro starten (welches dann dort etwas in gewisser Form einfügt).

    Beim Ausdrucken, möchte ich aber meinem Druckertreiber bestimmte Befehle im Menü übergeben.
    Wie:
    Datei / Drucken
    - Markierung (Häkchen setzen)
    - Einstellungen (Button betätigen)
    - Seite einrichten (anderen "Reiter" betätigen)
    - Stempel Hintergrund (Button betätigen)
    - Hintergrund (Häkchen setzen)
    - OK (im Fenster Stempelhintergrund betätigen)
    - OK (im Fenster Druckereinstellung betätigen)
    - Drucken (im Fenster Drucken betätigen)

    Das kann wahrscheinlich nur jemand nachvollziehen, der auch einen Canon iP3500 Drucker eingerichtet hat.

    Ich hoffe, damit für den Anfang das Problen ausreichend beschrieben zu haben und warte mal ob es hier Hilfe gibt. Das kann doch kein Hexenwerk sein. Vielleicht lerne ich es ja auch noch. Hätte noch ein paar mehr Wünsche, aber für den Anfang soll das reichen.

    Gruß + schönes Wochenende
    Gunnii

  • Da sich noch niemand gemeldet hat mache ich es mal einfacher.

    Stellt euch vor ihr habt eine Mail in OUTLOOK geöffnet.

    Nun möchte ich (am besten mit einem Hotkey) folgende Dinge tun:

    ALT D
    D
    Tab Tab Tab Tab
    Cursor down
    ALT E
    STRG TAB
    ALT M
    Tab Tab
    Leertaste
    Tab Tab Tab
    Enter
    ESC
    ALT D


    -----
    Wie macht man das?

    Gruß
    Gunnii

    Einmal editiert, zuletzt von Gunnii (26. Juli 2009 um 10:44)

  • moin + danke,
    aber woher weiß AutoIT, dass das in (bei mir) einem Outlookfenster passieren soll?

    Und muss man dass dann da alles mühseelig eingeben, oder gibt es evtl. einen Recorder um es aufzuzeichen?

    Noch komme ich nicht weiter.... :(

    ----
    Wenn ich so ein Beispiel probiere, dann ist unter Tools die F5 Startfunktion nicht anwählbar...
    ok - gefunden - ich hatte die Endunf au3 vergessen.

    Nun habe ich das "window Info Tool" entdeckt.
    Ich möchte in einer eMail etwas mit dem "send" Befehl machen.
    Aber alle Mails haben ja andere Namen oben in der Kopfzeile.
    Wie kann ich gezielt die gerade geöffnete "ansprechen"?

    Gruß
    Gunnii

    2 Mal editiert, zuletzt von Gunnii (26. Juli 2009 um 12:38)

  • Hallo Gunni,
    der Send-Befehl simuliert einfach nur Tasten die gedrückt werden.
    Diese werden i.d.R. an das zu dem Zeitpunkt aktive Fenster gesendet.
    So als ob Du eben selbst mit der Tastatur schreiben würdest.

    Zur Steuerung von Fenstern usw. empfiehlt sich dagegen eher ControlSend.
    Damit kannst Du gezielt einzelne Controls eines bestimmten Fensters ansprechen.
    Um das Control herauszubekommen hast Du ja schon das AutoIt-Info Window entdeckt.

    Scripte starten in Scite kannst Du mit F5 wenn die Datei auch die Endung .au3 hat. Ansonsten weiß Scite mit der Datei nichts anzufangen ...
    Ich hoffe, dass hat schon mal etwas geholfen...
    Bei Fragen

    Edit: Ach ja, das mit dem Recorder ist so eine Sache. Der kann nur mit Send umgehen.
    D.h. um das wie Du sagst "mühselige eingeben" wirst Du wohl nicht herumkommen, wenn es vernünftig funktionieren soll. ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • danke - aber...
    bevor ich mit control send was machen kann, muss ich doch erst zu dem bestimmten Fenster (meiner Outlook eMail) hinkommen.

    Habe diesen Befehl gefunden: Send("^{TAB}")
    Das ist aber Ctrl TAB
    Beschreibung:
    Springe zum nächsten WindowTab (bei einem Fenster mit mehreren TABs, z.B. Firefox)

    Ich brauche aber ALT TAB, um wenigtens zum vorherigen Fenster zu wechseln, denn das kann ich ja so einstellen, dass ich dann dort lande, wenn ich es durch die immer unterschiedlichen Namen nicht direkt "ansprechen" kann.

    hat jemand eine Idee?

  • also Alt-Tab ist Send("!{TAB}")
    ich bin mir im Moment nur nicht ganz im Klaren,
    wo die Automatisierung deines Scriptes einsetzen soll ?(

    Soll Dein Script erkennen, ob eine neue Email angekommen ist, oder machst Du das noch von Hand...
    Soll "nur" das Fenster der geöffneten Email gesteuert werden oder schon vorher in Outlook direkt ...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • es soll erst einmal "nur" das Fenster der geöffneten Email gesteuert werden

    Jetzt bin ich schon weiter !!!

    Es geht schon mal das vorherige Fenster (drucken einer eMail) auf, mit:

    Send("!{TAB}")
    Send("!d")
    Send("d")
    Send("{TAB}")
    Opt("SendKeyDelay",500)
    Send("{TAB}")
    Opt("SendKeyDelay",500)

    Aber die TAB Funtion tut es nicht, obwohl ich 500ms warte.

    Was nun?

    ---
    neuste Meldung: ich muss moch länger warten - bei 3000ms geht es schon weiter - ich teste...

    Einmal editiert, zuletzt von Gunnii (26. Juli 2009 um 13:59)

  • es ist zum verzweifeln...

    2x funktioniert das mit dem TAB wechseln und dann geht es mittendrin nicht weiter und die Zeit ist abgelaufen mit:

    Send("!{TAB}")
    Send("!d")
    Send("d")
    Send("{TAB}")
    Opt("SendKeyDelay",2000)
    Send("{TAB}")
    Opt("SendKeyDelay",5000)
    Send("{TAB}")
    Opt("SendKeyDelay",5000)
    Send("{TAB}")
    Opt("SendKeyDelay",5000)

    ---
    bei der fett markierten Zeile geht es nicht weiter.

    Wer hat eine Idee?

    Wenn ich dann mit der TAB Taste den TAB auslöse, klappt es einwandfrei... - HILFE

    • Offizieller Beitrag

    Hallo

    Das hier ist die Jobbörse - d.h. gegen Lohn (in jeglicher Art und Weise) werden hier Jobanträge angenommen, Skripte die also andere User gegen Entgelt für dich schreiben.
    Da du hier mehr nach Hilfe ausbist gehört das auch nicht in die Jobbörse sondern zu Hilfe&Unterstüzung

    Mfg Spider
    //Edit: Hab natürlich mal wieder nicht genug Rechte :thumbdown: Also bleibt das Thema hier, aber fürs nächste mal ;)

  • oh sorry..
    wem darf ich einen ausgeben?
    (von Job kann man da ja echt noch nicht sprechen)

    Soll ich unter Hilfe noch einmal die Fragen stellen?

    (mit dem Sleep geht es schon mal wieder ne Ecke weiter
    (aller Anfang ist schwer)

  • hier mal ein Ansatz zum ausbauen...

    Spoiler anzeigen
    [autoit]

    Opt("WinTitleMatchMode", 2)
    HotKeySet("{F8}","email_drucken")

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    GUICreate('')
    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    ;Case $msg =
    ;Case $msg =
    ;Case $msg =
    ;Case $msg =
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func email_drucken()
    ;ControlSend("Nachricht","","MsoCommandBar3","!d")
    ControlSend("Nachricht","","MsoCommandBar3","^p")
    WinWait("Drucken","Drucker auswählen",10)
    If WinExists("Drucken","Drucker auswählen") Then
    ControlClick("Drucken","Drucker auswählen","[CLASS:Button; INSTANCE:4]")
    EndIf
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • hier mal ein Ansatz zum ausbauen...

    ???

    versteh ich nicht - sollte da ein link drin sein?
    ------

    Ich hab's schon mal so weit hin, dass mein Drucker den Bereich druckt.
    Nun könnte man das noch ausschmücken, mit einer suche nach dem bestimmten Bereich in der E-mail.

    Aber es ist ein schönes Gefühl, wenn es zum ersten mal zum Erfolg führt.
    Jetzt setze ich die Sleep Länge immer weiter runter, bis es wieder klemmt.

    DANKE an die Betroffenen für die vielen kleinen TIPPS!

    Wo sollte ich denn posten, wenn ich hier nicht weiter komme - Moderator?

  • sorry,

    hier nochmal ein Ansatz mit Beschreibung:

    [autoit]

    Opt("WinTitleMatchMode", 2)
    HotKeySet("{F8}","email_drucken"); setzt die Taste F8 als HotKey zum Ausführen deiner Funktion
    HotKeySet("^{F8}","exitprog"); beendet das Prog mit Strg + F8

    [/autoit][autoit][/autoit][autoit]

    Func email_drucken()
    ControlSend("Nachricht","","MsoCommandBar3","^p"); sendet an das aktive Fenster (sollte das Email-Fenster sein den Befehl STRG + P zum Anzeigen der Drucker auswahl
    WinWait("Drucken","Drucker auswählen",10); wartet auf das Druckerfenster
    If WinExists("Drucken","Drucker auswählen") Then
    ControlClick("Drucken","Drucker auswählen","[CLASS:Button; INSTANCE:4]"); klickt im Druckerfenster auf Einstellungen
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func exitprog()
    HotKeySet("{F8}"); löscht den HotKey
    HotKeySet("^{F8}"); löscht den HotKey
    Exit
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    #include <GUIConstants.au3>
    While 1

    [/autoit][autoit][/autoit][autoit]

    WEnd

    [/autoit]


    Die Daten für den ControlSend und ControlClick erhälst Du mit dem AutoIt Info Window.
    Damit ersparst Du Dir das mit dem Sleep usw.

    Aber das Vorgehen liegt ja ganz bei Dir :D

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Vorab:
    Ich habe eben eine kleine Spende über PAYPAL abgeschickt.

    Schnuffel
    Hast du zwar nix von, aber danke, dass du dir soviel Mühe machst und mitdenkst.

    Parallel habe ich ein wenig weiter gemacht und aus deinem Code nur eine Zeile einfließen lassen.
    Aber damit geht es schon einmal und auch noch recht flott.

    Habe das ganze compiliert und mir einen Button auf dem Desktop gemacht.

    Funktioniert soweit ganz gut, wenn ich da einen Doppelklick drauf mache. Habe dem Button unter Eigenschaften einen Hotkey vergeben, aber damit werden meine Befehle in Fenstern von Firefox ausgeführt und es ist etwas chaotisch. Aber es geht auch ohne!

    Dann habe ich testweise auch mal deine Zeilen mit dem F8 Hotkey oben und unten reinkopiert in meinen Code, aber das klappte nicht so recht.

    Hier mal das, was ganz gut klappt:
    (sei nicht böse, dass ich das mit dem ....CLASS:Button; INSTANCE:4] nicht reingebaut habe, aber das versteh' ich NOCH nicht so recht am ersten Tag mit AutoIT...)

    - never change a running system -

    Send("!{TAB}")
    Send("!d")
    Send("d")
    WinWait("Drucken","Drucker auswählen",10); wartet auf das Druckerfenster
    Send("{TAB}")
    Sleep(10)
    Send("{TAB}")
    Sleep(10)
    Send("{TAB}")
    Sleep(10)
    Send("{TAB}")
    Sleep(10)
    Send("{TAB}")
    Sleep(10)
    Send("{DOWN}")
    Send("!e")
    Send("^{TAB}")
    Send("!m")
    Send("!g")
    Send("{TAB}")
    Sleep(10)
    Send("{TAB}")
    Sleep(10)
    Send("{TAB}")
    Sleep(10)
    send("{enter}")
    Send("{TAB}")
    Sleep(10)
    Send("{TAB}")
    Sleep(10)
    send("{enter}")
    Send("!d")

    ----
    Als nächste Steigerung müsste es mir Gelingen den markierten Bereich in meiner eMail umzukehren.
    Da habe ich noch keinen Weg gefunden.

    Mit umkehren meine ich, alles zu markieren, was jetzt nicht markiert ist.

  • vielleicht mit Shift-Down?

    [autoit]

    Send("+{DOWN}")

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • vielleicht mit Shift-Down?

    Das hatte ich schon alles probiert - geht nicht.

    Es gelingt mir nicht mit Tastatur Befehlen in einer eMail was zu markieren.

    Zu 98% ist das schon ok so. Wäre natürlich schön, wenn man das auch automatisieren könnte.

    Ich kann in einer Mail den Anfang, des gewünschten Bereichs mit "Bearbeiten" / "suchen" , aber den Bereich dann nicht verändern/erweitern.

    Vielleicht schafft es ja jemand.
    Ich verwende Outlook 2003.

    Gruß + schönen Sonntag
    Gunnii

  • also wenn Du in das Nachrichtenfenster klickst, dann kannst Du den gesamten Text markieren mit Strg-A

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • und mehr auch nicht.

    Man kann über die Tastatur die Markierung nicht verändern (jedenfalls nicht in Outlook) - oder?

    So sieht im Prinzip meine Mail aus:

    text-oben+text-oben+
    text-oben+text-oben+
    <table><tr>< usw.
    text-unten+text-unten+
    text-unten+text-unten+
    ...tr></table><p>

    --------
    den gesamten text-oben drucke ich aus (klappt ja auch)

    Dann markiere ich z.Zt. den Text-unten ab <table> bis ans Ende zu /table><p> und wechsel zu EXCEL und löse da einen Makro aus (der das als Inhalt / Text in viele Spalten einfügt).

    Das klappt soweit ganz gut. (aber eben seit Jahren mit vielen unnötigen Mausklicks)


    Ich müsste nur automatisch den Bereich mit dem <table> finden, um dann davor bzw. ab dort die Markierung fest zu legen.

    Wenn du möchtest leite ich dir so eine Original html Mail mal weiter...
    (dann PN)

    ---
    Wie löse ich eigentlich mit einem SEND Befehl eine Funtionstaste aus?
    ... ich brauche ALT F8

    Einmal editiert, zuletzt von Gunnii (27. Juli 2009 um 00:04)