Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Come rilevare l'esecuzione compilata

Ciao a tutti !
Ho cercato a lungo su help, msdn e varie, ma senza
successo...
Tempo fa avevo trovato un ocx shareware che mi
concedeva di fare tutte le prove che volevo purche'
rimanesse in ambiente di sviluppo VB.    Se invece
provavo a compilare il mio progetto, ecco che quando
lanciavo l' exe mi appariva un bel messagebox che
avvertiva (l'utente finale) che l'ocx era shareware.
Ora io vorrei fare lo stesso, consegnando al mio
cliente (che vuole vedere il prodotto prima) l'ocx
che ho realizzato per lui perfettamente funzionante.
Ma vorrei evitare che questo se lo prenda, se lo
usi e mi paghi con una pernacchia.
Come posso fare ?    Ho provato inserendo in
ReadProperties il test su Ambient.Usermode, ma
non e' proprio quello che mi serve.   Questo vale
true anche se faccio eseguire il programma in
modo interpretato (F5).   Io vorrei rilevare se il
programma e' proprio stato *compilato*.  So che
si puo' fare, perche' l'ho visto, ma non so se si puo'
in VB6 (forse l'ocx di cui parlavo prima era in C++).
Non voglio usare sistemi cervellotici come 'Require
License Key' per motivi che non sto qui a dire.
Qualche idea ?
Grazie
Bepi

 avvertiva (l'utente finale) che l'ocx era shareware.
Io ho trovato questo sistema:
Private Declare Function GetModuleHandle Lib "kernel32" Alias
"GetModuleHandleA" (ByVal lpModuleName As String) As Long
Public Function IsIDE() As Boolean
    Dim hModule As Long
    hModule = GetModuleHandle(vbNullString)
    IsIDE = (hModule = App.hInstance)
End Function
"Dovrebbe" funzionare con qualsiasi ambiente di sviluppo.
Ciao

 ha scritto nel messaggio
news:9lcbmt$8ikpb$1...@ID-56313.news.dfncis.de...



Grazie Zanna, ma non funge... nemmeno combinato
con il test su Ambient.UserMode.
Credo che la questione abbia la sua importanza,
perche' consente una certa 'protezione' sui controlli.
Ho fatto alcune prove e ho rilevato quanto segue:
Il tuo test IsIDE ritorna true quando l'OCX e' incluso
nel project group, cioe' quando si e' in fase di debug
del controllo.   Quando l'OCX e' compilato vale false.
Il test su UserMode ritorna true quando si e' in run mode
(sia in ambiente sviluppo, sia in exe finale) e ritorna
false a design time, ovvero quando si sta lavorando
sui form e codice.     Ora si hanno i seguenti 5 casi:
1) Design time (OCX interpr. + Prog interpr.)
     IsIDE=true     UserMode=false
2) Run (F5)       (OCX interpr. + Prog interpr.)
     IsIDE=true     UserMode=true
3) Design time (OCX comp. + Prog interpr.)
     IsIDE=false     UserMode=false
4) Run (F5)       (OCX comp. + Prog interpr.)
     IsIDE=false     UserMode=true
5) EXE              (OCX comp. + Prog comp.)
     IsIDE=false     UserMode=true
Ora io devo rilevare solo il caso 5) che pero'
si presenta, con i due test IsIDE e UserMode,
identico al caso 4)  Devo quindi trovare un
terzo test che mi permetta di differenziare i
casi 4) e 5) (o un test che identifichi da solo il
caso 5)
Puo' servire a qualcosa testare Extender.Parent ?
Ad esempio, Extender.Parent.hWnd mi da l'handle
del Form su cui e' stato posizionato il controllo.
Conosci qualche altra api che puo' fornire info
utili ?
Ancora grazie
Ciao
Bepi

 niente ed è semplicissimo)
in effetti devo dire che l'idea e' da premio
nobel per la semplicita' e la funzionalita' e
ti ringrazio molto per avermi risposto.
Purtroppo io sono un purista del linguaggio
e l'idea di generare un errore trappato mi
disgusta un tantino... preferisco soluzioni
piu' eleganti.    Ma la tua e' senz'altro un'idea
validissima per chi, diversamente da me,
non ha tutte queste fisime per la pulizia del
codice...
Grazie mille comunque !
Ciao
Bepi

... ma devo anche aggiungere che non e' sufficiente
il tuo test (ci ho pensato dopo)
- ritiro l'assegnazione del nobel -
se compilo l'ocx (che conterrebbe il tuo test)
otterrei un risultato "non IDE".   A me interessa
sapere se *l'applicazione che ospita il controllo*
e' sull'IDE o no, e su quello non posso
intervenire, purtroppo.
Voglio capire se chi usa il mio controllo lo sta
solo provando (nessun msgbox) o ha fatto una
applicazione che lo utilizza e la sta distribuendo
(quindi msgbox che avvisa i suoi clienti che ha
usato un controllo non regolarmente acquistato)
Ciao
Bepi

 ha scritto nel messaggio
news:9le9sg$8g45b$1...@ID-56313.news.dfncis.de...



Forse non hai mica capito.....
Un cliente mi ha commissionato l'ocx, il sw lo realizza
lui.  Quello che posso fare e' fare controlli entro il
mio ocx, non dentro il suo programma che utilizza
il mio ocx.
roger ?
Ciao
Bepi


Sul SC dovrebbe (e sottolineo dovrebbe) esserci un mio programma che legge
il nome dell'applicazione corrente tramite API; potresti verificare che
l'applicazione corrente abbia lo stesso nome dell'appicazione corrente...
Sembra un controsenso, ma se noti l'applicazione-corrente-secondo-vb
(app.exename mi pare sia) quando sei in compilato e' EFFETTIVAMENTE
l'applicazione corrente, quando sei in IDE non lo e', in qualto la vera
applicazione corrente e' VB6.exe...
Prova a controllare sul SC, keyword credo IDE e qualcos'altro...
Ciaotutti,
*