View Full Version : Usare un'applicazione mediante un'altra (VB6)
carosene
09-09-2004, 15:28
Avrei l'esigenza di inserire dei dati in dei textbox e combobox di un'applicazione della quale ho solo l'eseguibile. Tutto questo mediante una mia applicazione sviluppata con VB6. E' possibile ciò?
si ma non molto agevolmente e comunque usando il subclassing.
non l'ho mai fatto ma sicuramente lo puoi fare.
Brigante
10-09-2004, 10:42
Non credo che tu riesca a "catturare" dei dati visibili in un'applicazione creata per lavorare autonomamente per poi visualizzarli in una tua applicazione completamente separata.
Se l'applicazione "sorgente" non ha modo di esporre i dati che ti servono tramite proprietà, ti ripeto, non credo li puoi catturare.
Si può fare tranquillamente ma appunto come già detto non è una cosa affidabilissima...
ti posto un esempio dalla MSDN
Esempio di istruzione SendKeys:
In questo esempio la funzione Shell viene utilizzata per eseguire l'applicazione Calcolatrice di Microsoft Windows. Esso utilizza l'istruzione SendKeys per inviare sequenze di tasti per l'aggiunta di alcuni numeri e l'uscita dalla Calcolatrice. Per provare questo codice di esempio, incollarlo in una routine, quindi eseguire la routine. Dato che AppActivate sposta lo stato attivo sull'applicazione Calcolatrice, non è possibile eseguire il codice un'istruzione alla volta.
Dim ReturnValue, I
ReturnValue = Shell("calc.exe", 1) ' Esegue la Calcolatrice.
AppActivate ReturnValue ' Attiva la Calcolatrice.
For I = 1 To 100 ' Imposta il ciclo di conteggio.
SendKeys I & "{+}", True ' Invia sequenze di tasti alla Calcolatrice per aggiungere
Next I ' ciascun valore di I.
SendKeys "=", True ' Legge il totale.
SendKeys "%{F4}", True ' Invia ALT+F4 per uscire dalla Calcolatrice.
Brigante
10-09-2004, 11:55
Originariamente inviato da matpez
Si può fare tranquillamente ma appunto come già detto non è una cosa affidabilissima...
ti posto un esempio dalla MSDN
Esempio di istruzione SendKeys:
In questo esempio la funzione Shell viene utilizzata per eseguire l'applicazione Calcolatrice di Microsoft Windows. Esso utilizza l'istruzione SendKeys per inviare sequenze di tasti per l'aggiunta di alcuni numeri e l'uscita dalla Calcolatrice. Per provare questo codice di esempio, incollarlo in una routine, quindi eseguire la routine. Dato che AppActivate sposta lo stato attivo sull'applicazione Calcolatrice, non è possibile eseguire il codice un'istruzione alla volta.
Dim ReturnValue, I
ReturnValue = Shell("calc.exe", 1) ' Esegue la Calcolatrice.
AppActivate ReturnValue ' Attiva la Calcolatrice.
For I = 1 To 100 ' Imposta il ciclo di conteggio.
SendKeys I & "{+}", True ' Invia sequenze di tasti alla Calcolatrice per aggiungere
Next I ' ciascun valore di I.
SendKeys "=", True ' Legge il totale.
SendKeys "%{F4}", True ' Invia ALT+F4 per uscire dalla Calcolatrice.
Conosco questo esempio di MSDN, ma non credo che sia così semplice, però è un inizio, bisognerebbe fare qualche prova. Comunque all'inizio non si capiva bene cosa volesse fare carosene, cioè se "catturare" i dati da un'applicazione.exe e inserirli in dei textbox e combobox in VB6 o il contrario.
Bhe che io conosca per intervenire su un programma esterno e mandargli dati ... è l'unico che conosco.
carosene
10-09-2004, 15:51
Quello che vorrei realizzare è questo:
Mi trovo davanti ad una macchina gestita da un programma del quale ho solo l'esegubile. Questa applicazione ha una marea di combobox e textbox, che io vorrei popolare con una mia applicazione, realizzata da me. Non ho la necessità di leggere o
determinare alcun valore dalla macchina. I dati da immettere saranno immagazzinati nel database della mia applicazione. Comunque si tratterebbe solo di un aiutino all'operatore visto che comunque dovrebbe rileggere il tutto. Ho visto i vostri suggerimenti e non li trovo niente male. Ma mentre nel vostro esempio (calcolatrice) il textbox da popolare è solo uno, io nè avrei da popolare una quindicina. A questo punto avrei l'esigenza di spostare il focus da un textbox ad un'altra ma non sò come fare. Pensandoci bene però avrei il seguente problemi:
Non conosco la posizione iniziale del focus nel programma della macchina. Secondo voi è possibile trovare una soluzione a questo problema, senza obbligare l'operatore ha lasciare lo stato attivo su un determiato controllo?
Vi ringrazio per avermi dato del materiale con il quale smanettare.
La cosa non è impossibile... Dovresti usare la FindWindow per trovare l'handle dell'applicazione... Dopo con la EnumChildWindows potresti scorrerti tutte le textbox...e con la SetWindowText potresti settare il contenuto di ogni textbox...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.