 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Zermi Gast
|
Verfasst am: So Sep 10, 2006 3:26 pm Titel: merkwürdiges Verhalten |
|
|
Hi, ich habe ein Script geschrieben, welches auf eine eingehende Mail reagieren soll. Die Mail wird gelesen , die Betreffzeile und die ersten 7 Ziffern des Mailtextes werden ausgewertet. Danach übergibt das Script diese Werte an ein anderes Programm auf dem Rechner (digitales Archiv) und ruft das entsprechende Dokument auf, und vermailt es als Antwort an den entsprechenden Sender der Mail. Die ganze Sache funktioniert auch eigentlich ganz prima, nur wenn mehrere Mail in kurzem Abstand eintreffen, kann es sein das gleichzeitig zwei Mails geöffnet werden , und dann hängt sich die ganze Geschichte leider auf. Ich bitte um Nachsicht, wenn der Code nicht besonders elegant ist, aber dies ist mein erstes Experiment mit AutoHotkey.
Es wäre nett, wenn mir jemand helfen könnte
| Code: | ; AutoHotkey Version: 1.x
; Language: Deutsch
; Platform: Win9x/NT
; Author: Frank ; Script Function:
; Template AutoHotkey script.
SetKeydelay 200
start:
Fehler =
elapsed_time =
start_time =
date := A_dd
date1 := A_mm
status =0
clipboard =
mailkopie =
maila =
mailab =
betreff =
;##############################################################
; Prüfe auf neue Objekte von Outlook
;##############################################################
winActivate, Posteingang - Microsoft Outlook
StatusBarGetText, anzahlmail, 1, Posteingang
StringLeft, anzahlmail,anzahlmail, 1
if anzahlmail >0 and status =0
goto mailabrufen
else
{
sleep ,3000
goto start
}
mailabrufen:
status =1
winActivate, Posteingang - Microsoft Outlook
send {Enter}
sleep 1000
start_time := A_TickCount ; Startzeit für die Ermittlung der Laufzeit
Send +{Tab 5}
sleep, 100
send {left}
sleep, 100
send +{End}
sleep 100
;##############################################################
; Mailadresse markieren, und in der Variablen "maila" speichern
;##############################################################
send ^c ; Kopieren in Zwischenablage
maila = %Clipboard%
maila = %maila%
;#################################################################
; Betreffzeile markieren, und in der Variablen "Betreff" speichern
;#################################################################
send {Tab 4}
send {home}
send +{right 7}
send ^c ; Kopieren in Zwischenablage
betreff = %Clipboard%
Stringupper, betreff, betreff
if betreff <> ANGEBOT
{
send !d ; Mail löschen
sleep 100
send {Tab 5}
send {Enter}
sleep 1000
goto, start
}
;#################################################################
; Angebotsnummer markieren, und in der Variablen "Angeb" speichern
;#################################################################
send {tab}
send {home}
send +{right 7}
send ^c
Angeb = %Clipboard%
;#################################################################
; Prüfen, ob unterhalb der Angebotsnummer noch eine Zeile ist
; wenn ja speichern in der Varialblen "mailab"
;#################################################################
send {down}
send {home}
send +{end}
send ^c
mailab = %Clipboard%
mailab = %mailab%
;##############################################################
;Variable "mailab" prüfen
;##############################################################
if mailab < = 0
mailab = %maila%
else
{
mailkopie = %maila%
maila = %mailab%
}
SplashTextOn,500,200, MailAD läuft, Angebotsnummer: %Angeb% Mailadresse: %maila% Betreffzeile: %betreff%
WinMove, MailAD läuft, , 0,800
;#################################################################
; Aktuelle Mail löschen
;#################################################################
winActivate, - Nachricht
send !d
sleep 100
send {Tab 5}
send {Enter}
;##############################################################
;Variable "Angeb" prüfen
;##############################################################
if Angeb is not integer
{
Fehler = Keine gültige Angebotsnummer %Angeb% Bitte nur Zahlen !
goto Fehler
}
if Angeb is <= 1800000 or is %Angebot% >2400000
{
Fehler = Keine gültige Angebotsnummer %Angeb% Angebotsnummer sollte zwischen 1800000 und 2400000 liegen
goto Fehler
}
; ######################
; # Aufruf Retrival #
; ######################
WinActivate, WindowsRetrieval
MouseClick, left,154,200,2
sleep 1000
winwait Dokumentsuche
WinActivate, Dokumentsuche
send {TAB 5}
send %Angeb% ; Angebotsnummer eingeben in Suchmaske
send {Enter}
sleep 6000 ; Der sleep muß bleiben !!!!!!
WinActivate, WindowsRetrieval
sleep 200
MouseClick, left,544,561
sleep 400
MouseClick, right,571,136
sleep 400
MouseMove, 30, 75, 0, R
sleep 400
send {enter}
;#############################################
;# Prüfen ob Fehlermeldung vom Retrival #
;#############################################
IfWINExist, Dokumentsuche durchführen
{
Fehler = Kein Angebot mit der Nr: %Angeb% gefunden
Winactivate, Dokumentsuche durchführen
Send {Enter}
WinActivate, Dokumentsuche
send !c
goto, Fehler
}
winwait, Unbenannt - Nachricht
WinActivate , Unbenannt - Nachricht
sleep 100
clipboard = %maila%
send ^v
send {tab}
send {tab}
send Angebot %Angeb% . Antwort
sleep 100
send !s
;###############################
;# Zeitnehmen #
;###############################
elapsed_time := A_TickCount - start_time
elapsed_time /= 1000
sleep 3000
IfWINExist, Dokumentsuche
{
WinActivate, Dokumentsuche
send !c
}
FileAppend, `n Angebot :%Angeb% wurde verarbeitet in : %elapsed_time% Sek. `n und an %Maila% versandt am :%date%%date1% , Y:\Station\Nlall\Protokoll%date%%date1%.txt
sleep 1000
;###############################
;# Bestätigung versenden #
;###############################
if mailkopie >0
{
TEXT = Das Angebot %Angeb% wurde gemailt an %maila%
Winactivate Posteingang - Microsoft Outlook
sleep, 1000
MouseClick, left, 21,51
Sleep, 1000
Send %mailkopie%
send {tab}
send {tab}
Send %TEXT%
sleep, 1000
send !S
}
sleep 1000
goto, start
;###############################
;# Unterprogramme #
;###############################
Fehler:
Winactivate Posteingang - Microsoft Outlook
sleep, 1000
MouseClick, left, 21,51
Sleep, 1000
Send %maila%
send {tab}
Send Torsten.Test@Test-net.de
Send {tab}
Send %Fehler%
sleep, 400
send !S
Goto, Start |
|
|
| Nach oben |
|
 |
halweg
Anmeldedatum: 05.01.2006 Beiträge: 872 Wohnort: Dresden
|
Verfasst am: Mo Sep 11, 2006 10:01 am Titel: |
|
|
Hallo Zermi,
endlich mal wieder jemand, der sich mit Outlook beschäftigt.
Ich weiß leider nicht, ob es jemand schafft, all deinen Code zu lesen. Fehler findet man ja auch immer am besten, wenn man den Code testhalber auf das wesentliche reduziert.
Auch könnten für dich Timer (SETTIMER) interessant sein, um den Programmeinstieg und die Abfrage etwas eleganter zu lösen.
Weitere Auffälligkeiten
- ENTER nach dem frisch aktivierten Posteingang: Bist du sicher, dass der Fokus immer auf der gewünschten E-Mail ist.
- Warum weist du maila doppelt zu. Falls du Probleme mit dem Clipboard hast: vorher leeren und dann CLIPWAIT benutzen.
- Noch eleganter kommst du an die TExte mit CONTROLGETTEXT ran
- Die SLEEPs zeugen von vielenTiming-Anforderungen. Das bringt eine hohe Unsicherheit der Programmausführung. Vielleicht kannst du ein paar durch WINWAITACTVE/WINWAITCLOSE ablösen.
- Mausklicks sind auch kritisch. Kann man da nicht mit Tasten ran?
- Du bewegst die Maus und sagst dann ENTER? Seltsam.
- Man kann per SEND mehrere Befehle auf eine Zeile senden. SETKEYDELAY wirkt auch dann pro Taste.
- Brauchst du nicht TITLEMATCHMMODE, wenn du Fenster anhand eines TEil ihres Titels aktivierst.
Das Problem mit dem mehrere Mails solltest du versuchen, zu extrahieren:
Wie kann es sein, dass das ENTER mehrere E-Mails öffnet?
Oder startet das PRogramm neu, während es eigentlich noch arbeiten sollte?
Ggf. kannst du auch den Fenstertitel (WINGETTITLE) reinbauen, um sicher zu gehen, dass du nur jmit einem Fenster arbeitest.
Insgesamt muss ich sagen, hast du dir für den Anfang ganz schön was vorgenommen. Ich bezweifle auch, dass dein Skript wie gewünscht funktioniert. Vielleicht ist es besser, wenn du erst mal nur Teilfunktionen deines Skriptes auf je eine Taste legts und damit Erfgahrungen sammelst. |
|
| Nach oben |
|
 |
Zermi Gast
|
Verfasst am: Mo Sep 11, 2006 11:29 am Titel: Danke für die nette Antwort |
|
|
Hallo Halweg,
danke für die netten Zeilen. Viele von deinen Anregungen muß ich ich erst noch ausprobieren (mehr dazu später) .
Auch wenn es dir merküwrdig erscheint läuft dieser Script tagtäglich relativ problemlos (Das vieles noch verbesserungswürdig ist, war mir klar)
Einige Befehle lassen sich leider wirklich mit der Tastatur erreichen, das ist in dem Programm (Digitales Archiv ) nicht vorgesehen .
Auf dem Arbeitsplatz an dem mein Script läuft, kommen nur Mails an die meinen Script betreffen, (Mailfilter von Outlook......usw.)
Mein Problem ist nur, das jetzt immer öfter Mails ankommen, die sich zeitlich überschneiden bzw sehr dicht aufeinander eintreffen.
Und dann kommt es manchmal dazu , das zwei Mails gleichzeitig offen sind. Eigentlich müßte der Script aber mit etwas ganz anderem beschäftigt sein. Kann es sein das evtl . der Script "multitasking" mäßig läuft. Oder kann ich davon ausgehen , das immer eine Zeile nach der anderen abgearbeitet wird ?? |
|
| Nach oben |
|
 |
BoBo Gast
|
Verfasst am: Mo Sep 11, 2006 12:34 pm Titel: |
|
|
| Zitat: | | Einige Befehle lassen sich leider wirklich mit der Tastatur erreichen, das ist in dem Programm (Digitales Archiv ) nicht vorgesehen. | Was ist den das finale Archivformat? PDF??
Was hälst du davon automatisierten Empfang und anschliessenden Autoresponse per Blat/GetMail zu machen? Frontendklickerei ist per se eigentlich zu wackelig ... |
|
| Nach oben |
|
 |
halweg
Anmeldedatum: 05.01.2006 Beiträge: 872 Wohnort: Dresden
|
Verfasst am: Mo Sep 11, 2006 1:10 pm Titel: Re: Danke für die nette Antwort |
|
|
| Zermi hat Folgendes geschrieben: | | Und dann kommt es manchmal dazu , das zwei Mails gleichzeitig offen sind. Eigentlich müßte der Script aber mit etwas ganz anderem beschäftigt sein. Kann es sein das evtl . der Script "multitasking" mäßig läuft. Oder kann ich davon ausgehen , das immer eine Zeile nach der anderen abgearbeitet wird ?? |
Eigentlich sollte kein MUltitasking stattfinden, bei deinem Code. Ich sehe zwei Möglichkeiten:
entweder schickst du eine ENTER zuviel an den Posteingang, sodass eine zweite Mail geöffnet wird (evtl. auch zwei markierte Mails mit einmal) oder das Skript läuft bis ans Ende durch, ohne die erste E-Mail richtig zu verarbeiten/schließen.
Bei so vielen SENDs wäre, wie gesagt, auf jeden Fall eine straffe Fensterkontrolle mit IFWINACTIVE, WINWAIT, WINWAITCLOSE usw. wichtig. |
|
| Nach oben |
|
 |
BoBo Gast
|
Verfasst am: Mo Sep 11, 2006 1:16 pm Titel: |
|
|
| Zitat: | | merkwürdiges Verhalten | Sofern das ein Statement zu meiner Person wäre, wärs ja noch verständlich, aber so ists als 'Teaser' im Betreff eigentlich unbrauchbar (Bravo-Sprechstunde bei Dr. Sommer mal ausgenommen). Bitte zukünftig etwas 'fach-/sachbezogener'. Dann findet sich der Thread später auch besser wieder. Danke.  |
|
| Nach oben |
|
 |
Zermi Gast
|
Verfasst am: Mo Sep 11, 2006 6:15 pm Titel: Archivformat |
|
|
| Zitat: |
Was ist den das finale Archivformat? PDF??
Was hälst du davon automatisierten Empfang und anschliessenden Autoresponse per Blat/GetMail zu machen? Frontendklickerei ist per se eigentlich zu wackelig ... |
Hallo BoBo,
das Archivformat ist TIFF , und DWG. Leider habe ich nicht verstanden , was du mit | Zitat: | | und anschliessenden Autoresponse per Blat/GetMail | genau meinst. Kannst Du mir das bitte näher erläutern ?
Das Schript simuliert im Prinzip das Verhalten eines Sachbearbeiters, der einem Kunden bzw. Außendienstler eine Mail aus dem Archiv schickt.
Eine (z.B: Angebotsnummer ) wird in dem Archivprogramm aufgerufen. Das Programm liefert als Antwort eine gewisse Anzahl von Dokumenten, wobei aber immer nur das letzte der Dokumente (weil aktueller Stand) versandt werden soll. Danach erfolgt der Versand als Email. |
|
| Nach oben |
|
 |
Zermi Gast
|
Verfasst am: Mo Sep 11, 2006 6:17 pm Titel: Sind wir nicht alle ein wenig merkwürdig .....? |
|
|
| BoBo hat Folgendes geschrieben: | | Zitat: | | merkwürdiges Verhalten | Sofern das ein Statement zu meiner Person wäre, wärs ja noch verständlich, aber so ists als 'Teaser' im Betreff eigentlich unbrauchbar (Bravo-Sprechstunde bei Dr. Sommer mal ausgenommen). Bitte zukünftig etwas 'fach-/sachbezogener'. Dann findet sich der Thread später auch besser wieder. Danke.  |
O.K:
Ich geb mir Mühe..... |
|
| Nach oben |
|
 |
BoBo Gast
|
Verfasst am: Mo Sep 11, 2006 7:14 pm Titel: |
|
|
Bekommt ihr die Mails über nen Provider oder direkt über einen eigenen Mailserver?
Inwiefern Mails von einem Exchangeserver mittels GetMail abgefragt werden können, entzieht sich meiner Kenntniss (mal den Admin fragen?). Sollte aber auch im Web zu klären sein. Dito zur Abfrage von Mail(headers) bei Providern.
Wenn die TIFF's und DWG's z.B. aufgrund einer Dateinamenspezifikation (z.B. Angebotsnummer) eindeutig identifizierbar sind, wäre die Auswahl über das ModifyDate wohl problemlos zu händeln. Attachen an das Mail ist AFAIK kein Problem.
Mit Blat! wäre dann der Versand von Mails vorzunehmen. |
|
| Nach oben |
|
 |
zermi Gast
|
Verfasst am: Mi Sep 13, 2006 6:44 pm Titel: Antwort |
|
|
| Zermi hat Folgendes geschrieben: | | Bei so vielen SENDs wäre, wie gesagt, auf jeden Fall eine straffe Fensterkontrolle mit IFWINACTIVE, WINWAIT, WINWAITCLOSE usw. wichtig. |
Hallo Halweg
vielen Dank für deine Vorschläge, ich habe alles ein wenig "verbessert" , und konnte auf fast alle sleeps verzichten.
Mein Hauptproblem konnte ich auch lösen.
Des Rätsels Lösung ist "outlook". Wenn eine vorhandene Mail auf meine Art und weise gelöscht wird (über das Menue) wird sofern vorhanden eine weitere Mail automatisch von Outlook geöffnet. In meinen Testphasen habe ich natürlich immer nur mit einer Mail gearbeitet. |
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|