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ê?
.... 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));
É 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ê?
erro=0
e lasterror =4103, arquivo não aberto
por quê?
O nome do arquivo é único ou você reutiliza nomes de arquivo?
único
único
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 ... }
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Á.
Como você os torna únicos ?
string timestamp = TimeToStr(TimeCurrent(),TIME_SECONDS); filename = filename + "_" + timestamp + ".gif";
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.
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)); }
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 . .
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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