Muovere il Mouse e compiere eventi su altre applicazioni

giovedì 01 novembre 2007 - 15.43

Dainesi Profilo | Senior Member

Salve a tutti, ho la necessità di inserire via programma dei dati all'interno di una maschera di un applicazione di terze parti di cui non ho il codice nè posso dialogare via DDE o API.

Avevo pensato di creare una maschera trasparente che ingabbi l'applicazione terza e ne misuri la sua textbox e commandbutton, dimodoché una volta definite le aree in cui sono disposti i controlli non mi rimanesse altro che prendere possesso del mouse e spostarlo per ottenere il focus ed inviare le digitazioni necessarie.

A parole sembra semplice ma in pratica ?

Innanzi tutto, è possibile creare una finestra trasparente ?
E' possibile spostare il mouse anche se il focus appartiene ad un altra applicazione ?
E' possibile inviare eventi di tastiera ad altre applicazioni ?

Io programmo sia con VB6 che VB.NET per cui non fatevi remore

Vi ringrazio in anticipo per le dritte.

Brainkiller Profilo | Guru

>Avevo pensato di creare una maschera trasparente che ingabbi
>l'applicazione terza e ne misuri la sua textbox e commandbutton,
>dimodoché una volta definite le aree in cui sono disposti i controlli
>non mi rimanesse altro che prendere possesso del mouse e spostarlo
>per ottenere il focus ed inviare le digitazioni necessarie.

Esatto, una delle soluzioni è questa, ossia utilizzare un programma per eseguire macro (te lo ricordi il vecchio Registratore di Windows 3.1 ? ) Questi software sono scriptabili inoltre le macro possono essere esportare come .exe ed essere eseguite a mano o schedulate. Non so se questo potrebbe fare al caso tuo. Ne trovi a bizzeffe su Google digitando Macro Recorder e guardandoti un po' i vari links.

Altri sistemi.... quella della finestra trasparente mi sembra un po' un casino. Potresti invece di usare un software tipo macro recorder usare le stesse API nativamente che usano loro e quindi enumerare le finestre prima con la EnumWindows, poi una volta trovata, enumerare i controlli, a quel punto riempirli.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Dainesi Profilo | Senior Member

>
>Esatto, una delle soluzioni è questa, ossia utilizzare un programma
>per eseguire macro (te lo ricordi il vecchio Registratore di
>Windows 3.1 ? ) Questi software sono scriptabili inoltre le macro
>possono essere esportare come .exe ed essere eseguite a mano
>o schedulate. Non so se questo potrebbe fare al caso tuo. Ne
>trovi a bizzeffe su Google digitando Macro Recorder e guardandoti
>un po' i vari links.
>
>Altri sistemi.... quella della finestra trasparente mi sembra
>un po' un casino. Potresti invece di usare un software tipo macro
>recorder usare le stesse API nativamente che usano loro e quindi
>enumerare le finestre prima con la EnumWindows, poi una volta
>trovata, enumerare i controlli, a quel punto riempirli.
>

Purtroppo EnumWindows non è richiamabile direttamente da VB6 (mi dicono occorra un ocx chiamato dwcbkd32.ocx).
Ho appena provato a trovare l'handle della finestra che intendo manipolare (che non è una mia applicazione!) e sono riuscito. Ho recuperato anche la sua posizione (variabile di tipo RECT) e sono anche riuscito a spostare il Mouse su di lei, ma al momento di trasferirgli il focus ..... ciccia !!! Non riesco nè con SetFocus (API), nè con SendMessage e ovviamente non riesco ad inviargli i comandi.

Ho fatto una prova utilizzando il mio progetto .vbp e come "cavia" ho usato la Calcolatrice di Windows, cercando di passargli dei valori per fargli compiere una somma.

Aiutoooooooooooooo !!!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5