管理打印机

来源:互联网 发布:不一样的天空知乎 编辑:程序博客网 时间:2024/04/28 08:59

MSDN 2005 -> Win32 和 COM 开发 -> User Interface -> Windows User Experience -> Windows Shell -> Windows Shell -> Shell Programmer's Guide -> Shell Basics -> Managing Printers

Shell API 提供了用于管理联网的打印机的函数。如果文件有关联的print动词,就可以用ShellExecuteEx来打印它。关于打印的更详细讨论,见Printing and Print Spooler。

打印机管理

可以用SHInvokePrinterCommand函数管理系统中的打印机。这个函数可以:

  • 安装打印机
  • 打开打印机
  • 获取打印机属性
  • 创建打印机链接
  • 打印测试页

用ShellExecuteEx打印文件

如果文件类型关联了打印命令,就可以用指定了print动词的ShellExecuteEx来打印这种类型的文件。打印动词通常跟添加了标志让应用程序打印文件的open动词相同。比如说,写字板应用可以打印.txt文件,命令行类似于:

"c:/Program Files/Windows NT/Accessories/Wordpad.exe" /p "%1"

这里的/p标志表示打印文件。

用ShellExecuteEx打印.txt文件时,写字板会打开文件、打印它,然后关闭程序,控制返回到调用者。下面的示例函数使用输入的全限定路径名和ShellExecuteEx函数,通过与文件扩展名关联的打印命令来打印它: 

#include

HINSTANCE PrintFile(LPCTSTR pszFileName)
{
    SHELLEXECUTEINFO ShExecInfo;
    HINSTANCE hInst;

    // Fill the SHELLEXECUTEINFO array.

    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = NULL;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = "print";
    ShExecInfo.lpFile = pszFileName;  // a fully qualified path
    ShExecInfo.lpParameters = NULL;
    ShExecInfo.lpDirectory = NULL;   
    ShExecInfo.nShow = SW_MAXIMIZE;
    ShExecInfo.hInstApp = NULL;

    hInst = ShellExecuteEx(&ShExecInfo);
   
    return hInst;
}

 MSDN 2005 -> Win32 和 COM 开发 -> User Interface -> Windows User Experience -> Windows Shell -> Windows Shell -> Shell Reference -> Shell Functions -> SHInvokePrinterCommand

SHInvokePrinterCommand 函数

语法 

BOOL SHInvokePrinterCommand(HWND hwnd,
    UINT uAction,
    LPCTSTR lpBuf1,
    LPCTSTR lpBuf2,
    BOOL fModal
);

 参数

hwnd 

   用作操作过程中创建的任何窗口或者对话框的父窗口的句柄

uAction

   指定要执行的打印机操作,可以是下列值之一:

   PRINTACTION_DOCUMENTDEFAULTS

   仅用于Windows NT。显示名字由lpBuf1指定的打印机的默认文档属性。lpBuf2被忽略。

   PRINTACTION_NETINSTALL

   安装名字由lpBuf1指定的网络打印机。lpBuf2被忽略。

   PRINTACTION_NETINSTALLLINK

   创建到名字由lpBuf1指定的网络打印机的快捷方式。lpBuf2指定快捷方式放置到的文件夹路径。lpBuf1指定的网络打印机必须已经安装到了本地计算机。

   PRINTACTION_OPEN

   打开名字由lpBuf1指定的打印机。lpBuf2被忽略。

   PRINTACTION_OPENNETPRN

   打开名字由lpBuf1指定的网络打印机。lpBuf2被忽略。

   PRINTACTION_PROPERTIES

   显示名字由lpBuf1指定的打印机的属性。lpBuf2可以为NULL或者specify。(这里specify是什么意思?)

   PRINTACTION_SERVERPROPERTIES

   仅用于Windows NT。显示名字由lpBuf1指定的打印机服务器属性。lpBuf2被忽略。

   PRINTACTION_TESTPAGE

   要求由lpBuf1指定的打印机打印测试页。lpBuf2被忽略。

lpBuf1

   包含打印机命令额外信息的以空字符结束的字符串地址。本参数包含的信息由uAction的值决定。

lpBuf2

   包含打印机命令额外信息的以空字符结束的字符串地址。本参数包含的信息由uAction的值决定。

fModal

   指定函数应该在发起命令后返回,还是等命令执行完成后才返回。非零表示直到命令执行完成后才返回,零表示发起命令后就返回。

返回值

   如果成功返回非零,否则返回零。

备注

   lpBuf1用于指定打印机名称时,可以是本地打印机名称,或者是网络打印机的服务器名和共享名。指定网络打印机名字的时候,格式必须是“//<服务器名><共享打印机名>”。

   本函数在4.71及更新版本的Shell中实现。为保持与此前版本Shell的兼容性,不应该显式调用本函数,而应该用LoadLibraryGetProcAddress来获取本函数地址。

函数信息

  • 最小DLL版本: 4.71或者更新版本的shell32.dll
  • 定制实现:   
  • 头文件:      shellapi.h
  • 导入库:      shell32.lib
  • 最小操作系统:Windows 2000,带Internet Explorer 4.0的Windows NT 4.0,Windows 98,带Internet Explorer 4.0的Windows 95
  • Unicode:     有ANSI和Unicode版本

菊子曰 这就是菊子曰啦!