各位高手,
在做打印机驱动安装时遇到一个问题,AddPrinterDriver返回1,而且EnumPrinterDrivers也能看到这个驱动,但是AddPrinter总是失败,GetLastError返回1797(The printer driver is unknown.),请问是什么原因,不胜感激。备注: 手动通过inf安装是成功的。现在是要写一个自动安装打印驱动的程序。不惜把把代码贴出来,大家一起看看!
void MyAddPrinter ()
{
DRIVER_INFO_4 DriverInfo;
PRINTER_INFO_2 PrinterInfo; ZEROMEMORY (DriverInfo);
DriverInfo.cVersion = 3;
DriverInfo.pName = _szPrinterDriver;
DriverInfo.pEnvironment = _szEnvironment; // Win32 x86
DriverInfo.pDriverPath = _T("PDUNI.dll");
DriverInfo.pDataFile = _T("printdoc.gpd");
DriverInfo.pConfigFile = _T("unidrvui.dll");
DriverInfo.pHelpFile = _T("unidrv.hlp");
DriverInfo.pDependentFiles = _T("UNIRES.DLL\0PDUI.dll\0PDUNI.dll\0STDNAMES.GPD\0printdoc.gpd\0\0");
DriverInfo.pMonitorName = NULL; // "PJL monitor"
DriverInfo.pDefaultDataType = _szDefaultDataType; // "EMF"
DriverInfo.pszzPreviousNames = _T("\0\0"); // "OldName1\0OldName2\0\0 if (AddPrinterDriver (NULL, 4, (LPBYTE)&DriverInfo)) {
TRACE1("Printer Driver \"%s\" added", _szPrinterDriver);
TraceLn (_T("Printer Driver \"%s\" added"), _szPrinterDriver);
}
else {
LastErrorMessage (_T("Cannot add Printer Driver \"%s\"!"), _szPrinterDriver);
}
ListPrinterDrivers(); ZEROMEMORY (PrinterInfo);
PrinterInfo.pPrinterName = _szPrinterName;
PrinterInfo.pPortName = _szPortName;
PrinterInfo.pDriverName = _szPrinterDriver;
PrinterInfo.pComment = _T("PD Universal Print Solution");
PrinterInfo.pLocation = _T("Anywhere");
PrinterInfo.pPrintProcessor = _szPrintProcessorName;
PrinterInfo.pDatatype = _TEXT("RAW"); if (AddPrinter (NULL, 2, (LPBYTE)&PrinterInfo)) {
TRACE1 ("Printer \"%s\" added", _szPrinterName);
TraceLn (_T("Printer \"%s\" added"), _szPrinterName);
}
else {
LastErrorMessage (_T("Cannot add Printer \"%s\"!"), _szPrinterName);
}
}
在做打印机驱动安装时遇到一个问题,AddPrinterDriver返回1,而且EnumPrinterDrivers也能看到这个驱动,但是AddPrinter总是失败,GetLastError返回1797(The printer driver is unknown.),请问是什么原因,不胜感激。备注: 手动通过inf安装是成功的。现在是要写一个自动安装打印驱动的程序。不惜把把代码贴出来,大家一起看看!
void MyAddPrinter ()
{
DRIVER_INFO_4 DriverInfo;
PRINTER_INFO_2 PrinterInfo; ZEROMEMORY (DriverInfo);
DriverInfo.cVersion = 3;
DriverInfo.pName = _szPrinterDriver;
DriverInfo.pEnvironment = _szEnvironment; // Win32 x86
DriverInfo.pDriverPath = _T("PDUNI.dll");
DriverInfo.pDataFile = _T("printdoc.gpd");
DriverInfo.pConfigFile = _T("unidrvui.dll");
DriverInfo.pHelpFile = _T("unidrv.hlp");
DriverInfo.pDependentFiles = _T("UNIRES.DLL\0PDUI.dll\0PDUNI.dll\0STDNAMES.GPD\0printdoc.gpd\0\0");
DriverInfo.pMonitorName = NULL; // "PJL monitor"
DriverInfo.pDefaultDataType = _szDefaultDataType; // "EMF"
DriverInfo.pszzPreviousNames = _T("\0\0"); // "OldName1\0OldName2\0\0 if (AddPrinterDriver (NULL, 4, (LPBYTE)&DriverInfo)) {
TRACE1("Printer Driver \"%s\" added", _szPrinterDriver);
TraceLn (_T("Printer Driver \"%s\" added"), _szPrinterDriver);
}
else {
LastErrorMessage (_T("Cannot add Printer Driver \"%s\"!"), _szPrinterDriver);
}
ListPrinterDrivers(); ZEROMEMORY (PrinterInfo);
PrinterInfo.pPrinterName = _szPrinterName;
PrinterInfo.pPortName = _szPortName;
PrinterInfo.pDriverName = _szPrinterDriver;
PrinterInfo.pComment = _T("PD Universal Print Solution");
PrinterInfo.pLocation = _T("Anywhere");
PrinterInfo.pPrintProcessor = _szPrintProcessorName;
PrinterInfo.pDatatype = _TEXT("RAW"); if (AddPrinter (NULL, 2, (LPBYTE)&PrinterInfo)) {
TRACE1 ("Printer \"%s\" added", _szPrinterName);
TraceLn (_T("Printer \"%s\" added"), _szPrinterName);
}
else {
LastErrorMessage (_T("Cannot add Printer \"%s\"!"), _szPrinterName);
}
}
解决方案 »
- 一个COM口时可以正常运行,做两个COM口时编译正确,运行就出问题了
- WSAWaitForMultipleEvents 与 socket 的阻塞和非阻塞有没有关系?
- 如何用OpenMP实现FFT按时间基2抽取算法
- 程序出现Runtime Error一般是怎么解决?
- C/S编程中,如果想保存多个客户端的Socket并通信 ,应该用什么方法保存多个Socket呢?
- FindText返回0是什么意思?
- 可不可以实现两个应用程序间的共享内存通信!
- 关于通用对话框上的控件的ID
- 是不是对应于每个ODBC库都要建立一个CRecordSet的派生类阿?
- how??根据访问者的ip地址判断访问者的地理位置
- 在对话框中的静态文本框中画图却什么都不显示
- windows的消息机制具体是按照什么逻辑实现的??
When you manually install a printer via the INF file, the system
performs at least 3 operations:1. AddPortEx to create a custom/local/network port (note that some
standard ports, like LPT1, don't have to be created)
2. AddPrinterDriverEx to install the printer driver DLL, the printer
driver GUI DLL (custom settings dialog), and possibly some data,
configuration and help files as well.
3. AddPrinter应该是少了第一步的原因。
对于存在的端口,我们无需调用AddPortEx,去添加端口。比如“LPT1”。
我这个安装包程序,正是用的 "LPT1:"anyway,还是非常感谢你的参与回答。
还有高手么? 给分析一下~
控制面版中,打印机中安装生成打印机,就是通过指定inf安装的 。 这个是成功的。