Automatisation avec interception des boutons et des clics de souris. - page 5

 
xeon >> :

C'était un bon terminal : -))))

Nous avons tous un de ces terminaux. Et il y a un bouton rouge, dans un certain sens.

Seulement tu dois te frapper la tête avec une matraque. :))

 

Ilnur, le texte du bouton peut aussi être lu d'une manière ou d'une autre. Le programme Spy++ le lit.



En d'autres termes, la logique veut que tant que le bouton est réglé sur "Stop", nous attendions que d'autres mesures soient prises.

Donnez-moi une fonction de User32.dll qui tire le texte du bouton correctement.



Fonction GetDlgItemText

Description :
function GetDlgItemText(Dlg : HWnd ; IDDlgItem : Integer ; Str : PChar ; MaxCount : Integer) : Integer ;
Lit le texte du contrôle.
Paramètres :
Dlg : Identifiant de la boîte de dialogue.
IDDlgItem : L'ID de l'élément.
Str : Tampon pour recevoir le texte.
MaxCount : La taille du tampon.
Valeur retournée :
Le nombre réel de caractères copiés.


#import "user32.dll"

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

#import


Est-ce que je connecte la fonction correctement.


Parce que le terminal me montre dans les logs

2008.11.15 21:03:41 tester EURUSD,H1 : cannot call function 'GetDlgItemText' from dll 'user32.dll' (error 127)

 
xeon >> :

C'était un bon terminal : -))))

Xeon, c'est vous qui avez commencé. ....

Je n'aurais pas franchi cette étape moi-même... mais je n'en ai pas besoin....

 
HIDDEN >> :

. . .

#import "user32.dll"

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

#import


Est-ce que je connecte la fonction correctement.


Parce que le terminal me montre dans les logs

2008.11.15 21:03:41 tester EURUSD,H1 : cannot call function 'GetDlgItemText' from dll 'user32.dll' (error 127)

C'est plutôt comme ça . . .
#import "user32.dll"
   int GetDlgItemTextA(int hWnd, int IDDlgItem, string PChar, int MaxCount);
#import
 
Ilnur >> :
>> c'est plutôt comme ça. . .

Cela renvoie un nombre entier, mais vous avez besoin du texte du bouton.

 
HIDDEN >> :

Cela renvoie un nombre entier, mais vous avez besoin du texte du bouton.

Le texte est renvoyé dans le tampon de chaîne PChar.

La fonction elle-même renvoie le nombre réel de caractères lus.

 
HIDDEN >> :

Ilnur, le texte du bouton peut aussi être lu d'une manière ou d'une autre. Le programme Spy++ le lit.


Voici un exemple de script qui lance un testeur de stratégie et attend qu'il se termine. Le texte du bouton est lu à l'aide de GetWindowTextA().

Il est intéressant de noter que la fenêtre du testeur ne doit pas nécessairement être visible dans ce cas.


#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 >> :

Voici un exemple de script qui lance un testeur de stratégie et attend qu'il se termine. Le texte du bouton est lu à l'aide de GetWindowTextA().

Il est intéressant de noter que la fenêtre du testeur n'a pas besoin d'être visible.


Merci beaucoup. Où puis-je au moins lire des informations sur toutes ces fonctions et voir des exemples de leur utilisation ? Je l'ai cherché sur tout l'Internet, mais ça ne m'a pas beaucoup aidé. Peut-être existe-t-il un bon livre sur Win API ? Une simple description de ce que fait la fonction n'est toujours pas suffisante.

 
HIDDEN >> :

Merci beaucoup. Où puis-je au moins lire des informations sur toutes ces fonctions et voir des exemples de leur utilisation ? Je l'ai cherché sur tout l'Internet, mais ça ne m'a pas beaucoup aidé. Peut-être existe-t-il un bon livre sur Win API ? Une simple description de ce que fait cette fonction peut s'avérer insuffisante.

Toutes les informations sur les fonctions WinAPI proviennent de MSDN. J'ai l'habitude de faire comme ça.

P.S. Je n'ai jamais vu un bon livre sur WinAPI, malheureusement.

 
Ilnur >> :

Je tire toutes les informations sur les fonctions WinAPI de MSDN. Je suis plus habitué à .....


P.S. Malheureusement, je n'ai jamais vu un bon livre sur WinAPI.

Comment les menus qui s'ouvrent sur le premier bouton de la souris sont-ils interceptés ? Lorsque vous passez à un autre programme à partir du terminal, le menu disparaît et vous ne pouvez pas le rattraper. Y a-t-il un moyen d'arrêter le programme ?