|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jan 2011
Messaggi: 51
|
Disattivare momentaneamente tasti tastiera
Ciao a tutti! Mi trovo per varie necessità relative ad un progetto che sto intraprendendo a porvi la seguente domanda:
E' possibile disattivare un tasto della tastiera per alcuni secondi dopo che esso è stato premuto? Mi spiego meglio..prendiamo ad esempio il tasto 5 del tastierino numerico, se io lo premo il pc per i successivi 3 secondi non rileva più la sua pressione anche se dovessi premerlo ripetutamente nell'arco dei 3 secondi..è possibile? Grazie mille a tutti! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Sì è possibile se conosci un minimo di programmazione...
Alcune domande: 1) A che pro? 2) E' un solo tasto?
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2007
Città: quel ramo del lago di como, che volge a mezzogiorno... ^^
Messaggi: 19625
|
dipende dall'ambito in cui ti trovi.
deve beneficiarne un singolo software? deve essere un singolo tasto? si tratta di accessibilità a persone inabili o anziane?
__________________
|
![]() |
![]() |
![]() |
#4 | |
Member
Iscritto dal: Jan 2011
Messaggi: 51
|
Quote:
Partecipo a delle gare con dei mezzi autocostruiti, e mi sto costruendo un cronometro per fare dei test a casa..userò delle piste per terra che simulano un contatto, come se premessi un tasto nella tastiera, e uso il software xnote stopwatch come cronometro. Qual'è il problema? Pensavo di usare una vecchia tastiera, e smontare il tastierino numerico, tagliare le piste e saldare i contatti della pista che metterò a terra..però essendo il mio mezzo a 2 assi, ad ogni passaggio sulla pista premerà con le ruote il contatto 2 volte, e quindi sarà come aver premuto 2 volte il tasto sulla tastiera, e quindi il cronometro segnerà 2 tempi! io invece voglio avere solo il primo.. in poche parole il mezzo passa con le ruote davanti sulla pista, fa scattare il contatto (ad esempio asseganto al tasto 5 del tastierino numerico), il cronometro rileva il primo tempo, e a questo punto il tasto si disattiva per 2/3 secondi, in modo che al passaggio delle ruote posteriori il tempo non venga rilevato.. Potrei farlo con dei relè da elettricista esterni, ma diventa più laborioso, anche perchè necessitano di alimentazione..in poche parole mi serve un relè tramite software! uno per la pista alla partenza del percorso e uno per quella di arrivo..quidi dovrei farlo per 2 tasti della tastiera.. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2007
Città: quel ramo del lago di como, che volge a mezzogiorno... ^^
Messaggi: 19625
|
via software puoi farlo con AutoIT. fai sentire il primo tocco e appena "viene rilasciato il tasto" disattivi gli input da tastiera per 3/4 secondi.
__________________
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Non é nulla di complicato, poche righe di codice. Questa volta lascio l'onere-onore al sign. Khronos
![]() Scrivi i due tasti e ci pensa lui, se dà forfait e mi farà subentrare avrà perso la mia stima a vita ![]()
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jan 2011
Messaggi: 51
|
Non posso disattivare tutti gli input da tastiera, ma solo quelli relativi al tasto appena premuto..questo perchè i concorrenti partono durante le gare mentre altri arrivano al traguardo, e nel caso ci sia un concorrente che passa sul traguardo (e quindi fa scattare il contatto del traguardo) e appena dopo un'altro parte alla partenza il tempo di partenza non verrà rilevato se tutti gli input sono momentaneamente disattivati..
Ultima modifica di Pluto619 : 25-07-2013 alle 21:45. |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Jan 2011
Messaggi: 51
|
I tasti che userò sono il 4 ed il 5 del tastierino numerico..con che programma devo scrivere il codice? Poi come faccio a far partire il programma? Creo un file exe? Grazie mille a tutti!!!
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jan 2007
Città: quel ramo del lago di como, che volge a mezzogiorno... ^^
Messaggi: 19625
|
Quote:
sto facendo programmino, stay tuned. uscirò con una beta oggi pome.
__________________
Ultima modifica di Khronos : 26-07-2013 alle 08:31. |
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Jan 2011
Messaggi: 51
|
Ragazzi siete troppo fighi!!! Poi potresti inviarmelo via mail? Perché mi servirebbe per martedì circa, poiché ho una gara a fine settimana e devo anche fare dei test, se possibile..
|
![]() |
![]() |
![]() |
#11 | ||
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Nessuna email, si posta qui visto che sono troppo curioso di vedere quello che combina Khronos, che per ora ha ancora la mia stima
![]() Lascio comunque una versione anche io tanto per "sicurezza", senza interfaccia o cose così quindi nulla rispetto alla beta che non vedo l'ora di testare ![]() Link: Il 4 e il 5 v1.0.0.3 Password:
Per chiudere basta cliccare sull'icona nella tray, i secondi di attesa dal primo input sono basati sull'ini, in formato millisecondi ( 1000 = 1 secondo ) Codice:
[DELAY] MS=1000 Da avviare DOPO il programma XNote
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . Ultima modifica di x_Master_x : 07-09-2013 alle 08:13. |
||
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jan 2007
Città: quel ramo del lago di como, che volge a mezzogiorno... ^^
Messaggi: 19625
|
ho provato.
ho provato con AutoIt e ho bestemmiato abbastanza. l'ho fatto in 2 pezzi, perchè poi, quando andava lo script del blocco dei tasti, sarei stato felice e avrei unito tutto. in realtà fa la metà delle cose che dovrebbe fare -.- premi 4 ( o 5) del tastierino, lui blocca tutto tranne il 5 (o il 4) per 3 secondi. poi però non rilascia -.- le stavo tentando tutte ma semplicemente non ci arrivo. codice prova bloccaggio tasti Codice:
#include <misc.au3> #include <WinAPI.au3> Global $TIMEOUT_PERIOD = 3000 ; value in milliseconds Global $timeOfLastPress_A = 0 Global $timeOfLastPress_B = 0 Global $ah_Hooks[10] HotKeySet("{ESC}", "_Terminate") HotKeySet("{Numpad4}", "KeyPress") HotKeySet("{Numpad5}", "KeyPress") While 1 while ($timeOfLastPress_A > 0) or ($timeOfLastPress_B > 0) if _IsPressed(64) then $ah_Hooks = HandlerButtonStartStopKey(1, "0x65|0x1B") ElseIf _IsPressed(65) then $ah_Hooks = HandlerButtonStartStopKey(1, "0x64|0x1B") EndIf Wend if ($timeOfLastPress_A > 0) then $timeOfLastPress_A = 0 EndIf If ($timeOfLastPress_B > 0) then $timeOfLastPress_B = 0 EndIf ; sleep(10) Wend TrayTip("Keystroke Limiter", "block Nothing", 2, 1) Exit Func KeyPress() if _IsPressed(64) then $timeOfLastPress_A = TimerInit() ElseIf _IsPressed(65) then $timeOfLastPress_B = TimerInit() EndIf EndFunc Func HandlerButtonStartStopKey($ah_Block_Hooks=0, $sExclude="") while (TimerDiff($timeOfLastPress_A) < $TIMEOUT_PERIOD) or (TimerDiff($timeOfLastPress_B) < $TIMEOUT_PERIOD) TrayTip("Keystroke Limiter", "stopping all but" & $sExclude, 2, 1) Select Case IsArray($ah_Block_Hooks) If $ah_Block_Hooks[1] > 0 Then DllCallbackFree($ah_Block_Hooks[1]) If $ah_Block_Hooks[2] > 0 Then DllCallbackFree($ah_Block_Hooks[2]) If $ah_Block_Hooks[3] > 0 Then _WinAPI_UnhookWindowsHookEx($ah_Block_Hooks[3]) If $ah_Block_Hooks[4] > 0 Then _WinAPI_UnhookWindowsHookEx($ah_Block_Hooks[4]) Return 1 Case IsNumber($ah_Block_Hooks) And $ah_Block_Hooks > 0 Local $pStub_KeyProc = 0, $pStub_MouseProc = 0, $hHookKeyboard = 0, $hHookMouse = 0 $pStub_KeyProc = DllCallbackRegister("_Key_Proc", "int", "int;ptr;ptr") $hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _ _WinAPI_GetModuleHandle(0), 0) Local $aRet[5] = ["|" & $sExclude & "|", $pStub_KeyProc, $pStub_MouseProc, $hHookKeyboard, $hHookMouse] Return $aRet Case Else Return SetError(1, 0, 0) EndSelect WEnd EndFunc Func _Key_Proc($nCode, $wParam, $lParam) If $nCode < 0 Then Return _WinAPI_CallNextHookEx($ah_Hooks[3], $nCode, $wParam, $lParam) Local $KBDLLHOOKSTRUCT = DllStructCreate("dword vkCode;dword scanCode;dword flags;dword time;ptr dwExtraInfo", $lParam) Local $vkCode = DllStructGetData($KBDLLHOOKSTRUCT, "vkCode") If Not StringInStr($ah_Hooks[0], "|0x" & Hex($vkCode, 2) & "|") Then Return 1 _WinAPI_CallNextHookEx($ah_Hooks[3], $nCode, $wParam, $lParam) EndFunc Func _Terminate() Exit 0 EndFunc Codice:
#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile=Keystroke Limiter v0.5.exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ; K E Y S T R O K E Limiter ; By KHRonoS OnE ; V 0.5 beta ;Required Includes. #include <GUIConstantsEx.au3> ;Constants for GUI Events #include <EditConstants.au3> ;Edit constants. Opt("GUIOnEventMode", 1);We need this otherwise our GUI will not be OnEvent Mode. Opt("TrayMenuMode", 2) ;hide default tray commands and no checked items Opt("TrayAutoPause",0) ; turn off the autopause when is clicked the tray. ;Opt('MustDeclareVars', 1) ; as writed ;VARS Global $Guimsg, $Traymsg, $WM_NOTIFY, $widthCell Local $tasto_scelto="" Local $OptionsGUI Local $OptionsLabel1 Local $OptionsLabel2 Local $OptionsLabel3 Local $OptionsLabelStart Local $OptionsLabelStop Local $OptionsButtonKey Local $OptionsButtonStopKey Local $OptionsButtonStartKey Local $OptionsButtonStartStop Local $OptionsButtonExit Local $OptionsTray Local $StartTray Local $ExitTray ; Press Esc to terminate script abruptly HotKeySet("{ESC}", "HandlerButtonTerminate") ;OPTIONS GUI HERE START $OptionsGUI = GUICreate ("Keystroke limiter v0.5beta", 430, 120) GUISetOnEvent($GUI_EVENT_CLOSE, "CloseOnTray") ; What function to call when we try close the GUI ;LABELS $OptionsLabel1 = GUICtrlCreateLabel ("Click the buttons to choose the key", 115, 10, 230, 40) $OptionsLabel2 = GUICtrlCreateLabel ("Then click on Activate, to start the Limiter.", 115, 30, 230, 40) $OptionsLabel3 = GUICtrlCreateLabel ("Click on Deactivate to stop it.", 115, 50, 230, 40) $OptionsLabelStart = GUICtrlCreateLabel ("Start Key", 30, 10, 50, 40) $OptionsLabelStop = GUICtrlCreateLabel ("Stop Key", 350, 10, 50, 40) ;BUTTONS $OptionsButtonStartKey = GUICtrlCreateButton ("Select Start Key!", 10, 30, 100, 25) GUICtrlSetOnEvent(-1, "HandlerButtonStartKey") ;handler for above button $OptionsButtonStopKey = GUICtrlCreateButton ("Select Stop Key!", 325, 30, 100, 25) GUICtrlSetOnEvent(-1, "HandlerButtonStopKey") ;handler for above button $OptionsButtonStartStop = GUICtrlCreateButton ("- ACTIVATE -", 100, 70, 120, 40) GUICtrlSetOnEvent(-1, "HandlerKeystrokeBlocker") ;handler for above button $OptionsButtonExit = GUICtrlCreateButton ("E X I T", 350, 85, 70, 25) GUICtrlSetOnEvent(-1, "HandlerButtonTerminate") ;handler for above button ;TRAY COMMANDS $OptionsTray = TrayCreateItem("O P T I O N S") TrayItemSetOnEvent($OptionsTray, "HandlerTrayOptions") ; Handler for above tray TrayCreateItem("") $StartTray = TrayCreateItem("- ACTIVATE -") TrayCreateItem("") $ExitTray = TrayCreateItem(" E X I T ") ;Show the GUI. We need this line, or our GUI will NOT be displayed! GUISetState (@SW_SHOW) ;activate the window ;------------------------------------------------------------------------------------------------------ ;;;; BODY - we insert here some code???;;;; While 1 $Traymsg = TrayGetMsg() Switch $Traymsg Case $OptionsTray ; qui faccio tornare fuori la OptionGUI se non c'è già WinSetState($OptionsGUI, "", @SW_RESTORE) Case $StartTray HandlerKeystrokeBlocker() Case $ExitTray HandlerButtonTerminate() EndSwitch WEnd Func HandlerButtonStartKey() EndFunc Func HandlerButtonStopKey() EndFunc Func HandlerTrayOptions() WinSetState($OptionsGUI, "", @SW_RESTORE) EndFunc Func HandlerKeystrokeBlocker() Switch GUICtrlRead($OptionsButtonStartStop) ; If button reads "Start" Case "- ACTIVATE -" TrayTip("Keystroke Limiter", "RUNNING", 5, 1) GUICtrlSetData($OptionsButtonStartStop, "- S T O P it -") ; change button text ; If button reads "Stop" Case "- S T O P it -" TrayTip("Keystroke Limiter", "STOPPED", 5, 1) GUICtrlSetData($OptionsButtonStartStop, "- ACTIVATE -") ; change button text EndSwitch EndFunc ;==>KeystrokeBlocker Func CloseOnTray() _GuiMinimizeToTray($OptionsGUI) EndFunc ;==>CloseOnTray Func _GuiMinimizeToTray($windo) ; check if 1 = Window exists, then check to see if its 16 = Window is minimized If BitAND(WinGetState($windo), 1) Or Not BitAND(WinGetState($windo), 16) Then ; change the window state to hide WinSetState($windo, "", @SW_HIDE) EndIf EndFunc ;==>_GuiMinimizeToTray Func HandlerButtonTerminate() TrayTip("Keystroke Limiter", "EXITING", 2, 1) Exit 0 EndFunc ;==>Terminate
__________________
Ultima modifica di Khronos : 26-07-2013 alle 15:04. |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jan 2010
Messaggi: 37089
|
Prendila con filosofia Khro, nella vita gli esami non finiscono mai...poi era prevedibile che per una faccenda del genere a XMasterX gli avrebbero prurito le mani
![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jan 2007
Città: quel ramo del lago di como, che volge a mezzogiorno... ^^
Messaggi: 19625
|
lo so. ho evitato di usare Java perchè non arriva senza miliardi di giri a bloccare l'input a tutto il sistema, C non lo conosco, pensavo fosse "più semplice" con AutoIt, ma a quanto pare "per ora" mi batte.
__________________
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Non era mica una sfida o una prova, non voglio battere nessuno
![]() Pensavo che ci sarebbe riuscito senza problemi con le sue conoscenze, altrimenti non lo avrei "messo in mezzo". Ho fatto un errore di valutazione della situazione, capita a tutti di sbagliare. La prossima volta tocca a Eress così impara a postare senza autorizzazione ![]()
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Jan 2010
Messaggi: 37089
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Jan 2007
Città: quel ramo del lago di como, che volge a mezzogiorno... ^^
Messaggi: 19625
|
ho le idee, le basi e la voglia di conoscenza ma mi manca il sapere decentemente almeno un linguaggio di programmazione che non sia il Php.
__________________
|
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: Jan 2011
Messaggi: 51
|
Ragazzi ho provato il file..ke dire, spettacolo!!!! Grazie infinite! Ho provato e sembra essere tutto ok! Chiedo solo una cosa, se io volessi modificare i tasti o i secondi di standby, potrei farlo dal file exe o serve il codice? Poi vorrei sapere se può interessare una guida su come fare il cronometro che sto costruendo..se può interessare faccio una mini guida con un pò di foto..
|
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Jan 2011
Messaggi: 51
|
Ho parlato troppo presto..il programma funge che è uno spettacolo..finché non apro il cronometro!!! Con il cronometro aperto il programma, anche se in esecuzione, non fa più il suo dovere, come se fosse chiuso..il cronometro in questione è "xnote stopwhatch"..qualche idea?
|
![]() |
![]() |
![]() |
#20 | ||
Senior Member
Iscritto dal: May 2005
Messaggi: 8697
|
Quote:
Per i tasti la cosa è più complicata, quindi non mi è possibile perchè non ho molto tempo da investirci. La guida falla comunque, a qualcuno sicuramente servirà. Quote:
Quel software vedo che è a pagamento, perchè non provi un'alternativa gratuita? Ce ne saranno 200, qui ne trovi 20 diversi ![]() Quando lo avrai trovato aggiungerò nell' ini i secondi
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . Ultima modifica di x_Master_x : 27-07-2013 alle 07:42. |
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:38.