Setel tanda untuk Print Spooler API di C#?

Dalam Artikel API MSDN, dikatakan:

Sedikit bendera. Jika Anda menyetel tanda PRINTER_NOTIFY_OPTIONS_REFRESH dalam panggilan ke fungsi FindNextPrinterChangeNotification, fungsi tersebut menyediakan data terkini untuk semua bidang informasi printer yang dipantau. Fungsi FindFirstPrinterChangeNotification mengabaikan anggota Flags.

Namun, saya tidak dapat menemukan API mana pun yang menunjukkan nilai bendera PRINTER_NOTIFY_OPTIONS_REFRESH. Ini adalah struktur saya:

[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);
    }
}

Bagaimana cara menetapkan nilai dwFlags sesuai dengan dokumentasi API? Juga ada banyak tanda lain dalam dokumen yang tidak memiliki nilai juga. Di mana mereka disimpan?


person Luke Vo    schedule 11.01.2016    source sumber


Jawaban (1)


Di bagian bawah dokumentasi Anda dirujuk:

Tajuk: Winspool.h

Salinan file ini mungkin terletak di C:\Program Files (x86)\Windows Kits\8.1\Include\um

Buka di editor teks dan cari konstanta, Anda akan melihat nilainya adalah 1.

#define PRINTER_NOTIFY_OPTIONS_REFRESH  0x01

Jika Anda tidak memiliki file header, Anda dapat menginstal Windows SDK atau cukup google untuk "define PRINTER_NOTIFY_OPTIONS_REFRESH"

person Alex K.    schedule 11.01.2016
comment
Dingin! Terima kasih atas tip Google. Saya mencoba nama bendera di Google tetapi tidak menemukan apa pun. - person Luke Vo; 11.01.2016
comment
Bisakah saya mengajukan satu pertanyaan lagi? Di referensinya tertulis file DLL adalah Spoolss.dll. Namun, jika saya menggunakan [DllImport("winspool.drv"..., berhasil, tetapi [DllImport("Spoolss.dll"... tidak? - person Luke Vo; 11.01.2016
comment
Di situlah fungsi tersebut diimplementasikan, Anda memanggilnya melalui Winspool.drv yang merupakan antarmuka klien ke sistem spooler - person Alex K.; 11.01.2016
comment
Jadi begitu. Terima kasih banyak! - person Luke Vo; 11.01.2016