PRINTER_NOTIFY_OPTIONSのpTypesに、PRINTER_NOTIFY_OPTIONS_TYPEの配列を指定し、それぞれのPRINTER_NOTIFY_OPTIONS_TYPEのpFieldsに、PRINTER_NOTIFY_FIELD_XXXや、JOB_NOTIFY_FIELD_XXXなどの定数配列を指定すると、pPNIが取れる。
PRINTER_NOTIFY_OPTIONS_TYPE structure (Winspool.h) - Win32 apps | Microsoft Docs
FindNextPrinterChangeNotification
PRINTER_NOTIFY_OPTIONS_TYPE.cppで、
とすると、
Microsoft Windows [Version 10.0.19043.1415] (c) Microsoft Corporation. All rights reserved. C:\Users\bg1>cd C:\Users\bg1\Documents\test C:\Users\bg1\Documents\test>PRINTER_NOTIFY_OPTIONS_TYPE.exe thread begin before. thread wait before. threadproc begin before. Default Printer: EPSON PX-S06 Series hPrinter: 0x004d723c pTI->m_hHandles[0]: 0x00000150 pTI->m_hHandles[1]: 0x00000154 notify! PRINTER_CHANGE_SET_PRINTER_DRIVER notify! PRINTER_CHANGE_SET_PRINTER PRINTER_CHANGE_ADD_JOB pPNI->Version = 2 pPNI->Flags = 131072 pPNI->Count = 25 pPNI->aData[i].Id = 00000000 pPNI->aData[i].Type = 00000000 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 notify! PRINTER_CHANGE_WRITE_JOB pPNI->Version = 2 pPNI->Flags = 131072 pPNI->Count = 2 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 notify! PRINTER_CHANGE_SET_JOB pPNI->Version = 2 pPNI->Flags = 131072 pPNI->Count = 7 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 notify! PRINTER_CHANGE_WRITE_JOB pPNI->Version = 2 pPNI->Flags = 131072 pPNI->Count = 4 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 notify! PRINTER_CHANGE_WRITE_JOB pPNI->Version = 2 pPNI->Flags = 131072 pPNI->Count = 2 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 notify! PRINTER_CHANGE_WRITE_JOB pPNI->Version = 2 pPNI->Flags = 131072 pPNI->Count = 2 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 notify! PRINTER_CHANGE_SET_JOB pPNI->Version = 2 pPNI->Flags = 131072 pPNI->Count = 1 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 notify! PRINTER_CHANGE_SET_PRINTER PRINTER_CHANGE_SET_JOB PRINTER_CHANGE_DELETE_JOB pPNI->Version = 2 pPNI->Flags = 131072 pPNI->Count = 12 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 pPNI->aData[i].Id = 00000000 pPNI->aData[i].Type = 00000000 pPNI->aData[i].Id = 00000002 pPNI->aData[i].Type = 00000001 threadproc after before. thread close before. C:\Users\bg1\Documents\test>
pPNI自体は確かに取れてる。
ただし、出し方はこれで合ってるかは不明。