Установить флаг для API диспетчера очереди печати в С#?

В этой статье об API MSDN, там написано:

Немного флага. Если установить флаг PRINTER_NOTIFY_OPTIONS_REFRESH в вызове функции FindNextPrinterChangeNotification, функция предоставит текущие данные для всех полей информации о контролируемом принтере. Функция FindFirstPrinterChangeNotification игнорирует элемент Flags.

Однако я нигде не могу найти 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);
    }
}

Как я могу установить значение dwFlags в соответствии с документацией API? Также в документе есть много других флагов, которые также не имеют значения. Где они хранятся?


person Luke Vo    schedule 11.01.2016    source источник


Ответы (1)


В нижней части документации вы ссылаетесь на:

Заголовок: Winspool.h

Ваша копия этого файла, скорее всего, находится в C:\Program Files (x86)\Windows Kits\8.1\Include\um

Откройте его в текстовом редакторе и найдите константу, вы увидите, что ее значение равно 1.

#define PRINTER_NOTIFY_OPTIONS_REFRESH  0x01

Если у вас нет файлов заголовков, вы можете установить Windows SDK или просто найти в Google "define PRINTER_NOTIFY_OPTIONS_REFRESH"

person Alex K.    schedule 11.01.2016
comment
Прохладный! Спасибо за совет Google. Я попробовал имя флага в Google, но ничего не нашел. - person Luke Vo; 11.01.2016
comment
Могу я задать еще один вопрос? В справке говорится, что DLL-файл называется Spoolss.dll. Однако, если я использую [DllImport("winspool.drv"..., это работает, а [DllImport("Spoolss.dll"... - нет? - person Luke Vo; 11.01.2016
comment
Вот где функция реализована, вы вызываете ее через Winspool.drv, который является клиентским интерфейсом к системе спулера. - person Alex K.; 11.01.2016
comment
Я понимаю. Большое спасибо! - person Luke Vo; 11.01.2016