L'avis des professionnels : Comment obtenir les valeurs de défilement de la souris dans MQL ? [repost du cinquième forum].

 
Nous parlons de la DLL de Windows. Il n'est pas encore envisagé d'en écrire un vous-même.


Après avoir surfé sur le net, je me suis décidé pour trois possibilités :

Manipulation de WM_MOUSEWHEEL 1.
Traitement de WM_INPUT. 2.
3. Réception des données de la souris depuis DirectInput.

La première option suggère d'avoir une fenêtre où cet événement est traité. Malheureusement je ne sais pas comment accéder à la file d'attente des messages de la fenêtre du terminal à partir de MQL, donc cette variante est tombée à l'eau. http://www.rsdn.ru/article/baseserv/hookdll.xml

La deuxième variante implique également une fenêtre, mais j'espérais qu'en appelant la fonction GetRawInputBuffer, je serais en mesure de recevoir des données sans passer par le terminal.

J'ai pu utiliser toutes les fonctions d'enregistrement et de récupération. À savoir :
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices

Mais la fonction GetRawInputBuffer que je cherchais n'a pas fonctionné. Le tampon est vide et aucune donnée n'y est capturée.


Malheureusement, j'ai également échoué avec la troisième option, car je ne sais pas comment obtenir une instance de l'interface LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8.


Experts, quel est votre conseil ?


Je me joins à la question.
 

Tout d'abord, il serait bon de décider sous quelle forme l'information sur la survenance d'un événement doit être reçue : directement ou indirectement ?

En supposant que l'écriture de votre propre DLL ne soit pas une option, pourquoi ne pas supprimer également l'API ? Si la méthode indirecte convient :

Nous devrions boucler un script qui vérifie l'indice de la première barre visible dans une fenêtre - WindowFirstVisibleBar (vous pouvez le faire en même temps que le nombre de barres dans la fenêtre - WindowBarsPerChart). Si elles diffèrent de la valeur précédente, la carte a été vérifiée. Il est vrai que dans ce cas, la molette de la souris n'est pas la seule cause (zoomer dans le temps - "+", "-", cliquer sur Début ou Fin, saut direct à la date souhaitée).

Dans tous les cas, il n'y a pas encore assez d'informations pour savoir ce qu'il faut faire exactement pour détecter un événement de rotation de la molette de la souris. Vous pouvez ensuite proposer des méthodes.

P.S. Et si vous avez besoin d'accéder à la fonction de gestion des fenêtres, c'est SetWindowLongPtr (voir msdn). Mais vous ne pouvez pas vous passer de DLL ici, car vous ne pouvez pas attribuer une nouvelle procédure de traitement des messages située dans le code MQL.

 

L'idée de contrôler le graphique défilant, c'était. Mais pas comilfo....

Non, vous devez définir un événement de roue de défilement.

 
Scriptong:

Quoi qu'il en soit, il n'y a pas encore assez d'informations pour savoir exactement ce que l'on attend de la détection de l'événement de rotation de la molette de la souris. Ensuite, des méthodes peuvent être proposées.


qu'est-ce qui est requis exactement ?

la liste bien sûr. quoi d'autre ? :)

 

Non. C'est un hook. Je ne sais pas comment obtenir l'adresse de la fonction dans MQL.
 
Dans la fenêtre du terminal, accrochez une procédure personnalisée de traitement des événements avec interception - et c'est tout.
J'ai procédé ainsi :
- l'utilisateur clique pour fermer la fenêtre MT
- je demande : avez-vous modifié l'indicateur - sauvegardez ? Oui Non Annuler
Lorsque vous annulez, personne ne va nulle part.
Oui-sauvegarde et sortie, non-sauvegarde et sortie.
Primitif.

Les crochets n'ont rien à voir avec ça, vraiment.

> Nous parlons des DLL de Windows. La rédaction de votre propre texte n'est pas encore envisagée.

Bonne chance...
 
jartmailru:
La fenêtre du terminal doit avoir une procédure de traitement des événements personnalisée avec interception - c'est tout.

Vous voulez dire SetWindowLong ?
 
sergeev:
Vous voulez dire SetWindowLong ?
Oui.
 
sergeev:

qu'est-ce qui est requis exactement ?

le filage de liste bien sûr. quoi d'autre ? :)


Si la liste (CListCtrl) est son propre objet, quel est le problème ? C'est la liste qui reçoit les événements de la souris, pas la fenêtre Meta Trader.

Ou s'agit-il d'une liste basée sur les objets graphiques de MT4 ?

 
Scriptong:


Si la liste (CListCtrl) est son propre objet, quel est le problème ? C'est la liste qui reçoit les événements de la souris, pas la fenêtre du Meta Trader.

Ou s'agit-il d'une liste basée sur les objets graphiques de MT4 ?


S'il n'y a pas de problème, veuillez préciser comment déterminer le FACT du déplacement de la molette de la souris. Lorsqu'un pointeur de souris se trouve dans la fenêtre MT4. C'est très intéressant :)

Bien sûr - au moyen de Windows.

Raison: