PRINTER_DEFAULTS

PRINTER_DEFAULTSも、プリンタの設定の一つだが、特に気になるのはアクセス属性。

PRINTER_DEFAULTS structure (Winspool.h) - Win32 apps | Microsoft Docs

前回、設定変更で、pd.DesiredAccessをPRINTER_ALL_ACCESSにしたけど、常にそれでいいのではとおもうかもしれない。
しかし、

PageSetup(ページ設定コモンダイアログ)

ここでは、PRINTER_ALL_ACCESSで失敗する例を示している。

					// 取得したIDごとに処理を分岐.
					// Printが選択された時.
					case ID_ITEM_PRINT:

						// ID_ITEM_PRINTブロック
						{

							// 変数の宣言と初期化.
							PAGESETUPDLG psd = {0};	// PAGESETUPDLG構造体psdを0で初期化.
							DEVMODE *pDevMode = NULL;	// DEVMODE構造体ポインタpDevModeをNULLで初期化.
							PRINTER_DEFAULTS pd = {0};	// PRINTER_DEFAULTS構造体pdを{0}で初期化.
							BOOL bRet = FALSE;	// BOOL型bRetをFALSEで初期化.
							HANDLE hPrinter = NULL;	// HANDLE型hPrinterをNULLで初期化.

							// psdの初期設定
							psd.lStructSize = sizeof(PAGESETUPDLG);	// sizeofでPAGESETUPDLG構造体のサイズを指定.
							psd.hwndOwner = hwnd;		// hwndを指定.
							psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS;	// ミリ単位に設定.

							// PageSetupDlgの表示.
							bRet = PageSetupDlg(&psd);	// PageSetupDlgにpsdを渡して表示し, 戻り値をbRetに格納.
							if (bRet){	// TRUEの時.
								pDevMode = (DEVMODE *)GlobalLock(psd.hDevMode);	// psd.hDevModeをロック.
								if (pDevMode != NULL){	// pDevModeがNULLでない時.
									pd.DesiredAccess = PRINTER_ALL_ACCESS;	// 全ての権限.
									bRet = OpenPrinter(pDevMode->dmDeviceName, &hPrinter, &pd);	// OpenPrinterでプリンタを開く.
									if (bRet){	// TRUE.
										MessageBox(hwnd, _T("OpenPrinter OK!"), _T("PRINTER_DEFAULTS"), MB_OK);	// "OpenPrinter OK!"と表示.
										ClosePrinter(hPrinter);	// ClosePrinterで閉じる.
									}
									else{	// FALSE.
										MessageBox(hwnd, _T("OpenPrinter NG!"), _T("PRINTER_DEFAULTS"), MB_OK);	// "OpenPrinter NG!"と表示.
									}
									GlobalUnlock(psd.hDevMode);	// アンロック.
								}
							}

						}

						// 既定の処理へ向かう.
						break;	// breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
NGになる
NGになる

NGになる。

PageSetupDlgの選択結果が、読み取り専用だからPRINTER_ALL_ACCESSはダメなのかな。(個人の感想)

PRINTER_ACCESS_USEにすると、

OKになる
OKになる

OKになる。
ただ、Windows10だと、PRINTER_ALL_ACCESSでもOKになる。
(7はFaxとXPS Document Writerのみ、10は実機プリンタありなので、それもあるかな・・・。)

Sample/winapi/PRINTER_DEFAULTS/PRINTER_DEFAULTS/src/PRINTER_DEFAULTS at master · bg1bgst333/Sample · GitHub