none
PRINTER_ATTRIBUTE_ENABLE_BIDIのAttributeはWindows 2000以後有効になるか、代替Attributeがあるか

    質問

  • Windows 2000以後OSに下記のソースを記載にしても、プリンター画面に「双方向サポートを有効にする」チェックボックスがチェックオフにならないです。

    ===========================

    PRINTER_INFO_2 PI2 = {0};

    PI2.Attributes &= ~PRINTER_ATTRIBUTE_ENABLE_BIDI;

    ===========================

    Webに探して、PRINTER_ATTRIBUTE_ENABLE_BIDIはWindows 95/98/Me向けのAttributeですが、Windows 2000以後OSに利用できない場合、何か代替Attributeがありますか?

    目的はプリンターインストール後、「双方向サポートを有効にする」の初期値はオフになります。

    2017年11月6日 2:17

すべての返信

  • 私の環境 (Windows 10 x64, SHARP MX-2610FN) では、下記のようなコードでデフォルトプリンターのプリンタープロパティにある「双方向サポートを有効にする」チェックボックスをチェックオフにすることができました。OpenPrinter 関数の引数でアクセス権を設定する必要があるようでした。

    TCHAR szDefaultPrinter[256] = { 0 };
    DWORD dwSize = _countof(szDefaultPrinter);
    if (GetDefaultPrinter(szDefaultPrinter, &dwSize))
    {
    	HANDLE hPrinter;
    	PRINTER_DEFAULTS pd = { 0 };
    	pd.DesiredAccess = PRINTER_ALL_ACCESS; // アクセス権を指定
    	if (OpenPrinter(szDefaultPrinter, &hPrinter, &pd) != 0)
    	{
    		const DWORD dwLevel = 2;
    		DWORD dwNeeded;
    		GetPrinter(hPrinter, dwLevel, 0, 0, &dwNeeded);
    		LPBYTE pPrinter = (LPBYTE)LocalAlloc(LPTR, dwNeeded);
    		if (GetPrinter(hPrinter, dwLevel, pPrinter, dwNeeded, &dwNeeded) != 0)
    		{
    			PRINTER_INFO_2 *pInfo = (PRINTER_INFO_2 *)pPrinter;
    			if (pInfo->Attributes & PRINTER_ATTRIBUTE_ENABLE_BIDI)
    			{
    				pInfo->Attributes &= ~PRINTER_ATTRIBUTE_ENABLE_BIDI;
    				SetPrinter(hPrinter, dwLevel, pPrinter, 0);
    			}
    			LocalFree(pPrinter);
    		}
    		ClosePrinter(hPrinter);
    	}
    }

    参考サイト: https://msdn.microsoft.com/ja-jp/library/cc410486.aspx

    2017年11月6日 5:18
  • AlecYuan さん、こんにちは
    フォーラム オペレーターの立花楓です。

    本件について、その後いかがでしょうか。

    課題が解決されたのであれば幸いですが、そうでなければ kenjinote さんからお寄せいただいた情報をご確認いただくことで問題の解決に近づくと思われます。

    また、今後参考になる情報がありましたら、投稿者からの [回答としてマーク] をお願いします。


    よろしくお願いします。


    MSDN/TechNet Community Support 立花楓

    2017年11月13日 6:19
    モデレータ