Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Determinare stato stampanti
giovedì 27 ottobre 2005 - 17.34
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Fantazma
Profilo
| Junior Member
95
messaggi | Data Invio:
gio 27 ott 2005 - 17:34
Salve a tutti.
Ho necessità di conoscere lo stato delle stampanti collegate al sistema. Per ora ho scritto questo codice:
Dim ListaStampanti As New System.Management.ObjectQuery("SELECT * FROM Win32_printer")
Dim Query As New ManagementObjectSearcher(ListaStampanti)
Dim Risultato As ManagementObjectCollection = Query.Get()
Dim Elemento As ManagementObject
For Each Elemento In Risultato
MsgBox(String.Format("{0} Status {1} ", Elemento("Name"), Elemento("PrinterStatus").ToString))
Tutto bene se non fosse che per tutte le stampanti mi ritorna come valore 3 cioè Sconosciuto... Ho girato in lungo ed in largo le classi WMI, ma non ho trovato nulla e nessuna spiegazione sul perché non funzioni. Ho scaricato dal sito Microsoft il file WMI Tools e visualizzando le proprietà ho visto che tutte le stampanti hanno effettivamente lo stato di sconosciuto... ma andando nella finestra stampanti di Win la sola stampante accesa è evidenziata... perchè insomma Windows sa qual'è l'unica stampante pronta e io no? :-(
Ho provato tutti gli altri attributi quali PrinterStatus, Avaiability etc... ma senza risultato. Alcuni risultano NULL altri perfettamente uguali tra stampanti disponibili e stamanti che non lo sono.
Guardando riga per riga con WMI Tool tutti i parametri estrapolabili tramite WMI query non c'è nulla che differenzi le stampanti on-line da quelle off-line.
Sto cercando di fare qualcosa anche con le API ma non sono andato molto lontano.
Suggerimenti? Consigli? ...o ancor meglio... soluzioni già pronte? :-P
Grazie!!!
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 27 ott 2005 - 18:49
Ciao,
allora è strano, perchè anche io avrei subito pensato ad utilizzare WMI, ma effettivamente a volte non si capisce la funzionalità di alcune proprietà che non vengono mai alimentate.
Per conoscere quindi lo stato di una stampante o di Jobs, giustamente hai provato ad utilizzaer le API, qui c'è un esempietto in C/C++. Se hai un po' di esperienza dovresti riuscire a migrarlo su .NET:
http://support.microsoft.com/?id=160129
Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Fantazma
Profilo
| Junior Member
95
messaggi | Data Invio:
gio 27 ott 2005 - 23:15
Ti ringrazio innanzitutto per la risposta...
Allora. Un po' di esperienza ce l'ho... ma non tanta. Questo codice l'avevo trovato ma in pratica non riesco a farlo funzionare. Se ho capito bene lui chiama la funzione
- EnumJobs Lib "winspool.drv"
per definire la grandezza del buffer di lettura dei dati della funzione
- GetPrinter
I problemi che riscontro sono due:
1) La funzione EnumJobs, se una stampante non ha alcun documento nello spooler, non riporta la stampante
2) Chiamando la funzione GetPrinter direttamente non riesco a trovare un modo per dimensionare correttamente il buffer di lettura dei dati.
Sono comunque al punto di partenza quindi. Continuerò a provare...
...ma le WMI se non le valorizzano a cosa servono?
Ciao... e grazie!!!
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
lun 7 nov 2005 - 10:49
>1) La funzione EnumJobs, se una stampante non ha alcun documento
>nello spooler, non riporta la stampante
>2) Chiamando la funzione GetPrinter direttamente non riesco a
>trovare un modo per dimensionare correttamente il buffer di
> lettura dei dati.
Purtroppo qui nello specifico non ti posso aiutare prechè non ho esperienza diretta su queste API. So di certo che se usate correttamente funzionano considerato che le usa anche la finestrella della gestione job stampanti di Windows.
>...ma le WMI se non le valorizzano a cosa servono?
E' una cosa che non mi so spiegare, ma non succede solo con queste classi WMI ma anche con altre. Per pigrizia non ho mai cercato risposta a questo quesito però effettivamente una spiegazione ci dev'essere.
Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !