📌  相关文章
📜  spooler win10 (1)

📅  最后修改于: 2023-12-03 14:47:32.242000             🧑  作者: Mango

Spooler 在 Windows 10 中的介绍

什么是 Spooler?

Spooler 是 Windows 操作系统中的一个服务,它主要负责管理打印机队列和打印任务。 Spooler 接收来自应用程序的打印任务,将它们存储在磁盘上并与打印机进行通信,以确保打印任务以正确的顺序发送到打印机并正确地打印。 当打印任务太多或打印机出现故障时,Spooler 可以将打印任务暂停或重新排队以确保最佳的打印速度和质量。

Spooler 如何工作?

当一个应用程序将打印任务送给 Spooler 后,Spooler 会将任务保存到磁盘的临时文件夹,并将任务添加到打印队列中。之后,Spooler 会按照打印队列中的任务顺序将任务传送到打印机驱动程序中,以便输出设备可以正确地理解和执行打印任务。

Spooler 组件

Spooler 是由多个组件组成的,其中一些包括:

  • Local Print Provider:执行打印队列管理和传送任务到打印驱动程序的任务。
  • Spooler Service:负责启动和停止 Spooler 服务以及处理打印任务。
  • Spoolsv.exe 进程:运行在后台中,当打印任务被送往 Spooler 时,它会来接收任务并将其转换成打印机可理解的格式。
  • Print Drivers:由打印机供应商提供的软件,使得打印机能够与操作系统通信并正确地执行打印任务。
如何访问 Spooler?

程序开发人员可以使用 Microsoft .NET Framework 中 System.Printing 命名空间来访问 Spooler。此外,任何使用 Windows API 的应用程序都可以与 Spooler 进行通信并管理打印队列和打印任务。使用这些 API,开发人员可以对打印队列中的任务进行管理,同时可以设置或修改打印机的属性。

下面是示例代码,演示如何使用 Win32 API 来查询打印队列中的作业:

#include <windows.h>
#include <winspool.h>
#include <stdio.h>

int main()
{
    // Open the spooler.
    HANDLE hSpooler = OpenPrinter(NULL, NULL, NULL);

    // Query jobs in the queue.
    DWORD cbNeeded, cReturned;
    JOB_INFO_2* pJobs = NULL;
    if (!EnumJobs(hSpooler, 0, JOB_ENUM_STATUS, NULL, 0, &cbNeeded, &cReturned))
    {
        pJobs = (JOB_INFO_2*)malloc(cbNeeded);
        EnumJobs(hSpooler, 0, JOB_ENUM_STATUS, (LPBYTE)pJobs, cbNeeded, &cbNeeded, &cReturned);
    }

    // Print each job name.
    for (DWORD i = 0; i < cReturned; i++)
    {
        printf("%s\n", pJobs[i].pDocument);
    }

    free(pJobs);
    ClosePrinter(hSpooler);
    return 0;
}
结论

Spooler 是 Windows 操作系统中的一个重要组件,它负责打印队列和打印任务的管理,使得打印作业能够在后台中交流和完成。开发人员可以使用 .NET Framework 中的 System.Printing 命名空间或 Win32 API 来访问 Spooler,从而管理打印任务和队列。