当前位置: 代码迷 >> 综合 >> API(17)——打印系统开发(54)——关于打印机的api
  详细解决方案

API(17)——打印系统开发(54)——关于打印机的api

热度:100   发布时间:2023-10-01 14:18:30.0

问: 我编的软件中想实现不用打印对话框就修改打印设置,试过很多办法如用DocumentProperties的DM_UPDATE,但未遂,帮帮我!

1、用win32api直接控制。

2、看看下面这段程序:

CPrintSettings m_prn_setting1;
if( !m_prn_setting1.ValidDevMode()) {
ShowMessage("Printer1 not set");//打印机1未设置
return;
}
if(m_prn_setting1.SetPrinterDevice(m_prn_setting1.GetPrinterName()) )
ShowMessage("Global settings for printer1 changed!");//打印机1的全局设置已更改
else
ShowMessage("Error changing global printer1 settings");//更改全局打印机1设置时出错

上述类的成员函数定义:

BOOL CPrinterSettings::SetPrinterDevice(LPCTSTR pszDeviceName) const
{
HANDLE hPrinter;
int ret = 0;
PRINTER_DEFAULTS pd;ZeroMemory(&pd, sizeof(pd)); 
// because of SetPrinter we need all access
pd.DesiredAccess = PRINTER_ALL_ACCESS;
if (OpenPrinter((char *) pszDeviceName, &hPrinter, &pd) == FALSE)
return FALSE;DWORD dwBytesReturned, dwBytesNeeded;
GetPrinter(hPrinter, 2, NULL, 0, &dwBytesNeeded);
PRINTER_INFO_2* p2 = (PRINTER_INFO_2*)GlobalAlloc(GPTR,dwBytesNeeded);
if (GetPrinter(hPrinter, 2, (LPBYTE)p2, dwBytesNeeded,&dwBytesReturned) == 0) {
GlobalFree(p2);
ClosePrinter(hPrinter);
return FALSE;
}
// Lock handle for DEVMODE and copy DEVMODE data to PRINTER_INFO_2.
// (Instead you can change DEVMODE-fields at p2->pDevMode directly)
DEVMODE* pDevMode = (DEVMODE*) GlobalLock(m_hDevMode);
int dwsize = sizeof(*p2->pDevMode);
//CopyMemory(p2->pDevMode,pDevMode, sizeof(*p2->pDevMode));
CopyDevmode(p2->pDevMode,pDevMode);
// same for DEVNAMES.
DEVNAMES* lpDevNames = (LPDEVNAMES)GlobalLock(m_hDevNames);LPTSTR lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset;
// check to see if our settings are valid
ret = DocumentProperties(NULL,hPrinter,lpszDeviceName,NULL,pDevMode,DM_IN_BUFFER);
p2->pSecurityDescriptor = NULL;
//	p2->Attributes = 0;
p2->Priority = 0;
// change settings
if(IDOK == ret)
ret = SetPrinter(hPrinter,2,(LPBYTE)p2,0);
GlobalFree(p2);             // free PRINTER_INFO_2.
GlobalUnlock(m_hDevMode);	
GlobalUnlock(m_hDevNames);
ClosePrinter(hPrinter);
// Notification: settings changed
SendMessage(HWND_BROADCAST, WM_DEVMODECHANGE, 0L,(LPARAM)pszDeviceName);
return ret;
}

3、有关打印的所有windows api:
Api函数名 函数说明 适用范围   W3.x W95 NT
 
AddPrinterConnection
为当前用户建立与打印机的联系
 否
 是
 是
 
StartPagePrinter
 开始打印机
 否
 是
 是
 
StartDoc
 开始打印作业
 是
 是
 是
 
StartDocPrinter
 开始打印作业
 否
 是
 是
 
AddPrintProvidor
 加入一个打印机支持器
 否
 是
 是
 
AddForm
 加入一个打印机窗体
 否
 是
 是
 
AddPort
 加入一个打印机端口
 否
 是
 是
 
AddMonitor
 加入一个打印机管理器
 否
 是
 是
 
ShellExecute
 打开或打印指定文件
 否
 是
 是
 
ClosePrinter
 关闭打开的打印机
 否
 是
 是
 
WritePrinter
 向打印机输出数据
 否
 是
 是
 
AddPrinter
 在打印机服务器上建立一个打印机
 否
 是
 是
 
SetAbortProc
 设备打印作业的放弃函数
 否
 是
 是
 
SetPrinter
 设置打印机信息
 否
 是
 是
 
SetPrinterData
 设置打印机配置
 否
 是
 是
 
SetJob
 设置打印作业信息
 否
 是
 是
 
ResetPrinter
 设置打印数据类型和设备模式值
 否
 是
 是
 
DeletePrinterConnection
 删除与打印机的连接
 否
 是
 是
 
DeletePrintProcessor
 删除打印机处理器
 否
 是
 是
 
DeletePrinterDriver
 删除打印机驱动程序
 否
 是
 是
 
DeletePrinter
 删除打印机服务器上的打印机
 否
 是
 是
 
DeleteMonitor
 删除打印机监视器
 否
 是
 是
 
DeletePrintProvidor
 删除打印机提供者
 否
 是
 是
 
DeleteForm
 删除打印机窗体层差
 否
 是
 是
 
AbortPrinter
 删除打印机缓冲文件
 否
 是
 是
 
DeletePort
 删除打印机端口
 否
 是
 是
 
AddJob
 启动一个打印作业
 否
 是
 是
 
AdvancedDocumentProperties
 进行打印机高级设置
 否
 是
 是
 
PrintDlg
 建立打印文本对话框
 否
 是
 是
 
EnumPrintProcessors
 枚举已安装的打印机处理器
 否
 是
 是
 
EnumPrinterDrivers
 枚举已安装的打印机驱动程序
 否
 是
 是
 
EnumPorts
 枚举可用打印机端口
 否
 是
 是
 
EnumPrintProcessorDatatypes
 枚举打印机所支持的数据类型
 否
 是
 是
 
EnumForms
 枚举所支持的打印机窗体
 否
 是
 是
 
AbortDoc
 终止一项打印作业
 是
 是
 是
 
PrinterProperties
 修改打印机属性
 否
 是
 是
 
AddPrintProcessor
 将打印处理器复制到打印机服务器中
 否
 是
 是
 
AddPrinterDriver
 将打印机驱动程序复制到打印机服务器中
 否
 是
 是
 
PrinterMessageBox
 显示打印作业出错信息
 否
 是
 是
 
ConnectToPrinterDlg
 显示浏览对话并连接网络打印机
 否
 是
 是
 
EndPagePrinter
 结束打印页
 否
 是
 是
 
EndDoc
 结束打印作业
 是
 是
 是
 
EndDocPrinter
 结束打印作业
 否
 是
 是
 
StartPage
 准备打印机接收数据
 是
 是
 是
 
WaitForPrinterChange
 监测打印机或打印机服务器变化
 否
 是
 是
 
GetPrintProcessorDirectory
 获取打印机驱动处理器路径
 否
 是
 是
 
GetPrinterDriver
 获取打印机驱动程序信息
 否
 是
 是
 
GetPrinterDriverDirectory
 获取打印机驱动程序路径
 否
 是
 是
 
GetPrinter
 获取打印机信息
 否
 是
 是
 
GetPrinterData
 获取打印机配置信息
 否
 是
 是
 
GetForm
 获取打印机窗口信息
 否
 是
 是
 
EnumJobs
 获取打印作业信息
 否
 是
 是
 
GetJob
 获取打印作业信息
 否
 是
 是
 
OpenPrinter
 获取指定打印机的句柄
 否
 是
 是
 
ReadPrinter
 读打印机数据
 否
 是
 是
 
DocumentProperties
 配置打印机设置
 否
 是
 是
 
ConfigurePort
 配置打印机端口
 否
 是
 是