Cosa dicono i professionisti: come ottenere i valori di scorrimento del mouse in MQL? [repost dal quinto forum].

 
Stiamo parlando della DLL di Windows. Scrivere il proprio non è ancora considerato.


Dopo aver navigato in rete, ho deciso su tre possibilità:

Gestione di WM_MOUSEWHEEL 1.
Elaborazione WM_INPUT. 2.
3. Ricezione dei dati del mouse da DirectInput.

Il primo caso presuppone che ci sia una finestra in cui questo evento viene gestito. Purtroppo non so come arrivare alla coda dei messaggi della finestra del terminale da MQL, quindi questa variante è caduta. http://www.rsdn.ru/article/baseserv/hookdll.xml

Anche la seconda variante implica una finestra, ma speravo che chiamando la funzione GetRawInputBuffer sarei stato in grado di ricevere dati senza passare il terminale.

Sono stato in grado di utilizzare tutte le funzioni di registrazione e recupero. Vale a dire:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices

Ma la funzione GetRawInputBuffer che stavo cercando non ha funzionato. Il buffer è vuoto e nessun dato viene catturato in esso.


Purtroppo, ho fallito anche con la terza opzione, perché non so come ottenere un'istanza dell'interfaccia LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8.


Esperti, qual è il vostro consiglio?


Mi unisco alla domanda.
 

Prima di tutto, sarebbe una buona idea decidere in quale forma l'informazione sul verificarsi dell'evento deve essere ricevuta: direttamente o indirettamente?

Supponendo che scrivere la propria DLL non sia un'opzione, perché non eliminare anche l'API? Se il metodo indiretto è adatto:

Dovremmo mettere in loop uno script che controlla l'indice della prima barra visibile in una finestra - WindowFirstVisibleBar (puoi farlo insieme al numero di barre nella finestra - WindowBarsPerChart). Se differiscono dal valore precedente, il grafico è stato controllato. Vero, in questo caso non solo la rotella del mouse potrebbe essere la causa (zoomando nel tempo - "+", "-", cliccando Home o End, salto diretto alla data desiderata).

In ogni caso, non ci sono ancora abbastanza informazioni per sapere cosa è richiesto esattamente dal rilevamento di un evento di rotazione della ruota del mouse. Allora potete suggerire dei metodi.

P.S. E se avete bisogno di accedere alla funzione di gestione delle finestre, è SetWindowLongPtr (vedi msdn). Ma qui non si può fare a meno della DLL, perché non si può assegnare una nuova procedura di elaborazione dei messaggi situata nel codice MQL.

 

Il pensiero di controllare il grafico a scorrimento, era. Ma non comilfo....

No, è necessario definire un evento per la ruota di scorrimento.

 
Scriptong:

In ogni caso, non ci sono ancora abbastanza informazioni per sapere esattamente cosa è richiesto dal rilevamento dell'evento di rotazione della ruota del mouse. Poi si possono suggerire dei metodi.


cosa è richiesto esattamente?

la lista, naturalmente. che altro? :)

 

Non so come ottenere l'indirizzo della funzione in MQL.
 
Alla finestra del terminale appendere una procedura personalizzata di elaborazione di eventi con intercettazione - e questo è tutto.
Ho fatto così:
- l'utente clicca per chiudere la finestra MT
- chiedo: hai cambiato indicatore - salva? Sì No Annulla
Quando si annulla nessuno va da nessuna parte.
Sì-salvare e uscire, no-salvare e uscire.
Primitivo.

I ganci non c'entrano niente, davvero.

> Stiamo parlando delle DLL di Windows. Scrivere il proprio non è ancora considerato.

Buona fortuna...
 
jartmailru:
La finestra del terminale dovrebbe avere una procedura di gestione degli eventi personalizzata con intercettazione - tutto qui.

Vuoi dire SetWindowLong?
 
sergeev:
intendi SetWindowLong?
Sì.
 
sergeev:

cosa è richiesto esattamente?

la lista che gira, naturalmente. che altro? :)


Se la lista (CListCtrl) è un oggetto proprio, qual è il problema? È la lista che riceve gli eventi del mouse, non la finestra di Meta Trader.

O stiamo parlando di una lista basata su oggetti grafico MT4?

 
Scriptong:


Se la lista (CListCtrl) è un oggetto proprio, qual è il problema? È la lista che riceve eventi dal mouse, non la finestra di Meta Trader.

O stiamo parlando di una lista basata su oggetti grafici di MT4?


Se non ci sono problemi, specificate come determinare il FATTO dello spostamento della rotella del mouse. Quando un puntatore del mouse è nella finestra MT4. È molto interessante :)

Naturalmente, per mezzo di Windows.