Automação com interceptação por botão e clique do mouse. - página 5

 
xeon >> :

Era um bom terminal : -))))

Todos nós temos um desses terminais. E tem um botão vermelho em um certo sentido.

Somente você tem que bater na própria cabeça com um bastão. :))

 

Ilnur, o texto do botão também pode ser lido de alguma forma. O programa Spy++ o lê.



ou seja, a lógica é que enquanto o botão estiver ajustado para "Parar", esperamos que sejam tomadas novas medidas.

Dê-me uma função do User32.dll que puxa o texto do botão corretamente.



Função GetDlgItemText

Descrição:
função GetDlgItemText(Dlg: HWnd; IDDlgItem: Inteiro; Str: PChar; MaxCount: Inteiro): Inteiro;
Lê o texto do controle.
Parâmetros:
Dlg: Identificador da caixa de diálogo.
IDDlgItem: O ID do item.
Str: Buffer para receber texto.
MaxCount: O tamanho do amortecedor.
Valor devolvido:
O número real de caracteres copiados.


#importar "user32.dll

GetDlgItemText (int hWnd, int IDDlgItem, string PChar, int MaxCount);

#importar


Estou conectando a função corretamente.


Porque o terminal me mostra nos troncos

2008.11.15 21:03:41 testador EURUSD,H1: não pode chamar a função 'GetDlgItemText' da dll 'user32.dll' (erro 127)

 
xeon >> :

Esse era um bom terminal : -))))

Xeon, foi você quem começou tudo....

Eu mesmo não teria entrado nesse passo... mas eu não preciso....

 
HIDDEN >> :

. . .

#importar "user32.dll

GetDlgItemText (int hWnd, int IDDlgItem, string PChar, int MaxCount);

#importar


Estou conectando a função corretamente.


Porque o terminal me mostra nos troncos

2008.11.15 21:03:41 testador EURUSD,H1: não pode chamar a função 'GetDlgItemText' da dll 'user32.dll' (erro 127)

É mais assim . . .
#import "user32.dll"
   int GetDlgItemTextA(int hWnd, int IDDlgItem, string PChar, int MaxCount);
#import
 
Ilnur >> :
>> é mais assim. . .

Isto retornará um número inteiro, mas você precisa do texto do botão.

 
HIDDEN >> :

Isto retornará um número inteiro, mas você precisa do texto do botão.

O texto é retornado no buffer de cordas PChar.

A própria função retorna o número real de caracteres lidos.

 
HIDDEN >> :

Ilnur, o texto do botão também pode ser lido de alguma forma. O programa Spy++ o lê.


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 usando GetWindowTextA().

Curiosamente, a janela de teste não tem necessariamente que ser visível neste caso.


#include <WinUser32.mqh>

#import "user32.dll"
   int GetAncestor(int hWnd, int gaFlags);
   int GetDlgItem(int hDlg, int nIDDlgItem);
#import

void start()
{
   int hMetaTrader, hTerminal, hTester, hButtonStart;
      
   hMetaTrader = GetAncestor(WindowHandle(Symbol(),Period()),2); //дескриптор основного окна терминала
	
   hTerminal = GetDlgItem(hMetaTrader,0xE81E);
   hTester = GetDlgItem(hTerminal,0x53);
   hButtonStart = GetDlgItem(GetDlgItem(hTester,0x81BF),0x40A);  //дескриптор кнопки "Старт"
	
   PostMessageA(GetDlgItem(hTester,0x81BF),WM_COMMAND,0x40A,hButtonStart); //нажимаем кнопку старт
   
   Print("Запуск тестера стратегий");
   string sButtonStartName = "";
   while(!IsStopped()) 
   {
      Sleep(3000);
      GetWindowTextA(hButtonStart,sButtonStartName,6); //считываем текст кнопки запуска тестера
      if(sButtonStartName=="Старт")                    
      {
         Print("Работа тестера завершена");
         break;
      }
   }
}
 
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 usando GetWindowTextA().

Curiosamente, a janela do testador não precisa estar visível.


Muito obrigado. Onde posso ao menos ler sobre todas essas funções e ver exemplos de seu uso? Estive pesquisando por toda a Internet, mas não é muito útil. Talvez haja um bom livro sobre Win API? Uma descrição nua do que a função faz ainda não é suficiente.

 
HIDDEN >> :

Muito obrigado. Onde posso ao menos ler sobre todas essas funções, e ver exemplos de como utilizá-las? Estive pesquisando por toda a Internet, mas não é muito útil. Talvez haja um bom livro sobre Win API? Uma descrição nua do que esta função faz pode ser insuficiente.

Todas as informações sobre as funções WinAPI que recebo da MSDN. Estou acostumado a isso desta maneira.

P.S. Eu nunca vi um bom livro sobre WinAPI, infelizmente.

 
Ilnur >> :

Eu recebo todas as informações sobre as funções WinAPI da MSDN. Estou mais acostumado a ....


P.S. Infelizmente, eu nunca vi um bom livro sobre WinAPI.

Como os menus que se abrem no primeiro botão do mouse são interceptados? Quando você muda para outro programa do terminal, o menu desaparece e você simplesmente não consegue pegá-lo. Existe alguma maneira de parar o programa?