Problema de WindowScreenShot

 

Hola,

En el indicador de costo WindowScreenShot está trabajando prfectly.

Crea una imagen a los 5 minutos por ejemplo: 10:15,10:20, etc...

Y

Despues de un periodo(aleatorio) de tiempo no funciona. No escribe el archivo.

¿Por qué?

GetLastError() no señala el error.

Aparentemente todo esta bien.


THX

 
ttechnik:

Hola,

En el indicador de costo WindowScreenShot está trabajando prfectly.

Crea una imagen a los 5 minutos por ejemplo: 10:15,10:20, etc...

Y

Después de un periodo(aleatorio) de tiempo no funciona. No escribe el archivo.

¿Por qué?

Es porque su código, que no podemos ver, está roto. Como no podemos ver su código, no podemos decirle dónde está roto.
 
  ....
  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 porque tu código, que no podemos ver, está roto. Como no podemos ver tu código no podemos decirte dónde está roto.

error=0

y lasterror =4103, no se puede abrir el archivo

¿Por qué?

 
ttechnik:

error=0

y lasterror =4103, no se puede abrir el archivo

¿Por qué?

¿El nombre del archivo es único o reutiliza los nombres de los archivos?
 
RaptorUK:
¿Los nombres de los archivos son únicos o se reutilizan?


único
 
ttechnik:

único
¿Cómo hacerlos únicos?
 
  1. NO llame a GetLastError() a menos que haya un error.
     WindowScreenShot(filename, X_pixels, Y_pixels); 
      int error=GetLastError();
      if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS
    ¿Qué son los valores de retorno de las funciones? ¿Cómo los utilizo? - Foro MQL4
    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();
    
    Si el FileOpen falla, handle == -1. Está emitiendo una alerta cuando NO hay error y continuando cuando SI lo hay.
 
RaptorUK:
¿Cómo hacerlos únicos?



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


Por lo que puedo ver, tu mayor problema es el manejo de errores, como WHRoeder ya ha mencionado, estás haciendo un mal trabajo al reportar los errores cuando/si ocurren. Por ejemplo, ni siquiera compruebas si WindowsScreenShot() ha funcionado o no... haz los cambios que ha sugerido WHRoeder y vuelve a probar. Tu nombre de archivo no es único . . usas la hh:mm:ss de la hora actual, por lo que cada día es posible sobrescribir un archivo de un día anterior, si ese archivo está abierto en ese momento esto podría causar un error 4103.

En su lugar. . .

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

. . para añadir la fecha en el nombre del archivo.

 
RaptorUK:

De lo que puedo ver su mayor problema es su manejo de errores, como WHRoeder ya ha mencionado, usted está haciendo un mal trabajo de informar de los errores cuando / si se producen. Por ejemplo, ni siquiera compruebas si WindowsScreenShot() ha funcionado o no... haz los cambios que ha sugerido WHRoeder y vuelve a probar. Tu nombre de archivo no es único . . usas la hh:mm:ss de la hora actual, por lo que cada día es posible sobrescribir un archivo de un día anterior, si ese archivo está abierto en ese momento esto podría causar un error 4103.

En su lugar. . .

. . . para añadir la fecha en el nombre del archivo.

lasterror es 4103, continuar

el error es 0

.....y salgo de la MT4 y la vuelvo a ejecutar, funciona correctamente

Después de un periodo(aleatorio) de tiempo no funciona. No escribir el archivo. Pero archivo, nombre de archivo único.

¿Por qué?


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:

el error es 4103, continúa

el error es 0

.....y salgo de la MT4 y la vuelvo a ejecutar, funciona correctamente

Después de un periodo(aleatorio) de tiempo no funciona. No escribir el archivo. Pero el archivo, nombre de archivo único.

¿Por qué?



Por favor, muestre la parte del archivo de registro que muestra los errores....
Razón de la queja: