Newsgroup: it.comp.lang.delphi
Titolo: sendmessage con hp laserjet driver congela programma

Ragazzi questa è pesante.
Ho un tool di debugging che alla partenza manda un messaggio in 
broadcast a tutte le finestre presenti nel sistema, se tra queste c'è 
il viewer del debugger ,esso si attiva e inizia a loggare tutti i 
messaggi che gli mando con wm_copydata.
Questa tecnica ha sempre funzionato, da anni a questa parte.
Ieri, dopo aver installato i driver della stampante HP laserjet 
P2055dn, il programma si blocca, in corrispondenza di questa riga:
SendMessage(HWND_BROADCAST, FInterceptMessage, dmsgStartSession, 
FDebuggerWnd);
C'è qualcosa che disturba il dispatching dei messaggi.
Provo a lanciare winsight32, e pure esso si blocca. freezato.
Ho disinstallato il driver stampante, ho scaricato e fatto girare dal  
windows resource tool l'utility cleanspl.exe eliminando tutti i deploy 
effettuati dal driver hp.
Tutto e' ritornato a posto.
Questo ovviamente non mi lascia tranquillo, perchè se un giorno uno dei 
nostri clienti si installa un driver stampante come questo.. il 
programma potrebbe imballarsi... e poi vai a capire che cosa e' stato 
fatto..
Approfondisco il problema, reinstallo e riprovo: col driver installato 
e winsight bloccato, da task manager killo spoolsv.exe: winsight32 si 
sblocca di colpo e con esso anche il mio programma e tutto torna a 
funzionare. (tranne le stampe ovviamente)
Qualcuno di voi è a conoscenza di questo tipo di problema?
Vi è già successo?
-- 
Morde

 Vi è già successo?
Ho smontato tutto, e ridotto al minimo il problema.
Esso si presenta quando viene mandato un wm_broadcast di tipo 
WM_SETTINGCHANGE
fatto un programmino di test, con una sola riga:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
questa sola riga freeza il programma.
Provatelo per favore. Mi date qualche feedback?
PS:
google e' pieno di risultati a riguardo, ma pochi con delphi e nessuno 
relativo ai driver hp... eppore spoolsv.exe, una volta killato, mi 
sblocca.
Questa storia e' molto incasinata... molto.
-- 
Morde

 Provatelo per favore.
Non ci penso minimamente ...
;-)
Ciao
ACSH

 Non va bene: bisogna usare l'API SendMessageTimeout.
Grazie :-) mi hai fornito la giusta soluzione.
Mi sono poi documentato su msdn e ho capito che è più appropriato l'uso 
di questa API nel caso di wm_broadcast per ICP.
Facendo un pò di "ICLD lounge": l'evoluzione del software è una cosa un 
pò strana.. per anni ha funzionato tutto, finche poi non installi un 
driver stampante e capisci che devi rimettere mano al codice vecchio e 
consolidato.
E' vero che i kernel cambiano, da winzozz vista in avanti molto è 
cambiato (in peggio?) ma noi programmatori siamo sempre in balìa del 
caso.
Immagina se questo problema invece che a me, fosse successo ad un 
cliente remoto, magari in russia, vai poi a chiedergli attraverso 
l'interprete cosa e' stato fatto... e intanto il software e' bloccato.
Se lavori a milano passa per Loreto che ti offro da bere e ci facciamo 
una bella chiacchierata.. :-)
Un saluto
-- 
Morde

 una bella chiacchierata.. :-)
Grazie per l'invito, ma non sono mai praticamente a Milano durante il
giorno. Perņ tengo buono il ticket per la bevuta e appena possibile lo
esigero' ...
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ...
Utilissimo questo thread, peraltro siete stati veloci nel trovare la 
soluzione.
Recentemente ho avuto anch'io un problema simile.
Un'applicazione in d6 presso un cliente chiama Word (office 2000) per aprire 
un documento e mandarlo in stampa presso una det. stampante.
Ha sempre funzionato.
Il cliente cambia stampante (una hp 1505 laser) e tutto si pianta.
Nell'installazione dei driver noto che installa anche il framework .net 
(cosa se ne farà la stampante di .net ...).
Io ho risolto installandogli l'ultima versione delle Office (2007).
App che hanno sempre funzionato non è detto che funzioneranno sempre, e le 
applicazioni di contorno come i server per le office automation vanno tenuti 
aggiornati.

 esigero' ...
vedi? subito approfitta.... rotfl!
A.

 soluzione.
Questo a dimostrazione del fatto che i ng sono fondamentali, e bisogna 
credere nel loro potenziale. :-)
Ciao
-- 
Morde

 vedi? subito approfitta.... rotfl!
Di questi tempi, uno non butta via niente ...
