3

通常、古いバージョンの Windows (98 以前) では、Printer API で MarkingTechnology を使用して現在のタイプのプリンターを取得できます。ただし、Windows 2000 以降では使用できません。Windows 2000 以降でそれを検出する他の方法はありますか?

C# の WMI Query を介してプリンター情報をクエリするサンプル コード

var queryResult = string.Empty;
var query = new WqlObjectQuery("Select * from Win32_Printer");
var searcher = new ManagementObjectSearcher(query);

foreach (ManagementObject printer in searcher.Get())
{
    foreach (var p in printer.Properties)
    {
        queryResult += p.Name + ": " + printer[p.Name] + Environment.NewLine;
    }

    queryResult += "--------------------------------" + Environment.NewLine;
}

Win32_Printer クラスのドキュメント

ありがとう、

4

2 に答える 2

2

短い答え: いいえ、これを行うための一貫した方法はないようです。

于 2012-03-19T06:14:05.060 に答える
0

ドットマトリックスプリンターを検出するための可能な方法を見つけるために最善を尽くします。GetDeviceCaps関数(指定されたデバイスのデバイス固有の情報を取得します)を呼び出して、選択したプリンターがドットマトリックスの場合に文字ストリームとして返されるTECHNOLOGYアイテムを取得しようとしています。

var hdc = CreateDC("WINSPOOL", printerName, null, IntPtr.Zero);
var technology = (DeviceCapTechnology)GetDeviceCaps(hdc, (int)DeviceCap.TECHNOLOGY);

ただし、常にTECHNOLOGYアイテムをラスター表示として返します。なぜいつもこのような値を返すのかわかりません。

[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

[DllImport("gdi32.dll")]
static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData);

GetDeviceCaps関数

サンプルプロジェクト

于 2012-03-27T03:56:39.073 に答える