在 C# 中为 Print Spooler API 设置标志?

Set flag for Print Spooler API in C#?

在这个 MSDN API Article 中,它说:

A bit flag. If you set the PRINTER_NOTIFY_OPTIONS_REFRESH flag in a call to the FindNextPrinterChangeNotification function, the function provides current data for all monitored printer information fields. The FindFirstPrinterChangeNotification function ignores the Flags member.

但是,我找不到 API 的任何地方告诉标志 PRINTER_NOTIFY_OPTIONS_REFRESH 的值。这是我的结构:

[StructLayout(LayoutKind.Sequential)]
public class PRINTER_NOTIFY_OPTIONS
{
    public int dwVersion = 2;
    public int dwFlags;
    public int Count = 2;
    public IntPtr lpTypes;

    public PRINTER_NOTIFY_OPTIONS()
    {
        int bytesNeeded = (2 + PRINTER_NOTIFY_OPTIONS_TYPE.JOB_FIELDS_COUNT + PRINTER_NOTIFY_OPTIONS_TYPE.PRINTER_FIELDS_COUNT) * 2;
        PRINTER_NOTIFY_OPTIONS_TYPE pJobTypes = new PRINTER_NOTIFY_OPTIONS_TYPE();
        lpTypes = Marshal.AllocHGlobal(bytesNeeded);
        Marshal.StructureToPtr(pJobTypes, lpTypes, true);
    }
}

如何根据 API 文档设置 dwFlags 值?文档中还有许多其他标志也没有价值。它们存储在哪里?

在文档底部提到您:

Header: Winspool.h

您的此文件副本可能位于 C:\Program Files (x86)\Windows Kits.1\Include\um

在文本编辑器中打开它并搜索常量,您将看到它的值为 1。

#define PRINTER_NOTIFY_OPTIONS_REFRESH  0x01

如果您没有 header 文件,您可以安装 Windows SDK 或 google for "define PRINTER_NOTIFY_OPTIONS_REFRESH"