プリンタ情報の取得
今日は市川大門の花火大会。
自宅から見物もできたりしますが(・∀・)
で、今日は、Windowsのコントロールパネルにある[プリンタとFAX]みたいな画面をプログラムで作りたいのだけれど、System.Drawing.Printing.PrinterSettings.InstalledPrintersだと名前しか取れないと言われたので、そのメモです(・∀・)
コレ系はWMI経由でやることになりますが。
Win32_Printerを使えば良いようなので、こんなコードを書いてみました。
using System.Management; ManagementObjectSearcher mos = new ManagementObjectSearcher( "SELECT * FROM Win32_Printer" ); ManagementObjectCollection moc = mos.Get(); foreach( ManagementObject mo in moc ) { Debug.WriteLine( mo[ "Name" ] ); Debug.WriteLine( mo[ "PrinterStatus" ] ); }
PrinterStatusが3だと「準備完了」状態でしょうか。
あと、Win32_Printerが持っているプロパティの詳細について知りたければ、こんなカンジで一覧が取れるので、後は調べてねって言っちゃいました(・∀・)
foreach( PropertyData pd in mo.Properties ) { Debug.WriteLine( pd.Name + ":" + ( pd.Value == null ? "(null)" : pd.Value.ToString() ) ); }
プリンタ状態の取得については、winspool.drvをP/InvokeしてPRINTER_INFO_2を取得する方法もありますけど。
.NETならWMIで情報取得するのも簡単なので、WMIで良いですよね(・∀・)?