Was sagen die Profis: Wie erhält man Maus-Scrollwerte in MQL? [Wiederveröffentlichung aus dem fünften Forum].

 
Die Rede ist von der Windows-DLL. Das Schreiben eines eigenen Textes ist noch nicht vorgesehen.


Nachdem ich im Internet gesurft habe, habe ich mich für drei Möglichkeiten entschieden:

Handhabung von WM_MOUSEWHEEL 1.
Verarbeitung von WM_INPUT. 2.
3. Empfang von Mausdaten von DirectInput.

Im ersten Fall wird davon ausgegangen, dass es ein Fenster gibt, in dem dieses Ereignis behandelt wird. Leider weiß ich nicht, wie ich von MQL aus auf die Nachrichtenwarteschlange des Terminalfensters zugreifen kann, daher ist diese Variante ausgefallen. http://www.rsdn.ru/article/baseserv/hookdll.xml

Die zweite Variante setzt ebenfalls ein Fenster voraus, aber ich hoffte, dass ich durch den Aufruf der Funktion GetRawInputBuffer in der Lage sein würde, Daten zu empfangen, ohne das Terminal zu übergeben.

Ich konnte alle Registrierungs- und Abruffunktionen nutzen. Nämlich:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices

Aber die Funktion GetRawInputBuffer, nach der ich gesucht habe, hat nicht funktioniert. Der Puffer ist leer und es werden keine Daten darin gespeichert.


Leider bin ich auch mit der dritten Option gescheitert, weil ich nicht weiß, wie ich eine Instanz der LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8-Schnittstelle bekomme.


Experten, was ist Ihr Rat?


Ich schließe mich der Frage an.
 

Zunächst wäre es sinnvoll zu entscheiden, in welcher Form die Informationen über das Ereignis empfangen werden sollen: direkt oder indirekt?

Angenommen, das Schreiben einer eigenen DLL ist keine Option, warum dann nicht auch die API abschaffen? Wenn die indirekte Methode geeignet ist:

Wir sollten ein Skript in einer Schleife ausführen, das den Index des ersten sichtbaren Balkens in einem Fenster prüft - WindowFirstVisibleBar (Sie können dies zusammen mit der Anzahl der Balken im Fenster tun - WindowBarsPerChart). Weichen sie vom vorherigen Wert ab, wurde das Diagramm überprüft. Stimmt, in diesem Fall könnte nicht nur das Mausrad die Ursache sein (Zoomen in der Zeit - "+", "-", Klicken auf Start oder Ende, direkter Sprung zum gewünschten Datum).

Auf jeden Fall gibt es noch nicht genügend Informationen, um zu wissen, was genau für die Erkennung eines Mausrad-Dreh-Ereignisses erforderlich ist. Dann können Sie Methoden vorschlagen.

P.S. Und wenn Sie Zugriff auf die Fensterbehandlungsfunktion benötigen, ist es SetWindowLongPtr (siehe msdn). Aber hier geht es nicht ohne DLL, denn man kann keine neue Nachrichtenverarbeitungsprozedur zuweisen, die sich im MQL-Code befindet.

 

Der Gedanke an die Kontrolle der Rollkarte war. Aber nicht comilfo....

Nein, Sie müssen ein Bildlaufrad-Ereignis definieren.

 
Scriptong:

Auf jeden Fall gibt es noch nicht genügend Informationen, um genau zu wissen, was von der Erkennung des Mausraddreh-Ereignisses verlangt wird. Dann können Methoden vorgeschlagen werden.


Was genau ist erforderlich?

Die Liste natürlich. Was noch? :)

 

Nein. Es ist ein Hook. Ich weiß nicht, wie man die Adresse der Funktion in MQL bekommt.
 
An das Terminalfenster hängen Sie eine benutzerdefinierte Prozedur der Ereignisverarbeitung mit Abfangen - und das war's.
Ich habe das so gemacht:
- Benutzer klickt, um MT-Fenster zu schließen
- Ich frage: Haben Sie den Indikator geändert - speichern? Ja Nein Abbrechen
Wenn Sie abbrechen, geht niemand irgendwohin.
Ja - speichern und beenden, Nein - speichern und beenden.
Es ist primitiv.

Die Haken haben damit eigentlich nichts zu tun.

> Wir sprechen hier von Windows-DLLs. Das Schreiben eines eigenen Textes ist noch nicht vorgesehen.

Viel Glück...
 
jartmailru:
Das Terminalfenster sollte eine benutzerdefinierte Ereignisbehandlungsprozedur mit Abfangfunktion haben - das war's.

Sie meinen SetWindowLong?
 
sergeev:
Sie meinen SetWindowLong?
Ja.
 
sergeev:

Was genau ist erforderlich?

das listenspinnen natürlich. was noch? :)


Wenn die Liste (CListCtrl) ein eigenes Objekt ist, wo liegt dann das Problem? Es ist die Liste, die Mausereignisse empfängt, nicht das Meta Trader-Fenster.

Oder handelt es sich um eine Liste, die auf MT4-Chartobjekten basiert?

 
Scriptong:


Wenn die Liste (CListCtrl) ein eigenes Objekt ist, wo liegt dann das Problem? Es ist die Liste, die Ereignisse von der Maus empfängt, nicht das Meta Trader-Fenster.

Oder handelt es sich um eine Liste, die auf grafischen MT4-Objekten basiert?


Wenn es kein Problem gibt, geben Sie bitte an, wie man die FACT der Mausradverschiebung bestimmt. Wenn sich ein Mauszeiger im MT4-Fenster befindet. Es ist sehr interessant :)

Natürlich mit Hilfe von Windows.

Grund der Beschwerde: