Newsgroup: it.comp.programmare.win32
Titolo: Si potrebbe scrivere un reggolyek?

Domanda oziosa (fino a un certo punto).
Esistono i keylogger, cio� programmi che intercettano l'input 
dell'utente e lo salvano a parte senza che enssuno se ne accorga.
Io per� mi (e vi) chiedo: � possibile scrivere un reggolyek, cio� 
l'inverso di un keylogger? Un programma cio� che genera un input come se 
fosse l'utente a digitarlo/cliccarlo, senza che windows e gli altri 
programmi si accorgano di nulla?

 di nulla?
Si, certo che si puï¿œ fare.
In user mode per esempio lo fa visual studio "coded ui testing" per 
testare la ui di una applicazione in modo automatizzata. Ma ci sono 
tanti altri sw in giro che usano queste tecniche.
Il problema ï¿œ che la "registrazione" di una sequenza di eventi di un 
utente puï¿œ essere non applicabile se ripetuta in un altro momento.
Se per esempio aumenta la latenza di rete, certe operazioni non possono 
essere ripetute alla stessa velocitï¿œ. Oppure altri eventi di sistema 
possono modificare la flowchart. visual studio per ovviare a questo 
tiene da parte altri indicatori per garantire che la sequenza che segue 
sia possibile ripeterla.
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/


Per i programmi � relativamente semplice.
Le API keybd_event e mouse_event permettono di generare eventi mouse e 
tastiera.
Come giustamente diceva Raffaele, non � detto che gli stessi eventi in 
un secondo tempo possano portare allo stesso risultato.
Il sistema operativo potrebbe tracciare il fatto che l'evento � generato 
da un software e non dal driver di tastiera/mouse. Non s� se questa 
possibilit� sia effettivamente implementata (forse nei campi password 
dove non funzionano il copy o i messaggi di lettura del testo).
Se invece vuoi emulare gli eventi al livello pi� basso (hardware) allora 
progettini come questo:
http://macetech.com/blog/?q=node/46
Un semplice microcontrollore pu� utilizzare il protocollo HID (Human 
Interface Device, anche se molti usano Input al posto di Interface) per 
inviare al PC gli stessi comandi che invierebbero un vero mouse o una 
vera tastiera. Tra l'altro sia Atmel che Microchip forniscono gi� esempi 
di implementazioni di HID per i loro micro.
Questa seconda soluzione � anche multi-piattaforma :) (a patto che il 
sistema abbia una porta USB).
-- 
Valter Minute
(the reply address of this message is invalid)
(l'indirizzo di reply di questo messaggio non � valido)

 utente puï¿œ essere non applicabile se ripetuta in un altro momento.
Certo, in generale ï¿œ un problema. Perï¿œ la cosa interessante ï¿œ la 
possibilitï¿œ di "ingannare" un programma facendogli credere di essere 
usato da un umano... cosï¿œ, per dire, si potrebbe provare a creare un 
programma di visione artificiale/intelligenza artificiale che giochi a 
Command & Conquer. Oppure, si potrebbe cercare di aggirare le protezioni 
alla punkbuster, creando un aimbot (robot di mira automatica) nei giochi 
sparatutto a squadre alla CoD.
Diventano possibili questo tipo di cose :-)

 Diventano possibili questo tipo di cose :-)
L'automazione delle UI ï¿œ cosa che si fa da tempo.
Come ti dicevo lo stesso visual studio legge lo stato della UI in modo 
da sapere se le condizioni sono giuste per continuare a mandare l'input 
desiderato.
Per casi relativamente complessi, incece di una visione/intelligenza 
artificiale, dovrebbe essere sufficiente esplorare l'albero degli hwnd 
e gestire il comando remoto dell'applicazioni basandosi su una ben piï¿œ 
semplice macchina a stati.


 programmi si accorgano di nulla?
Mi ricordo il registratore di macro di Win3.11
btw sì. Si può fare.
Di recente ho utilizzato un metodo simile (non proprio questo) per
automatizzare un programma che doveva essere lanciato ogni volta a mano
per convertire 10k documenti. Il produttore non aveva intenzione di
rilasciare alcuna versione batch (sviluppo congelato da tempo) e ho
dovuto scrivere un wrapper che comandasse il sw in oggetto in modo
automatico per ciascun file.
Non è propriamente un keyplayer ....
PSK