プリンタ情報の取得

今日は市川大門の花火大会。
自宅から見物もできたりしますが(・∀・)


で、今日は、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で良いですよね(・∀・)?