关于打印机的api

yxjdyn 2000-07-22 09:19:00
我编的软件中想实现不用打印对话框就修改打印设置,试过很多办法如用DocumentProperties的DM_UPDATE,但未遂,帮帮我!
...全文
487 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
meijg 2000-07-23
  • 打赏
  • 举报
回复
有关打印的所有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
配置打印机端口





 
zsr 2000-07-22
  • 打赏
  • 举报
回复
用win32api直接控制。
UserReg 2000-07-22
  • 打赏
  • 举报
回复
看看下面这段程序:
CPrintSettings m_prn_setting1;
if( !m_prn_setting1.ValidDevMode()) {
ShowMessage("Printer1 not set");
return;
}
if(m_prn_setting1.SetPrinterDevice(m_prn_setting1.GetPrinterName()) )
ShowMessage("Global settings for printer1 changed!");
else
ShowMessage("Error changing global printer1 settings");


上述类的成员函数定义:

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;
}
Michaelyfj 2000-07-22
  • 打赏
  • 举报
回复
你说的修改打印设置包括有哪些!

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧