Automazione con intercettazione di pulsanti e clic del mouse. - pagina 5

 
xeon >> :

Era un buon terminale : -)))

Tutti abbiamo uno di questi terminali. E in un certo senso ha un pulsante rosso.

Solo che devi sbattere la tua stessa testa con un manganello. :))

 

Ilnur, il testo del pulsante può anche essere letto in qualche modo. Il programma Spy++ lo legge.



Cioè la logica è che finché il pulsante è impostato su "Stop" aspettiamo che venga fatta un'altra azione.

Datemi una funzione di User32.dll che estragga correttamente il testo del pulsante.



Funzione GetDlgItemText

Descrizione:
funzione GetDlgItemText(Dlg: HWnd; IDDlgItem: Integer; Str: PChar; MaxCount: Integer): Integer;
Legge il testo del controllo.
Parametri:
Dlg: Identificatore della finestra di dialogo.
IDDlgItem: L'ID dell'elemento.
Str: Buffer per ricevere il testo.
MaxCount: La dimensione del buffer.
Valore restituito:
Il numero effettivo di caratteri copiati.


#importare "user32.dll"

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

#importare


Sto collegando la funzione correttamente.


Perché il terminale mi mostra nei log

2008.11.15 21:03:41 tester EURUSD,H1: impossibile chiamare la funzione 'GetDlgItemText' dalla dll 'user32.dll' (errore 127)

 
xeon >> :

Era un buon terminale : -)))

Xeon, sei tu che hai iniziato tutto....

Io stesso non avrei fatto quel passo... ma non ne ho bisogno....

 
HIDDEN >> :

. . .

#importare "user32.dll"

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

#importare


Sto collegando la funzione correttamente.


Perché il terminale mi mostra nei log

2008.11.15 21:03:41 tester EURUSD,H1: impossibile chiamare la funzione 'GetDlgItemText' dalla dll 'user32.dll' (errore 127)

È più simile a questo. . .
#import "user32.dll"
   int GetDlgItemTextA(int hWnd, int IDDlgItem, string PChar, int MaxCount);
#import
 
Ilnur >> :
>> è più simile a questo. . .

Questo restituirà un intero, ma avete bisogno del testo del pulsante.

 
HIDDEN >> :

Questo restituirà un numero intero, ma avete bisogno del testo del pulsante.

Il testo viene restituito nel buffer di stringhe PChar.

La funzione stessa restituisce il numero effettivo di caratteri letti.

 
HIDDEN >> :

Ilnur, il testo del pulsante può anche essere letto in qualche modo. Il programma Spy++ lo legge.


Ecco un esempio di uno script che avvia un tester di strategia e aspetta che sia completato. Il testo del pulsante viene letto usando GetWindowTextA().

È interessante notare che la finestra del tester non deve necessariamente essere visibile in questo 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 >> :

Ecco un esempio di uno script che avvia un tester di strategia e aspetta che sia completato. Il testo del pulsante viene letto usando GetWindowTextA().

È interessante notare che la finestra del tester non deve essere visibile.


Grazie mille. Dove posso almeno leggere di tutte queste funzioni e guardare esempi del loro uso? Ho frugato in tutta Internet per cercarlo, ma non è molto utile. Forse c'è un buon libro su Win API? Una nuda descrizione di ciò che fa la funzione non è ancora sufficiente.

 
HIDDEN >> :

Grazie mille. Dove posso almeno leggere tutte queste funzioni e vedere esempi di come usarle? Ho frugato in tutta Internet per cercarlo, ma non è molto utile. Forse c'è un buon libro su Win API? Una semplice descrizione di ciò che fa questa funzione può essere insufficiente.

Tutte le informazioni sulle funzioni WinAPI le ottengo da MSDN. Sono abituato così.

P.S. Non ho mai visto un buon libro su WinAPI, purtroppo.

 
Ilnur >> :

Prendo tutte le informazioni sulle funzioni WinAPI da MSDN. Sono più abituato a ....


P.S. Purtroppo non ho mai visto un buon libro su WinAPI.

Come vengono intercettati i menu che si aprono sul primo tasto del mouse? Quando si passa a un altro programma dal terminale, il menu scompare e non si riesce a prenderlo. C'è un modo per fermare il programma?