WindowScreenShot-Problem

 

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

 
ttechnik:

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?

Das 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.
 
  ....
  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));
  
RaptorUK:
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?

 
ttechnik:

Fehler=0

und lasterror =4103, Datei kann nicht geöffnet werden

warum?

Ist der Dateiname eindeutig oder werden die Dateinamen wiederverwendet?
 
RaptorUK:
Ist der Dateiname eindeutig oder werden die Dateinamen wiederverwendet?


eindeutig
 
ttechnik:

einzigartig
Wie kann man sie einzigartig machen?
 
  1. 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 ...
    }

  2.   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.
 
RaptorUK:
Wie kann man sie einzigartig machen?



string timestamp = TimeToStr(TimeCurrent(),TIME_SECONDS);
filename = filename + "_" + timestamp +  ".gif";
 
ttechnik:


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.

 
RaptorUK:

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));
   }
 
ttechnik:

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.