31/03/12 18:58
matteorm83
Salve a tutti,
vi illustro il mio problema:
ho realizzato una macro (VBA excel) che simula l'input a tastiera e mouse (non mi perdo nel dettaglio, facciamo finta per semplicità che il programma clicchi in sul tasto bottone "office" di paint e successivamente, nella schermata che si è aperta, sul pulsante "salva".
Il mio problema è la sincronizzazione tra quello che esegue il programma e quello che avviene sullo schermo. Per far questo ho usato la funzione sleep() in modo da ritardare le azioni eseguite...
Tuttavia non è molto affidabile. Se ad esempio dopo il primo click la schermata tarda ad aprirsi il mio programma non se ne accorge e potrebbe eseguire il secondo click a vuoto!
Esiste una maniera per rilevare ciò che avviene sullo schermo in modo che le azioni della macro ne vengano subordinate?
Grazie anticipatamente.
vi illustro il mio problema:
ho realizzato una macro (VBA excel) che simula l'input a tastiera e mouse (non mi perdo nel dettaglio, facciamo finta per semplicità che il programma clicchi in sul tasto bottone "office" di paint e successivamente, nella schermata che si è aperta, sul pulsante "salva".
Declare Function SetCursorPos Lib "User32" (ByVal X As Long, ByVal Y As Long) As Long 'Funzione muovi cursore Declare Sub mouse_event Lib "User32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up Private Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down Private Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Salva_File() AppActivate "Immagine - Paint" Sleep (5000) Call SetCursorPos(25, 25) 'Posiziona cursore sul pixel 25,25 Sleep (500) Call mouse_event(MOUSEEVENTF_LEFTDOWN, 25, 25, 0, 0) 'click tasto sx Sleep (100) Call mouse_event(MOUSEEVENTF_LEFTUP, 25, 25, 0, 0) 'rilascia tasto sx Sleep (1000) Call SetCursorPos(58, 155) 'Posiziona cursore sul pixel 25,25 Sleep (100) Call mouse_event(MOUSEEVENTF_LEFTDOWN, 58, 155, 0, 0) 'click tasto sx Sleep (100) Call mouse_event(MOUSEEVENTF_LEFTUP, 58, 155, 0, 0) 'rilascia tasto sx End Sub
Il mio problema è la sincronizzazione tra quello che esegue il programma e quello che avviene sullo schermo. Per far questo ho usato la funzione sleep() in modo da ritardare le azioni eseguite...
Tuttavia non è molto affidabile. Se ad esempio dopo il primo click la schermata tarda ad aprirsi il mio programma non se ne accorge e potrebbe eseguire il secondo click a vuoto!
Esiste una maniera per rilevare ciò che avviene sullo schermo in modo che le azioni della macro ne vengano subordinate?
Grazie anticipatamente.
Ultima modifica effettuata da matteorm83 31/03/12 20:25
aaa