Automatización con interceptación de botones y clics del ratón. - página 5

 
xeon >> :

Fue un buen terminal : -)))

Todos tenemos uno de esos terminales. Y tiene un botón rojo en cierto sentido.

Sólo que tienes que golpear tu propia cabeza con una porra. :))

 

Ilnur, el texto del botón también se puede leer de alguna manera. El programa Spy++ lo lee.



Es decir, la lógica es que mientras el botón esté puesto en "Stop" se espere a que se realicen más acciones.

Dame una función de User32.dll que saque el texto del botón correctamente.



Función GetDlgItemText

Descripción:
function GetDlgItemText(Dlg: HWnd; IDDlgItem: Integer; Str: PChar; MaxCount: Integer): Integer;
Lee el texto del control.
Parámetros:
Dlg: Identificador del cuadro de diálogo.
IDDlgItem: El ID del artículo.
Str: Buffer para recibir el texto.
MaxCount: El tamaño del buffer.
Valor devuelto:
El número real de caracteres copiados.


#importar "user32.dll"

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

#importar


¿Estoy conectando la función correctamente?


Porque el terminal me muestra en los registros

2008.11.15 21:03:41 tester EURUSD,H1: no se puede llamar a la función 'GetDlgItemText' de la dll 'user32.dll' (error 127)

 
xeon >> :

Ese fue un buen terminal : -)))

Xeon, tú eres el que empezó todo....

Yo no habría dado ese paso... pero no necesito ....

 
HIDDEN >> :

. . .

#importar "user32.dll"

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

#importar


¿Estoy conectando la función correctamente?


Porque el terminal me muestra en los registros

2008.11.15 21:03:41 tester EURUSD,H1: no se puede llamar a la función 'GetDlgItemText' de la dll 'user32.dll' (error 127)

Es más bien así. . .
#import "user32.dll"
   int GetDlgItemTextA(int hWnd, int IDDlgItem, string PChar, int MaxCount);
#import
 
Ilnur >> :
>> Es más bien así. . .

Esto devolverá un número entero, pero necesita el texto del botón.

 
HIDDEN >> :

Esto devolverá un número entero, pero necesita el texto del botón.

El texto se devuelve en el búfer de cadena PChar.

La propia función devuelve el número real de caracteres leídos.

 
HIDDEN >> :

Ilnur, el texto del botón también se puede leer de alguna manera. El programa Spy++ lo lee.


Este es un ejemplo de un script que inicia un probador de estrategias y espera a que se complete. El texto del botón se lee con GetWindowTextA().

Curiosamente, la ventana del probador no tiene que ser necesariamente visible en este 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 >> :

Este es un ejemplo de un script que inicia un probador de estrategias y espera a que se complete. El texto del botón se lee con GetWindowTextA().

Curiosamente, la ventana del probador no tiene que ser visible.


Muchas gracias. ¿Dónde puedo al menos leer sobre todas estas funciones y ver ejemplos de su uso? He estado hurgando por todo Internet buscándolo, pero no es muy útil. ¿Tal vez haya un buen libro sobre Win API? Una mera descripción de lo que hace la función no es suficiente.

 
HIDDEN >> :

Muchas gracias. ¿Dónde puedo al menos leer sobre todas estas funciones y ver ejemplos de cómo utilizarlas? He estado hurgando por todo Internet buscándolo, pero no es muy útil. ¿Tal vez haya un buen libro sobre Win API? Una mera descripción de lo que hace esta función puede ser insuficiente.

Toda la información sobre las funciones WinAPI la obtengo de MSDN. Estoy acostumbrado a que sea así.

P.D. Nunca he visto un buen libro sobre WinAPI, por desgracia.

 
Ilnur >> :

Toda la información sobre las funciones WinAPI la obtengo de MSDN. Estoy más acostumbrado a ....


P.D. Por desgracia, nunca he visto un buen libro sobre WinAPI.

¿Cómo se interceptan los menús que se abren con el primer botón del ratón? Cuando cambias a otro programa desde el terminal, el menú desaparece y no puedes cogerlo. ¿Hay alguna forma de detener el programa?