Newsgroup: it.comp.lang.visual-basic
Titolo: Come ridurre dimensioni EXE e memoria?

Gestionale, da molte form (registrazione mov.contabili, gestione documenti
di magazzino, elenchi vari) ne vengono richiamate altre
(ricerca/consultazione PdC/clienti/fornitori, articoli, tabelle di vario
genere). Queste ultime vengono avviate come modali per "costringere"
l'operatore a fare una scelta o a chiuderle. Accade, per il gioco della
serie "se possi cercare l'articolo devo poter cercare anche il cliente e
pure il documento, che ogni EXE contiene le stesse form.
Mi piacerebbe un tot poter creare un EXE che contiene solo una particolare
form (o un gruppo delle stesse) da avviare quando necessario e avere anche
la certezza che, pur cliccando schizofrenicamente in altre finestre (mie) di
altri EXE attivi, quell'EXE si comporti come una form modale appartenente
allo stesso EXE che l'ha avviata.
In altre parole, come si puň avviare un EXE da un altro e procedere con la
successiva istruzione dell'EXE chiamante solo dopo che il chiamato viene
chiuso? Grazie.
PS: Vorrei evitare soluzioni del tipo "crea un file quando lanci e cicli
finchč quel file non esiste piů in quanto cancellato dall'EXE chiamato alla
sua chiusura".


l'ormai famosa WaitForInputIdle... (aspetta che venga chiuso il processo
chiamato)
google saprà dirti come usarla :))
ciao

 google saprà dirti come usarla :))
Grazie. Ho trovato solo roba in C. Cercherò ancora...


ops forse meglio la WaitForSingleObject
http://groups.google.com/groups?hl=it&lr=&ie=UTF-8&oe=UTF-8&threadm=dfa9af0d
.0202261655.268b9d12%
40posting.google.com
&rnum=9&prev=/groups%3Fas_q%3DWaitF
orInputIdle%26ie%3DUTF-8%26oe%3DUTF-8%26as_ugroup%3D*vb*%2520*basic*%26lr%3D
%26as_scoring%3Dd%26hl%3Dit
ciao ....

 ha scritto nel messaggio
news:vK2V8.107953$Kt3.2...@twister2.libero.it...

Ora guardo anche questa, ma:
The WaitForInputIdle function enables a thread to suspend its execution
until the specified process has finished its initialization and is waiting
for user input with no input pending. This can be useful for synchronizing a
parent process and a newly created child process. When a parent process
creates a child process, the CreateProcess function returns without waiting
for the child process to finish its initialization. Before trying to
communicate with the child process, the parent process can use
WaitForInputIdle to determine when the child's initialization has been
completed. For example, the parent process should use WaitForInputIdle
before trying to find a window associated with the child process.
Mi par di capire che aspetta che il "processo di inizializzazione" sia
concluso, non che l'intero processo (EXE) venga terminato (chiuso). Ho
capito male?

 ops forse meglio la WaitForSingleObject
Oh, madonnina, che bordello. Mi fido poco.
Ho la lontana sensazione che proverò a fare quello che nel PS volevo
evitare... ;-)))

 evitare... ;-)))
per favore  :)))
ci sono mille modi piů puliti di quello...
da un piccolo activex oppure ad un piů immediato sendmessage ...puoi anche
passare dal filemapping...
(se vuoi provare l'emozione ho un po di codice da qualche parte,reduce da
prove passate)

 ops forse meglio la WaitForSingleObject
esempio sul sito comune, utilizza CreateProcess e la funct di cui sopra.
cerca shell, l'esempio mi pare si chiami "Esempio di Shell Sospensiva" o
roba cosi'.
ciao, assa.

 roba cosi'.
Grazie Assa. Ho scaricato e provato. Tutto OK.
Ora cerco di comprenderla e adattare alle mie esigenze.

 EXE che l'ha avviata.
Crea delle dll con dentro i forms... poi le istanzi quando serve... per
avere i forms modali vai giů di api... č moooolto meglio che crearsi piů
eseguibili fidati! ;)
Se ti servono figlie in un mdi child cerca un mio vecchio post
sull'argomento... c'č un link a dei sorgenti che tramite misteriosi
subclassing fanno proprio quello! ;)
hth

 allo stesso EXE che l'ha avviata.
Secondo me ti crei un piccolo ActiveX exe contenete il form e una classe
chiamante (activex... serve una classe di interfacciamento) e risolvi i tuoi
problemi.
Gli Ax-Exe funzionano come gli Ax-dll solo che possono essere usati in forma
1 -> molti, mentre le dll essendo in-process solo 1 -> 1
Ciao

 allo stesso EXE che l'ha avviata.
[SNIP]
Come accennato da Franco, potresti semplicemente creare una DLL ActiveX con
il gruppo di form e funzioni che ti servono.
Questo e' tanto piu' vero se oltre alle finestre anche la logica di accesso
ai dati e' la stessa.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

Direi che funziona bene.
Ho modificato le istruzioni di avvio e controllo in questo modo per
consentire la gestione degli eventi dell'intero sistema:
...
   Ret& = CreateProcessA(0&, CmdLine$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS,
0&, 0&, Start, proc)
   Do
        Ret& = WaitForSingleObject(proc.hProcess, 1000)
        if ret&=&HFFFFFFFF then
'                Programma non trovato/avviato (WAIT_FAILED)
            stop
        end if
        If Ret& = 0 Then Exit Do    'Procedura chiusa
'            Rientro per Timeout (WAIT_TIMEOUT=258&)
        DoEvents
   Loop
   Ret& = CloseHandle(proc.hProcess)