Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
30/10/10 18:25
walker93
Sto facendo un riproduttore musicale e fino adesso funziona tutto al meglio
Però voelvo anche inserire l'interagibilità con i MediaButton della tastiera:

Keys.MediaNextTrack
Keys.MediaPlayPause
Keys.MediaPreviousTrack
Keys.MediaStop
Keys.VolumeDown
Keys.VolumeMute
Keys.VolumeUp

il problema è che utilizzando la funzione GetAsyncKeyState all'interno di un timer per capire se quei tasti sono premuti, succede che ogni <interval del timer> se sto tenendo premuto il pulsante viene continuamente chiamata la procedura associata al pulsante
Ad esempio:
se sto gestendo il VolumeMute e l'intervallo del timer è 100ms, ogni 100ms il programma mette muto e mette l'audio praticamente a intermittenza.
Come posso ovviare questo problema?
Ultima modifica effettuata da walker93 30/10/10 18:26
aaa
31/10/10 14:08
Il Totem
Usa degli switch, variabili booleane, eccetera...
aaa
31/10/10 19:52
walker93
avevo provato a disattivare il timer quando aveva eseguito già una volta il comando, ma visto che nel timer controllo quando il tasto era premuto se lo disattivo non riuesco più a capire quando il tasto non è più premuto.
Dovrei utilizzare 2 timer:
uno controlla quando un tasto viene premuto e nel caso avvia la procedura,il secondo timer e ferma questo timer.
l'altro controlla quando il tasto non è più premuto e nel caso riabilità il primo timer e ferma questo.

solo che mi scoccia veramente tanto usare 2 timer per dei tasti
aaa
01/11/10 14:39
Il Totem
Puoi usare un dizionario Keys > TimeSpan. Il timespan associato ad ogni tasto indica quanto tempo è passato dall'ultima volta che è stato rilevato come premuto. Se è maggiore di, diciamo, 0.8 secondi, allora lo processi, altrimenti lo ignori. Basta un solo timer.
aaa
01/11/10 17:05
walker93
Proverò a usare il timespan...
Ma permettimi un'altra domanda:
con
If GetAsyncKeyState(Tasto) <> 0 then
controllo quando un tasto è premuto(fisicamente schiacciato)

con un altro numero che non sia 0 posso controllare il "keydown" cioè solo quando il tasto scende?
If GetAsyncKeyState(Tasto) = 1024 '(numero inventato)

in questo modo anche se il tasto è premuto al prossimo tick del timer, non entra nella condizione perchè non sta scendendo ma è già sceso completamente...
aaa
02/11/10 17:09
Il Totem
Sì:
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks.

The return value is zero for the following cases:

The current desktop is not the active desktop
The foreground thread belongs to another process and the desktop does not allow the hook or the journal record.


Tuttavia, se leggi dopo, c'è scritto che questo comportamento è inaffidabile a causa della preemption.
aaa
03/11/10 16:28
walker93
ho provato con il dizionario e il timespan senza successo...
cosi ho usato con un array e adesso funziona tutto come previsto.
Grazie
aaa