WindowScreenShot problema

 

Olá,

No indicador de costumização WindowScreenShot está funcionando perfeitamente.

Crie uma imagem em 5 minutos, por exemplo: 10:15,10:20, etc...

E

Após um período (aleatório) de tempo não funciona. Não escreva o arquivo.

Por quê?

GetLastError() não sinaliza erro.

Aparentemente, tudo bem.


THX

 
ttechnik:

Olá,

No indicador de costumização WindowScreenShot está funcionando perfeitamente.

Crie uma imagem em 5 minutos, por exemplo: 10:15,10:20, etc...

E

Após um período (aleatório) de tempo não funciona. Não escreva o arquivo.

Por quê?

É porque seu código, que não podemos ver, está quebrado. Como não podemos ver seu código, não podemos lhe dizer onde ele está quebrado.
 
  ....
  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:
É porque seu código, que não podemos ver, está quebrado. Como não podemos ver seu código, não podemos lhe dizer onde ele está quebrado.

erro=0

e lasterror =4103, arquivo não aberto

por quê?

 
ttechnik:

erro=0

e lasterror =4103, arquivo não aberto

por quê?

O nome do arquivo é único ou você reutiliza nomes de arquivo?
 
RaptorUK:
O nome do arquivo é único ou você reutiliza nomes de arquivo?


único
 
ttechnik:

único
Como você os torna únicos ?
 
  1. NÃO chame GetLastError() a menos que haja um erro.
     WindowScreenShot(filename, X_pixels, Y_pixels); 
      int error=GetLastError();
      if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS
    O que são valores de retorno de função ? Como eu os utilizo ? - Fórum 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();
    
    Se o FileOpen falhar, manusear == -1. Você está emitindo um alerta quando NÃO há erro e continuando quando há ESTÁ.
 
RaptorUK:
Como você os torna únicos ?



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


Pelo que posso ver, seu maior problema é seu tratamento de erros, como WHRoeder já mencionou, você está fazendo um trabalho pobre ao relatar os erros quando/se eles ocorrerem. Por exemplo, você nem mesmo verifica se o WindowsScreenShot() funcionou ou não funcionou . . . faz as mudanças que WHRoeder sugeriu e testa novamente. Seu nome de arquivo não é único . . você usa o hh:mm:ss da hora atual, então a cada dia é possível sobregravar um arquivo de um dia anterior, se esse arquivo estiver aberto no momento, isso pode causar um erro 4103.

Em vez disso . . .

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

... para adicionar a data no nome do arquivo.

 
RaptorUK:

Pelo que posso ver, seu maior problema é seu tratamento de erros, como WHRoeder já mencionou, você está fazendo um trabalho pobre ao relatar os erros quando/se eles ocorrerem. Por exemplo, você nem mesmo verifica se o WindowsScreenShot() funcionou ou não funcionou ... faz as mudanças que WHRoeder sugeriu e testa novamente. Seu nome de arquivo não é único . . você usa o hh:mm:ss da hora atual, então a cada dia é possível sobregravar um arquivo de um dia anterior, se esse arquivo estiver aberto no momento, isso pode causar um erro 4103.

Em vez disso . . .

... para adicionar a data no nome do arquivo.

lasterror é 4103, continuar

erro é 0

..... e eu abandonei o MT4 e o voltei a rodar, rodar corretamente

Após um período (aleatório) de tempo não funciona. Não escrever o arquivo. Mas arquivo, nome de arquivo único.

Por que?


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 é 4103, continuar

erro é 0

..... e eu abandonei o MT4 e o voltei a rodar, rodar corretamente

Após um período (aleatório) de tempo não funciona. Não escrever o arquivo. Mas arquivo, nome de arquivo único.

Por quê?



Favor mostrar a parte do arquivo de log que mostra os erros . .