Você pode me dizer como pegar a janela chamada por F9 (Ordem)?
Não é possível encontrá-lo por texto.
Até o momento, foi pego da seguinte forma:
Isto não me parece ser um método nada confiável. Tente abrir alguma outra janela quando a janela de pedido estiver aberta, por exemplo, propriedades do gráfico, ou configurações de terminal, ou variáveis globais, etc. Que janela GetLastActivePopup lhe mostrará?
Ou é uma peculiaridade da função WindowHandle (embora a ajuda não mencione isso...).
Ou talvez eu seja idiota...
No modo de visualização, o cabo está funcionando sem qualquer problema. E você provavelmente não está testando em modo visual. Então faz sentido: sem janela, sem alça. Quanto às outras janelas abertas, pelo que entendi, elas não são acessíveis através do testador. Nesse caso, a única saída é procurar uma janela Metatrader na lista de todas as janelas usando o FindWindowExA(...)
Quando em modo de visualização, o cabo pode ser lido sem qualquer problema. Mas você deve estar testando NÃO em modo visual. Então faz sentido: sem janela, sem alça. Quanto às outras janelas abertas, entendo que elas não são acessíveis através do testador. Nesse caso, a única saída é procurar a janela necessária na lista de todas as janelas usando FindWindowExA(...).
Sim, eu tentei aplicar o código Ilnur da página 5:
Ilnur:
Aqui está um exemplo de um roteiro que inicia um testador de estratégia e espera que ele seja concluído. O texto do botão é lido com GetWindowTextA().
Curiosamente, a janela de teste não tem necessariamente que ser visível neste caso.
Mas do testador, este truque não funcionou. (Estou lançando outro terminal para otimização do testador e quero acompanhar a conclusão deste processo).
Se não for muito difícil, você pode me dar um exemplo para FindWindowExA(...) ou um link?
Aqui eu tenho essa função para encontrar uma janela:
#import "user32.dll"int FindWindowExA(int hwndParent,int hwndChildAfter, string lpClassName, string lpWindowName);
int GetWindowThreadProcessId(int hWnd,int lpdwProcessId);
int GetWindowTextA(int hWnd,string lpString,int nMaxCount);
#import//инициализируем текстовый буффер длиной 128 байт. Вообще должен быть 255 байт! Но он не влезает на экран, из-за чего окно форума сильно растягивается :)
string textbuf="АбвгдежзийклмнопрстуфхцчшщъыьэюяАбвгдежзийклмнопрстуфхцчшщъыьэюяАбвгдежзийклмнопрстуфхцчшщъыьэюяАбвгдежзийклмнопрстуфхцчшщъыьэюя";
int FindWindow(stringclass, string caption, bool captionexactly=false)
{
//int CurrentThreadID=GetWindowThreadProcessId(WindowHandle(Symbol(),Period()),0);string null_string;
int h=0;
while(true)
{
if (captionexactly)
h=FindWindowExA(0,h,class,caption);
else
h=FindWindowExA(0,h,class,null_string);
if (h==0) return(0);
//if (GetWindowThreadProcessId(h,0)!=CurrentThreadID) continue;if (captionexactly) return(h);
int len=StringLen(caption);
if (GetWindowTextA(h,textbuf,128)<len) continue;
if (StringSubstr(textbuf,0,len)==caption) return(h);
}
return(0);
}
Você pode me dizer como pegar a janela chamada por F9 (Ordem)?
Não é possível encontrá-lo por texto.
Até o momento, foi pego da seguinte forma:
Olá!
Você pode me dizer como determinar o descritor de MT a partir de um EA em execução no testador?
A construção:
não funciona, porqueRetorna 0.
Um gráfico como este está aberto neste momento? (com o símbolo e o período especificados)
Um gráfico como este está aberto neste momento? (com símbolo e período especificados)
Sim, é claro.
Experimentei de ambas as maneiras.
Ou é uma característica da função WindowHandle (embora não haja nenhuma palavra sobre ela em ajuda...)
Ou talvez eu seja idiota...
Sim, é claro.
Experimentei de ambas as maneiras.
Ou é uma peculiaridade da função WindowHandle (embora a ajuda não mencione isso...).
Ou talvez eu seja idiota...
Nesse caso, a única saída é procurar uma janela Metatrader na lista de todas as janelas usando o FindWindowExA(...)
Quando em modo de visualização, o cabo pode ser lido sem qualquer problema. Mas você deve estar testando NÃO em modo visual. Então faz sentido: sem janela, sem alça. Quanto às outras janelas abertas, entendo que elas não são acessíveis através do testador.
Nesse caso, a única saída é procurar a janela necessária na lista de todas as janelas usando FindWindowExA(...).
Sim, eu tentei aplicar o código Ilnur da página 5:
Aqui está um exemplo de um roteiro que inicia um testador de estratégia e espera que ele seja concluído. O texto do botão é lido com GetWindowTextA().
Curiosamente, a janela de teste não tem necessariamente que ser visível neste caso.
Mas do testador, este truque não funcionou. (Estou lançando outro terminal para otimização do testador e quero acompanhar a conclusão deste processo).
Se não for muito difícil, você pode me dar um exemplo para FindWindowExA(...) ou um link?
Aqui eu tenho essa função para encontrar uma janela:
Procure o nome da classe e o título da janela necessária em SPY++.
Comentei a verificação da identificação do fio porque não é necessária neste caso (não há janela de fonte para comparar).
Em geral, aconselho-o a lidar com as funções WinAPI, se você for utilizá-las. Consulte a MSDN(http://msdn.microsoft.com/en-us/library/ff818516.aspx) para uma descrição detalhada das funções.
por favor, informe como obter corretamente uma lista de ferramentas na janela de pedido (F9)?
Eu recebo o número de elementos, mas não consigo obter exatamente as linhas por número, retorna -1.
#define ID_SYMBOL 0x053E // nome do personagem a selecionar
cmhandle ComboBox
Aqui eu tenho essa função para a busca de janelas:
Alexey, obrigado, a função funciona, mas...
Comentei a verificação da identificação do fluxo porque não é necessária neste caso (não temos uma janela de fonte para comparar).
Apenas a identificação do fio é necessária, pois tenho dois terminais envolvidos.
Saí dele através da identificação do cabeçalho, mas ainda gostaria de saber como determinar a identificação do fluxo sob o testador?