Hallo
Habe da ein kleines Problem der jenige der für mich das Programm geschrieben hat meldet sich leider nicht mehr!Bis dato hat her wirklich gute Arbeit gemacht!
Nun habe ich 3 Fehler festgestellt:
1. Programm schließt sich wenn keine Emails vorhanden sind!
----> Ich möchte es aber immer im hintergrund laufen lassen und das er dan halt jede 1 min auf eine E-Mail checkt!
2. Beim ausfühlen der Zeilen im Programm macht er alles wunderbar aber es bestätigt den Fenster nicht wo man unbedingt mit der Maus drauf klicken muss da
das Programm nicht anders an nimmt aus Sicherheitsbestimmungen nicht!
----> hier müsste anstatt das man mit enter das fenster bestätigt mit dem mauszeiger die jeweiligen Buttons drücken!
3. Zuletzt wenn er mal die emails durchgearbeitet hat und zum Ende kommt aber nichts ausgeführt hat schliest sich das Script!!
----> Hier soll es wieder von vorne anfangen heißt Emails checken!
Um zu veranschaulichen was das script genau macht würde ich sagen das man in der woche mal per teamviewer drauf schaut!
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=..\..\demmar_output\main.exe
#AutoIt3Wrapper_Outfile_x64=..\..\demmar_output\main_x64.exe
#AutoIt3Wrapper_Compression=0
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_UseX64=y
#AutoIt3Wrapper_Add_Constants=n
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include<File.au3>
#include <String.au3>
#include <ArrayMore.au3>
#include <GuiListView.au3>
#include <MsgBoxConstants.au3>
#include <GuiComboBoxEx.au3>
#include <GuiListView.au3>
#include "sender.au3"
Global $hWnd, $hListView, $aListView, $aMails, $aSenders, $aRelevantMails, $sType
Global $sConfigFile = @ScriptDir & "\config.ini"
Global $sSenderFilesDir = @ScriptDir & "\senders"
Global $sSensusPath = IniRead($sConfigFile, "config", "sensuspath", "")
Global $sVolumen = IniRead($sConfigFile, "config", "volumen", "0.05")
Global $aSignal[8]
;0 = Signal Type
;1 = po type
;2 = Symbol
;3 = cost
;4 = take profit
;5 = stoploss
;6 = start time
;7 = stop time
#Region handle zu MT4 holen
$hWnd = WinGetHandle("[CLASS:MetaQuotes::MetaTrader::4.00]")
If Not IsHWnd($hWnd) Then
Run($sSensusPath)
;_errorHandler("SENSUS MT4 Client Terminal konnte nicht gefunden werden." & @CRLF & "Stellen sie sicher, das MT4 läuft und starten sie dieses Programm neu!")
EndIf
Do
$hWnd = WinGetHandle("[CLASS:MetaQuotes::MetaTrader::4.00]")
Until IsHWnd($hWnd)
#EndRegion handle zu MT4 holen
Sleep(3000)
#Region Konfigurationsdaten und Mails laden
If Not FileExists($sConfigFile) Then
_errorHandler("Die Konfigurationsdatei konnte nicht gefunden werden!")
EndIf
Global $sMailPath = IniRead($sConfigFile, "config", "mailpath", "test")
If @error Then
_errorHandler("Der Pfad zum EMail-rdner konnte nicht aus der Konfigurationsdatei gelesen werden." & @CRLF & "Bitte setzen sie im Abschnitt 'config' den Wert für den Schlüssel 'mailpath'!")
EndIf
$aMails = _FileListToArray($sMailPath, "*.eml", 1, 1)
If Not IsArray($aMails) Then
_errorHandler("Es konnten keine Mails im angegebenen Ordner gefunden werden", 5, Default)
EndIf
$aSenders = IniReadSection($sConfigFile, "sender")
If Not IsArray($aSenders) Then
_errorHandler("Es konnten keine Absenderdaten aus der Konfigurationsdatei geladen werden")
EndIf
#EndRegion Konfigurationsdaten und Mails laden
$aRelevantMails = _getRelevantMails()
If @error Then
_errorHandler("Keine relevanten Mails gefunden", 5, Default)
EndIf
For $i = 1 To $aRelevantMails[0][0]
Switch $aRelevantMails[$i][1]
Case "s1"
$asignal = _signalforesignalcom($aRelevantMails[$i][0])
_setOrder($asignal)
EndSwitch
Next
For $i = 1 To $aMails[0]
FileDelete($aMails[$i])
Next
Func _setOrder($asignal)
Local $hMarket, $aMails, $iIndex, $hcSymbol, $iSymbolIndex, $aListItems
Local $sOrderSelection = ""
$hMarket = ControlGetHandle($hWnd, "", "[CLASS:SysListView32;INSTANCE:17]")
$aMarket = _GUICtrlListView_CreateArray($hMarket)
$iIndex = _ArraySearch($aMarket, $asignal[2])
If @error Then
_errorHandler("Index im Markt konnte nicht ermittelt werden!")
EndIf
WinActivate($hWnd)
_GUICtrlListView_SetItemSelected($hMarket, $iIndex - 1, 1, 1)
ControlFocus($hWnd, "", $hMarket)
ControlSend($hWnd, "", $hMarket, "{F9}")
Sleep(300)
If WinExists("Auftrag", "") Then
$hWndOrder = WinGetHandle("Auftrag", "")
#Region Symbol setzen
$hcSymbol = ControlGetHandle($hWndOrder, "", "[CLASS:ComboBox;INSTANCE:1]")
$iSymbolIndex = _GUICtrlComboBoxEx_GetCurSel($hcSymbol)
_GUICtrlComboBoxEx_GetItemText($hcSymbol, $iSymbolIndex, $sOrderSelection)
If StringLeft($sOrderSelection, StringLen($asignal[2])) <> $sOrderSelection Then
$aListItems = _GUICtrlComboBoxEx_GetListArray($hcSymbol)
For $i = 1 To $aListItems[0]
$aListItems[$i] = StringLeft($aListItems[$i], 6)
Next
$iIndex = _ArraySearch($aListItems, $asignal[2])
_GUICtrlComboBoxEx_SetCurSel($hcSymbol, $iIndex - 1)
EndIf
#EndRegion Symbol setzen
#Region Volumen setzen
$hcVolumen = ControlGetHandle($hWndOrder, "", "[CLASS:Edit;INSTANCE:1]")
If Not IsHWnd($hcVolumen) Then _errorHandler("Die ComboBox `Volumen` konnte nicht gefunden werden!")
ControlSetText($hWndOrder, "", $hcVolumen, $sVolumen)
#EndRegion Volumen setzen
#Region Typ setzen
$hcType = ControlGetHandle($hWndOrder, "", "[CLASS:ComboBox;INSTANCE:3]")
If Not IsHWnd($hcType) Then
_errorHandler("ComboBox 'Typ' nicht gefunden!")
EndIf
$aListItems = _GUICtrlComboBoxEx_GetListArray($hcType)
For $i = 1 To $aListItems[0]
$aListItems[$i] = StringLower($aListItems[$i])
Next
$iIndex = _ArraySearch($aListItems, $asignal[0])
WinActivate($hWndOrder)
ControlFocus($hWndOrder, "", $hcType)
Do
ControlSend($hWndOrder, "", $hcType, "{DOWN}")
Until _GUICtrlComboBox_GetCurSel($hcType) == $iIndex - 1
#EndRegion Typ setzen
Sleep(200)
#Region Pending Order Typ setzen
$hcOrderType = ControlGetHandle($hWndOrder, "", "[CLASS:ComboBox;INSTANCE:5]")
If Not IsHWnd($hcOrderType) Then _errorHandler("Die ComboBox `Typ`im Abschnitt 'Pending Order' konnte nicht gefunden werden!")
$aListItems = _GUICtrlComboBoxEx_GetListArray($hcOrderType)
For $i = 1 To $aListItems[0]
$aListItems[$i] = StringLower($aListItems[$i])
Next
$iIndex = _ArraySearch($aListItems, $asignal[1])
WinActivate($hWndOrder)
ControlFocus($hWndOrder, "", $hcType)
While _GUICtrlComboBox_GetCurSel($hcOrderType) <> $iIndex - 1
ControlSend($hWndOrder, "", $hcOrderType, "{DOWN}")
WEnd
#EndRegion Pending Order Typ setzen
#Region Preis setzen
$hcCost = ControlGetHandle($hWndOrder, "", "[CLASS:Edit;INSTANCE:6]")
If Not IsHWnd($hcCost) Then _errorHandler("Die ComboBox `zum Preis`im Abschnitt 'Pending Order' konnte nicht gefunden werden!")
ControlSetText($hWndOrder, "", $hcCost, $asignal[3])
#EndRegion Preis setzen
#Region stop loss setzen
$hcStopLoss = ControlGetHandle($hWndOrder, "", "[CLASS:Edit;INSTANCE:2]")
If Not IsHWnd($hcStopLoss) Then _errorHandler("Die ComboBox `Stop Loss`im Abschnitt 'Pending Order' konnte nicht gefunden werden!")
ControlSetText($hWndOrder, "", $hcStopLoss, $asignal[5])
#EndRegion stop loss setzen
#Region Take Profit setzen
$hcTakeProfit = ControlGetHandle($hWndOrder, "", "[CLASS:Edit;INSTANCE:3]")
If Not IsHWnd($hcStopLoss) Then _errorHandler("Die ComboBox `Take Profit`im Abschnitt 'Pending Order' konnte nicht gefunden werden!")
ControlSetText($hWndOrder, "", $hcTakeProfit, $asignal[4])
#EndRegion Take Profit setzen
#Region DTP setzen
$hcDTP = ControlGetHandle($hWndOrder, "", "[CLASS:SysDateTimePick32;INSTANCE:1]")
If Not IsHWnd($hcDTP) Then _errorHandler("Der DateTimePicker im Abschnitt 'Pending Order' konnte nicht gefunden werden!")
ControlFocus($hWndOrder, "", $hcCost)
ControlClick($hWndOrder, "", $hcCost)
Send("{TAB}")
Send("{SPACE}")
$aDTP = StringSplit($asignal[7], "|", 3)
For $i = 0 To UBound($aDTP) - 1
Send("{RIGHT}")
ControlSend($hWndOrder, "", $hcDTP, $aDTP[$i])
Next
#EndRegion DTP setzen
#Region absenden
$hcSave = ControlGetHandle($hWndOrder, "", "[CLASS:Button;INSTANCE:16]")
If Not IsHWnd($hcSave) Then _errorHandler("Der Button zum platzieren des Eintrags konnte nicht gefunden werden")
ControlClick($hWndOrder, "", $hcSave)
#EndRegion absenden
Sleep(300)
$hcOK = ControlGetHandle($hWndOrder, "", "[CLASS:Button;INSTANCE:22]")
If Not IsHWnd($hcOK) Then _errorHandler("Der Button zum schliessen des Order Fensters konnte nicht gefunden werden")
If ControlGetFocus($hWndOrder) <> "#32770" Then
_log($asignal)
WinClose($hWndOrder)
EndIf
Sleep(300)
Else
_errorHandler("Auftragsfenster konnte nicht gefunden werden!")
Exit
EndIf
EndFunc ;==>_setOrder
Func _getRelevantMails()
Local $sTmp = ""
Local $iIndex
Local $aResult, $aIndex
Local $aTmp[1][2]
$aTmp[0][0] = 0
For $i = 1 To $aMails[0]
$sTmp = FileRead($aMails[$i])
If Not @error Then
$aResult = StringRegExp($sTmp, "From:.*?<(.*?)>", 3, 1)
If IsArray($aResult) Then
$aIndex = _Array2DSearch($aSenders, $aResult[0])
If IsArray($aIndex) And $aIndex[0] <> 0 Then
$aIndex = StringSplit($aIndex[1], "|", 3)
If Not @error Then
$iSenderID = $aIndex[0]
_Array2dAdd($aTmp, $aMails[$i] & "|" & $aSenders[$iSenderID][0])
$aTmp[0][0] += 1
EndIf
EndIf
EndIf
EndIf
Next
If IsArray($aTmp) Then
Return $aTmp
Else
SetError(1)
EndIf
EndFunc ;==>_getRelevantMails
Func _errorHandler($sError, $iTimeout = 0, $fExit = True)
MsgBox(64, "Fehler", $sError, Int($iTimeout))
If $fExit = True Then Exit
EndFunc ;==>_errorHandler
Func _log($aArray)
Local $sLogFile = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & ".txt"
_FileWriteFromArray(@ScriptDir & "\logfiles" & $sLogFile, $aArray)
ShellExecute("notepad.exe", "'" & @ScriptDir & "\logfiles" & $sLogFile & "'")
EndFunc ;==>_log
;====================================================================================================================
; Name ..........: _GUICtrlListView_CreateArray
; Description ...: Creates a 2-dimensional array from a listview.
; Syntax ........: _GUICtrlListView_CreateArray($hListView[, $sDelimeter = '|'])
; Parameters ....: $hListView - Control ID/Handle to the control
; $sDelimeter - [optional] One or more characters to use as delimiters (case sensitive). Default is '|'.
; Return values .: Success - The array returned is two-dimensional and is made up of the following:
; $aArray[0][0] = Number of rows
; $aArray[0][1] = Number of columns
; $aArray[0][2] = Delimited string of the column name(s) e.g. Column 1|Column 2|Column 3|Column nth
; $aArray[1][0] = 1st row, 1st column
; $aArray[1][1] = 1st row, 2nd column
; $aArr)ay[1][2] = 1st row, 3rd column
; $aArray[n][0] = nth row, 1st column
; $aArray[n][1] = nth row, 2nd column
; $aArray[n][2] = nth row, 3rd column
; Author ........: guinness
; Remarks .......: GUICtrlListView.au3 should be included.
; Example .......: Yes
; =====================================================================================================================
Func _GUICtrlListView_CreateArray($hListView, $sDelimeter = '|')
Local $iColumnCount = _GUICtrlListView_GetColumnCount($hListView), $iDim = 0, $iItemCount = _GUICtrlListView_GetItemCount($hListView)
If $iColumnCount < 3 Then
$iDim = 3 - $iColumnCount
EndIf
If $sDelimeter = Default Then
$sDelimeter = '|'
EndIf
Local $aColumns = 0, $aReturn[$iItemCount + 1][$iColumnCount + $iDim] = [[$iItemCount, $iColumnCount, '']]
For $i = 0 To $iColumnCount - 1
$aColumns = _GUICtrlListView_GetColumn($hListView, $i)
$aReturn[0][2] &= $aColumns[5] & $sDelimeter
Next
$aReturn[0][2] = StringTrimRight($aReturn[0][2], StringLen($sDelimeter))
For $i = 0 To $iItemCount - 1
For $j = 0 To $iColumnCount - 1
$aReturn[$i + 1][$j] = _GUICtrlListView_GetItemText($hListView, $i, $j)
Next
Next
Return SetError(Number($aReturn[0][0] = 0), 0, $aReturn)
EndFunc ;==>_GUICtrlListView_CreateArray
Alles anzeigen