Hallo,
Im Costum Indikator funktioniert WindowScreenShot einwandfrei.
Erstellen Sie eine Bilder bei 5 Minuten zB: 10:15,10:20, etc....
Und
Nach einem Zeitraum (zufällig) der Zeit funktioniert nicht. Die Datei wird nicht geschrieben.
warum?
.... WindowScreenShot(filename, X_pixels, Y_pixels); int error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite0 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite1 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); FileClose(handle); } int lasterror=GetLastError(); if (lasterror!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode," T_ScreenShot, Schoted file open error: (",Symbol()," ",lasterror,"): ",ErrorDescription(lasterror));
Es liegt daran, dass Ihr Code, den wir nicht sehen können, fehlerhaft ist. Da wir Ihren Code nicht sehen können, können wir Ihnen nicht sagen, wo er fehlerhaft ist.
Fehler=0
und lasterror =4103, Datei kann nicht geöffnet werden
Warum?
Fehler=0
und lasterror =4103, Datei kann nicht geöffnet werden
warum?
Ist der Dateiname eindeutig oder werden die Dateinamen wiederverwendet?
eindeutig
einzigartig
Rufen Sie GetLastError() NICHT auf, es sei denn, es liegt ein Fehler vor. WindowScreenShot(filename, X_pixels, Y_pixels); int error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS
Was sind Funktionsrückgabewerte? Wie verwende ich sie? - MQL4-Forum if( !WindowScreenShot(filename, X_pixels, Y_pixels) ){ int error=GetLastError(); Alert(TimeToStr(TimeCurrent(),TIME_SECONDS ... }
int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError();
Wenn das FileOpen fehlschlägt, ist handle == -1. Sie geben eine Warnung aus, wenn KEIN Fehler vorliegt und fahren fort, wenn einer vorliegt.
Wie kann man sie einzigartig machen?
string timestamp = TimeToStr(TimeCurrent(),TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
Wie ich sehe, ist Ihr größtes Problem die Fehlerbehandlung. Wie WHRoeder bereits erwähnt hat, leisten Sie schlechte Arbeit bei der Meldung von Fehlern, wenn sie auftreten. Sie überprüfen zum Beispiel nicht einmal, ob WindowsScreenShot() funktioniert hat oder nicht ... nehmen Sie die von WHRoeder vorgeschlagenen Änderungen vor und testen Sie erneut. Ihr Dateiname ist nicht eindeutig . ... Sie verwenden das hh:mm:ss der aktuellen Zeit, so dass es jeden Tag möglich ist, eine Datei von einem früheren Tag zu überschreiben, wenn diese Datei zu diesem Zeitpunkt geöffnet ist, könnte dies einen 4103-Fehler verursachen.
Stattdessen...
string timestamp = TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
um das Datum in den Dateinamen einzufügen.
Wie ich sehe, ist Ihr größtes Problem die Fehlerbehandlung. Wie WHRoeder bereits erwähnt hat, leisten Sie schlechte Arbeit bei der Meldung von Fehlern, wenn sie auftreten. Sie überprüfen zum Beispiel nicht einmal, ob WindowsScreenShot() funktioniert hat oder nicht ... nehmen Sie die von WHRoeder vorgeschlagenen Änderungen vor und testen Sie erneut. Ihr Dateiname ist nicht eindeutig . ... Sie verwenden das hh:mm:ss der aktuellen Zeit, so dass es jeden Tag möglich ist, eine Datei von einem früheren Tag zu überschreiben, wenn diese Datei zu diesem Zeitpunkt geöffnet ist, könnte dies einen 4103-Fehler verursachen.
Stattdessen...
. . . um das Datum in den Dateinamen einzufügen.
Der letzte Fehler ist 4103, weiter
Fehler ist 0
.....und ich beende den MT4 und starte ihn erneut, er läuft korrekt
Nach einer (zufälligen) Zeitspanne funktioniert es nicht. Nicht die Datei schreiben. Aber Datei, Dateiname eindeutig.
Warum?
string timestamp = TimeToStr(TimeCurrent(),TIME_DATE )+"_"+TimeToStr(TimeCurrent(),TIME_SECONDS); for (int i= StringLen(timestamp); i>0; i--) if (StringFind(timestamp,":",i)!=-1 || StringFind(timestamp,".",i)!=-1) timestamp= StringSetChar(timestamp, i, '-'); string filename = mappa + CharToStr(92) + CharToStr(92) + Symbol(); filename = filename + "_" + timestamp + ".gif"; int error; if(!WindowScreenShot(filename, X_pixels, Y_pixels)) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite0 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); } Alert(filename); int handle = FileOpen(filename, FILE_BIN|FILE_READ); if (handle>-1) { error=GetLastError(); if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite1 error: (",Symbol()," ",error,"): ",ErrorDescription(error)); FileClose(handle); } else { int lasterror=GetLastError(); if (lasterror!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode," T_ScreenShot, Schoted file open error: (",Symbol()," ",lasterror,"): ",ErrorDescription(lasterror)); }
Lasterror ist 4103, weiter
Fehler ist 0
.....und ich beende den MT4 und führe ihn erneut aus, er läuft korrekt
Nach einem Zeitraum (zufällig) von Zeit nicht funktioniert. Nicht die Datei schreiben. Aber Datei, Dateiname eindeutig.
Warum?
Bitte zeigen Sie den Teil der Protokolldatei, in dem die Fehler auftreten.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo,
Im Costum Indikator funktioniert WindowScreenShot einwandfrei.
Erstellen Sie eine Bilder bei 5 Minuten zB: 10:15,10:20, etc....
Und
Nach einem Zeitraum (zufällig) der Zeit funktioniert nicht. Die Datei wird nicht geschrieben.
warum?
GetLastError() signalisiert keinen Fehler.
Anscheinend alles gut.
THX