Newsgroup: it.comp.lang.visual-basic
Titolo: Non ho mica capito! (Help)

E' tutta la sera che cerco nei vari post e rimbalzo da un post all'altro :-)
Quello che voglio fare è semplice (credo)
Voglio modificare le opzioni di un programma esterno lanciato dalla mia 
applicazione.
Sono riuscito a lanciare il programma, ho ricacato l'handle
ora quello che non capisco è come individurare tutte le voci di menù x 
poter entrare nel menù che mi interessa
ho fatto una prova con il sendkeys, sono riuscito ma è poco affidabile 
xchè se clicco qualcosa mentre sta eseguendo va tutto in palla.
quindi pensavo di scorrere tutte le finestre figlie della mia finestra 
principale (sperando che le opzioni del programma rientrino in queste 
finestre)
solo che non ho capito come fare, un esempio che ho trovato che un pò mi 
funziona è il seguente:
hWnd = Handle ' questo è l'handle del programma principale che ho preso 
dalla shell
'Trova l' handle della prima finestra child (controllo)
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
List1.Clear
Do
     'Legge il testo del controllo
     Testo = GetWindowText(hWnd, str, 20)
     hWnd = GetWindow(hWnd, GW_HWNDNEXT)
     If Testo > 0 Then List1.AddItem str
Loop While hWnd <> 0
solo che questo mi mostra tutte le finestre aperte e non sono quelle del 
mio programma!
inoltre non ho ben capito se tra queste ci sono i vari elementi che 
compongono il programma in questione.
Insomma non ho capito se x esempio posso ricavare la finestra che si 
aprirebbe cliccando sul menù a tendina del programma e poi cliccando su 
preferenze (e poi da li dovrei fare altre cosette)
o magari se c'è un modo + giusto x usare i sendkeyis in maniera che 
funzioni sempre, qualsiasi cosa io faccia
nei vari post qualcuno ha chiesto una cosa del genere, ma le risposte di 
solito si limitano ad un usa xxxxx , solo che cercando xxxxx non ne 
vengo a capo x il mio caso specifico :-)
ciao e grazie

> Sono riuscito a lanciare il programma, ho ricacato l'handle
Poi mi devi spiegare come si fa a *ricacare* l'handle in VB...  :-)
Il mio VB (versione 6 sp5) mi dice
"Errore. La ricorsività non è applicabile alla funzione."
Sarà perchè ho impostato Gabinetto.Scarico=False?
bye
ps volevi forse dire *ricavato*
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
www.nicolaottomano.it

 
e già ;-)
cmq ora che ci penso, eviterei la soluzione send keys xchè il programma 
deve essere x forza in primo piano no?
a me servirebbe cambiare le opzioni ogni tot tempo ma senza spostarmi 
dalla finestra in cui sto lavorando in quel momento
se puede fare? :-)
ciaociao

 mio programma!
Infatti; per distinguerla potresti provare con la funzione FindWindow, se il
titolo della finestra e' costante oppure se ne conosci la classe ed e'
anch'essa non ambigua (la classe puoi ricavarla con strumenti tipo Spy++),
ma hai comunque un problema: indipendentemente dalle funzioni che usi, non
puoi ricavare l'handle di una finestra che non sia gia' stata caricata,
quindi comunque dovresti trovare prima il sistema di aprirla con i SendKeys
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 
infatti, è qui che volevo arrivare
1) cmq devo aprire quella finestra di opzioni
2) a quanto ho capito non è una cosa che si può fare in hide :-(
quindi mi sa che o trovo il file coi dati e capisco come modificarlo 
(ammesso che me lo faccia toccare a programma aperto) oppure la 
soluzione non è molto pratica e sicura.

 quindi comunque dovresti trovare prima il sistema di aprirla con i
SendKeys
Ecco, dicevo...un bagno di sangue...
Alla fine ho fatto così:
-Giù di FindWindow e, soprattutto,  FindWindowEx.
-SendMessage e PostMessage, al posto di SendKeys, che spesso non sortiva
l'effetto desiderato.
-Considerare anche il tempo necessario affinche finestre e menu si aprano,
prima di ricavare gli Handle delle successive finestre.
-Giù di SetForegroundWindow per assicurarsi che le finestre su cui lavori
non perdano il focus, siccome l'utente nel mentre cliccherà per certo da
qualche altra parte...
-Numerosi loop per assicurarsi di ricevere un Handle valido, prima di
cercare la finestra successiva.
Buona fortuna!!!
Ciao, Luca.

 
e ho visto che il sendkeys ogni tanto nen senda :-)
grazie per le dritte, proverò!