Newsgroup: it.comp.appl.access
Titolo: Ingrandire finestra selezionata con AppActivate.

In un'applicazione seleziono un programma esterno mediante AppActivate
"titolo".
Purtroppo, se la finestra dell'applicazione è ridotta a icona, esce un
messaggio:
"errore di automazione. Il server ha sollevato un'eccezione."
E non mi viene intercettato da un comando OnError.
Peraltro, tutto viene eseguito come previsto e se apro la finestra
vedo le cose come dovrebbero essere, ma capite bene che non è bello.
C'è modo di comandare l'apertura di una finestra presente nella barra
delle applicazioni?
Grazie a tutti
Riccardo Baldinotti

Riccardo Baldinotti ha scritto:

Si puoi ricavarne l'hWnd e forzarne la visualizzazione con ShowWindow(API).
Se invece è un'applicazione che espone interfaccia OLE puoi recuperare
l'istanza con GETOBJECT ed a quel punto potrebbe bastare il VISIBLE=TRUE.
@Alex
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 @Alex
Ho cercato hWnd nell'Help di Access ma non ho trovato riferimenti al di
fuori di oggetti di Access, per cui non so come ricavare l'hWnd del
programma, che � Lotus Notes.
Sono andato a cercare su Google e mi sono registrato su vari siti ma senza
esito. Davvero, ci ho provato.
Ho trovato qualche pagina che parla di hWnd di un'applicazione aperta con
Shell, ma nel mio caso l'applicazione � gi� aperta.
Ho provato a dare dei comandi GetObject, ma mi esce l'errore: "Il
componente ActiveX non � in grado di creare l'oggetto".
A questo punto, a costo di essere accusato di "pappaprontite", chiedo lumi
ulteriori.
Riccardo Baldinotti


Riccardo Baldinotti
forse ce la fai con programmi tipo Spy++
ciao

 ciao
Ti ringrazio. Disgraziatamente Access � l'unico programma che possiamo
usare, non mi funziona nemmeno un file batch se non installato
appositamente.


Riccardo Baldinotti
ma Spy ( o similari ) lo usi solo nello sviluppo
dopo non ri serve

 Riccardo Baldinotti
Per ricavare l'hWnd di una WindowForm si usa l'API FINDWINDOW, in quel
modo passando il CLASSNAME e la Caption se puoi...!
Usando SPY++ il ClassName di LotusNotes � "NOTES".
Quindi usando l'API suggerita, dando per scontato ci sia solo 1 istanza di
LN puoi ottenere l'hWnd cos�:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
        Dim ClassName As String
        Dim strCaption As String
        Dim hWnd As Long
        ClassName = "NOTES"
        strCaption = ""
        hWnd = FindWindow(ClassName, strCaption )
        MessageBox "hWnd di LOTUS =" &(CStr(hWnd))
Ovvio che se hai pi� istanze devi assolutamente passare anche il parametro
CAPTION che identifica la singola Form.
A quel punto passi l'hWnd a ShowWindow come meglio credi...
@Alex


 @Alex
Ho preparato la seguente funzione:
Function fHandleDiNotes()
    Dim ClassName As String
    Dim strCaption As String
    ClassName = "NOTES"
    strCaption = ""
    fHandleDiNotes = FindWindow(ClassName, strCaption)
End Function
e poi la chiamo cos�
Call ShowWindow(fHandleDiNotes(), SW_RESTORE)
avendo dichiarato la ShowWindow e la costante SW_RESTORE.
Non succede nulla, e ottengo lo stesso errore che avevo da AppActivate
quando Notes era iconizzato.
Usando la Sub come l'hai scritta, ottengo che hWnd=0, anche se al posto di
"NOTES" scrivo, per esempio, "Excel".
Ho trovato la pagina
http://support.microsoft.com/kb/147659/en-us
in cui si descrive una funzione FindWindowLike e prover� a capirci
qualcosa.
Intanto grazie.
Riccardo Baldinotti


 Riccardo Baldinotti
Nel tuo caso la funzione in questione [FindWindowLike] non ti serve in
quanto si usa per ricerche anche nelle CHILD WINDOWS, infatti non � altro
che una ricorsiva che si basa sui fondamentali, ma i parametri da passare
sono quelli che devi usare per la FINDWINDOW che ti ho suggerito io, che
nel caso di MAIN_FORM � la pi� indicata.
Hai le idee troppo confuse.
@Alex


 Hai le idee troppo confuse.
Questa � una delle cose che ho pi� chiare.
Grazie ancora
Riccardo Baldinotti


 > SW_MAXIMIZE=3...
Scusa, ho risposto a capocchia.
Se scelgo "Ripristina, la finestra si apre nello stato in cu isi trovava
prima di essere iconizzata: a tutto schermo oppure dimensionata.


 dopo non ri serve
Ahim�, lo sviluppo avviene su un pc parimenti blindato.


Risolto!
Sostituendo a
         strCaption = ""
in
         hWnd = FindWindow(ClassName, strCaption )
la costante vbNullString, cos�
         hWnd = FindWindow(ClassName, vbNullString)
ottengo il valore desiderato e la ShowWindow funziona come richiesto.
In mancanza di una preparazione decente, la disponibilit� altrui e le
risorse in rete suppliscono egregiamente.
Grazie.
Riccardo Baldinotti


 Riccardo Baldinotti
La sostituzione che hai fatto � anomala... nel senso che vbNullstring=""
quindi non si spiega... tuttavia non svegliamo il cane che dorme.
In tutti i modi se non hai SPY++, che non viene distribuito senza VB6(DEV)
puoi provare questo TOOL che non si avvicina minimamente a SPY, ma �
utilissimo... in sua assenza:
http://www.codeproject.com/KB/dialog/FindWindow.aspx
Ciao
@Alex


 
http://www.codeproject.com/KB/dialog/FindWindow.aspx
Siccome tutto sul mio pc mi � impedito, tranne usare Access, per trovare
il ClassName di una finestra aperta mi sono riferito a
http://www.vb6.us/tutorials/activate-window-api
Grazie ancora una volta
Riccardo Baldinotti


End Function
modifica il codice così
 
 	Dim ClassName As String
        Dim strCaption As String
        Dim hWnd As Long
	'SciCalc è la calcolatrice di windows
	'deve essere aperta o minimizzata
        ClassName = "SciCalc"
        strCaption = ""
        hWnd = FindWindow(ClassName, strCaption)
        hWnd = FindWindow(ClassName, vbNullString)
        MsgBox "hWnd di Calc=" & (CStr(hWnd))

 Riccardo Baldinotti
Ciao
@Alex


 @Alex
mmm... quando si parla di "data mining", si intende che bisogna
scavare dentro al computer fino a rintracciare, non dico l'ultimo
byte, ma anche l'ultimo elettrone girovago? :-)
Grazie per la spiegazione, che mi aiuta a ricordare che un computer è
**un tantinello** più complesso di un tostapane (e richiederebbe
maggiori competenze).
Ahimé, sono anch'io vittima di quelli che, alla domanda: "cosa si può
fare con un computer?", rispondono "qualunque cosa!",  dimenticandosi
di aggiungere: "...tu sia in grado di fare...".
Grazie a te e a Lucia. Oggi uno dei miei arzigogoli mi ha fruttato i
complimenti; li giro pari pari alle mie fonti d'istruzione.
Riccardo Baldinotti