Replicare battitura di un tasto su una finestra.... possibile ?

« Older   Newer »
  Share  
DjDiabolik
CAT_IMG Posted on 24/1/2014, 02:30     +1   -1




Ragazzi.... ho pensato subito a questo forum :)

Devo togliermi uno sfizio e m'è venuta l'idea per questo piccolo (spero) script oppure programma che sia.

Ho usato un paio di volte AutoIT e so che ne ha le potenzialità per ottenere ciò che voglio fare... ma vi spiego subito:

- In pratica a me serva uno script che rimanga attivo in background.....
- Ipotizziamo di tener aperto il Blocco Note di windows
Al momento di battere un tasto sulla tastiera tale script dovrebbe:
1) Memorizzare il tasto battuto
2) subito dopo avviare un loop
3) e dopo un numero di cicli X (che posso specificare... ovviamente)
4) "simulare" (se cosi si può dire) una seconda pressione del tasto appena premuto.

Ora vediamo alla variabile X............... se questa X si potesse settare che ne so.. in millesimi di secondo sarebbe la cosa perfetta!
Però per ottenere un tempismo quasi perfetto dirrei che potrei anche fare un semplice loop tipo:
CODICE
:Inizio
IF X=10000 goto exitloop
X = X+1
goto Inizio
:exitloop


questo ovviamente non è nemmeno la giusta dicitura del linguaggio autoit ma è giusto per rendere l'idea, in pratica aumentando il valore di x di volta in volta posso (almeno credo) ogni volta simulare questa doppia pressione ad intervalli quasi perfetti tra loro.

Ipotizzando appunto che si ha il NotePad aperto.... se io premo A sullo schermo.... parte questo ciclo e sulla finestra del Notepad mi ritrovo AA.
Ovviamente questa cosa succede meno rapidamente con crescere della variable X.

Credo che sia fattibile usando AutoIT..... se potete datemi qualche dritta ad esempio e vedro di studiare qualche help :)
O magari qualcosa di simile già fatto in rete si trova già... a questo punto consigliate pure...

Grazie in anticipo.

P.S.
Non dovrebbe essere la prima volta che scrivo in questo forum... se si mi scuso della mia non presentazione nella sezione adatta.


*EDIT*
Sono stato un pò autodidatta... ho fatto questo scarno scarno che per assurdo potrebbe andare + che bene:

CODICE
Sleep ( 3000 )
Send("{UP}")
Sleep ( 500 )
Send("{SPACE}")
Sleep ( 500 )
Send("{SPACE}")


In pratica:
Il primo sleep.... lo uso per dare FOCUS all'applicazione che desidero.

Dopo di che invio la pressione della freccia UP.. e questa funziona.

Però dopo mezzosecondo vorrei inviare appunto 2 pressione della BARRA SPAZIATRICE ma questo non viene rilevato!!

Specifico che a me serve in una finestra di Firefox che contiene un giochino in flash...... e lo space non funziona.

Ora provo a dare/utilizzare il codice ASCII ma non credo mi possa aiutare....

Consigli ?

Ripeto... non mi serve una cosa supercomplessa.. va + che bene questo semplice file au3... mi basta solo che trovi, ora, un modo per far andare la pressione della barra spaziatrice.


*EDIT*
Da autodidatta ho provato questo:
CODICE
Sleep ( 3000 )
Send("{UP}")
Sleep ( 3000 )
Send("{SPACE}")
Sleep ( 420 )
Send("{SPACE}")
Sleep ( 1000 )


Solo che a volte funziona e a volte no........... e tralaltro funziona solo se uso Chrome.

Dico chrome perchè a me la cosa serve su un giochino in flash (se volete posto il link) e devo testare una cosa..... però appunto gli intervalli non sembrano sempre gli stessi..... anzi.. a volte sembra come se la doppia pressione viene skippata e non presa in considerazione.
Altre prende la prima ma non la seconda... qualcosa c'è che fallisce.....

Fatemi sapere come posso ottenere risultati migliori.. per ora stacco.


*EDIT 2*
Ed invece non ho staccato per niente e sono le 7 della MATTINA!!
Mi sono evoluto.... e di parecchio!!!
Ecco cosa ho ottenuto:
CODICE
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 301, 293, 192, 124)
$Input1 = GUICtrlCreateInput("250", 32, 48, 121, 21)
$Label1 = GUICtrlCreateLabel("RITARDO in millisecondi (1000 = 1 sec)", 8, 24, 191, 17)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button1 = GUICtrlCreateButton("Carica e Lancia", 64, 88, 177, 49)
$Button2 = GUICtrlCreateButton("Solo Lancio", 64, 176, 177, 49)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit

               Case $Button1
                       WinActivate ("Barney")
                       $pausa = GUICtrlRead($Input1)
                       Sleep(100)
                       Send("{UP}")
                       Sleep(700)
                       Send("{SPACE} 2")  
                       Sleep($pausa)
                       Send("{SPACE}")
               
               Case $Button2
                       WinActivate ("Barney")
                       $pausa = GUICtrlRead($Input1)
                       Sleep(100)
                       Send("{SPACE}")  
                       Sleep($pausa)
                       Send("{SPACE}")
       EndSwitch
WEnd


Mi sono anche aiutato con KODA per fare uno stand alone......... in pratica:
1) Richiedo la pausa da fare tra le due pressioni della barra spaziatrice.
2) Poi premo uno dei pulsanti... Uno fa la combinazione UP SPAZIO SPAZIO
3) Mentre l'altro solo SPAZIO SPAZIO

I problemi che noto è che forse gli sleep non sono sempre rispettati..... oppure ad esempio la funzione del secondo pulsante non funziona perchè con la stessa pausa il secondo pulsante in pratica non fa la doppia pressione della barra spaziatrice!

In pratica anche al momento di premere uno dei due pulsanti.... il focus su windows viene all'instante il tab dov'è caricato il flash... però come detto funziona solo con CHROME perchè firefox non accetta poi per niente la pressione della BARRA SPAZIATRICE e non mi spiego perchè.

Le mie attuale conoscenze sono terminate.............. ditemi se sapete di +..

Grazie in anticipo.

Edited by DjDiabolik - 24/1/2014, 07:03
 
Top
0 replies since 24/1/2014, 02:30   295 views
  Share