0

PRINTER_INFO_2構造体のフレンドリ名属性にアクセスしようとしています。しかし、C ++でそれを行う方法がわかりません。

したがって、次のコードは名前を 16 進数で返します...

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwNeeded = 0, dwPrintersR = 0, Level = 2;
    PRINTER_INFO_2* prninfo=NULL;
    int retValue = 0;

    //Find required buffer size
    EnumPrinters( PRINTER_ENUM_NAME, NULL, Level, NULL, 0, &dwNeeded, &dwPrintersR );


    prninfo = (PRINTER_INFO_2*) GlobalAlloc(GPTR,dwNeeded);
    EnumPrinters( PRINTER_ENUM_NAME, NULL, Level, (LPBYTE) prninfo, dwNeeded, &dwNeeded, &dwPrintersR );
    cout << "# of printers:" << dwPrintersR << "\n";
    for(int i = 0; i<dwPrintersR; i++){
        cout << "Printer Name: " << prninfo[i].pPrinterName << "\n";
    }
    _getch();
    return 0;
}

PRINTER_ATTRIBUTE_FRIENDLY_NAME を使用したいのですが、その方法がわかりません。

私は C++ およびコンパイル済み言語が初めてです。どうもありがとうございます。

4

2 に答える 2

0

コードは、実際にコンソール ウィンドウに名前を出力しようとする場所を除いて機能しています。

Unicode 用にコンパイルしているように見えるため、プリンター名はワイド文字列 ( whcar_t *) です。のオーバーロードがないためstd::ostream::operator<<(wchar_t*)、文字列ではなくポインターの値を取得するだけです。

ワイド文字列を「ANSI」文字列に変換するか、Unicode ではなく ANSI 用のコンパイラを使用するか、ワイド文字列を処理する関数を使用して名前を出力する必要があります。たとえば、cout行を次のように置き換えることができます。

MessageBox(NULL, prninfo[i].pPrinterName, TEXT("Printer Name"), MB_OK);
于 2013-05-01T20:31:23.530 に答える