|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
[c#] "evento stampa" per ogni applicazione
ciao gente.
qualcuno ha idea di come intercettare l'attività sulla stampante di modo che ogni volta che si stampa qualunque cosa da qualunque programma il mio programma "lo sappia" e possa eseguire del codice? (nella fattispecie dovrebbe riprodurre un suono.) grazie!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Tramite WMI puoi prendere il controllo di una printer definita nella tua macchina
Ti verra' restituita l'istanza di una classe nella quale puoi leggere lo stato della stampante. Andando in polling ogni 2 secondi puoi vedere se la stampante sta stampando oppure se e' in idle, e quindi puoi far suonare il suono non appena passa da Niente a InStampa (all'inizio della stampa) oppure quando lo stato passa da InStampa a Niente (alla fine della stampa) Non so se si puo' fare senza polling e quindi se si puo' fare con piu' precisione. (Cosi' rischi di perdere qualcosa immagino, quando ci sono 2 stampe consecutive gia' accodate).
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Non credo che ci siano in .NET, dovresti usare il P/Invoke. Questo articolo potrebbe tornarti utile: http://www.codeproject.com/KB/printi...omponent2.aspx |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
Ho risolto utilizzando questo codice: (in pratica ricevo gli elementi in coda della stampante poi se l'ultimo cambia ed è non null riproduco il suono)
Codice:
ObjectQuery oq;
ManagementObjectSearcher query1;
ManagementObjectCollection queryCollection1;
oq = new System.Management.ObjectQuery("SELECT * FROM Win32_PrintJob");
query1 = new ManagementObjectSearcher(oq);
queryCollection1 = query1.Get();
foreach( ManagementObject mo in queryCollection1 )
{
lastnow = mo["Document"].ToString(); //stringa dell'elemento in coda
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:07.




















