阅读:2855回复:19
讨论一下virtual print driver的开发
虚拟打印机驱动程序的开发是很有挑战意义的,而且也很有挑战,欢迎大家讨论my msn : maybeada@hotmail.com
|
|
最新喜欢:ericyu
|
沙发#
发布于:2003-08-07 08:58
我做过win2000下的,现在想做98下的
你做过吗?还请指教 |
|
板凳#
发布于:2003-08-07 12:35
我正在做这方面的开发, 原与各位交流. My msn: wuhuang@hotmail.com
|
|
地板#
发布于:2003-08-07 13:24
我正在写一个虚拟打印机驱动 , msn:Archonzhao@hotmail.com
|
|
地下室#
发布于:2003-08-08 18:17
我也在做虚拟打印驱动。
发现GDI操作比较有把握,而控制函数比较麻烦。 特别是Win98上开发,一些控制函数的参数没有详细说明 :( 所以,一个人(没人教)入门编这个太难。 大家一起来编程讨论,可能会好一些 我的邮箱是LouYongZhi@263.net,欢迎大家指教。 |
|
5楼#
发布于:2003-08-11 13:26
98下的代码如下:(我在网上找到的)
PRINTER_INFO_2 pi2; DRIVER_INFO_2 di2; HANDLE hPrinter; ZeroMemory(&di2, sizeof(DRIVER_INFO_2)); di2.cVersion = 1024; di2.pName = \"HP Laserjet 4Si\"; di2.pEnvironment = \"Windows 4.0\"; di2.pDriverPath = \"c:\\\\windows\\\\system\\\\hppcl5ms.drv\"; di2.pDataFile = \"c:\\\\windows\\\\system\\\\hppcl5ms.drv\"; di2.pConfigFile = \"c:\\\\windows\\\\system\\\\hppcl5ms.drv\"; AddPrinterDriver(NULL, 2, (LPBYTE)&di2); ZeroMemory(&pi2, sizeof(PRINTER_INFO_2)); pi2.pPrinterName = \"HP Laserjet 4Si\"; pi2.pPortName = \"\\\\\\\\server\\\\print_share\"; pi2.pDriverName = \"HP Laserjet 4Si\"; pi2.pPrintProcessor = \"WinPrint\"; pi2.pDatatype = \"EMF\"; hPrinter = AddPrinter(NULL, 2, (LPBYTE)&pi2); ClosePrinter(hPrinter); 希望对大家有点用 |
|
6楼#
发布于:2003-08-11 13:35
谁用过AddPrinterDriver,是在2000下添加指定的打印机驱动程序(虚拟)
我的代码如下:(但不能添加驱动,还望大家来帮帮我) DRIVER_INFO_3 di3; char *lpBuffer=new char[MAX_PATH]; char *lpDriverPath=new char[MAX_PATH]; char *lpDataFilePath=new char[MAX_PATH]; char *lpConfigFilePath=new char[MAX_PATH]; char *lpDependecy=new char[MAX_PATH]; DWORD uSize; GetPrinterDriverDirectory(NULL,\"Windows NT x86\",1,(LPBYTE)lpBuffer,150,&uSize); lstrcpy(_TEXT(lpDriverPath),_TEXT(lpBuffer)); lstrcat(_TEXT(lpDriverPath),_TEXT(\"\\\\vprinter.dll\")); lstrcpy(_TEXT(lpDataFilePath),_TEXT(lpBuffer)); lstrcat(_TEXT(lpDataFilePath),_TEXT(\"\\\\vprinter.GPD\")); lstrcpy(_TEXT(lpConfigFilePath),_TEXT(lpBuffer)); lstrcat(_TEXT(lpConfigFilePath),_TEXT(\"\\\\vprinter.inf\")); lstrcat(lpDependecy,_TEXT(\"stdnames.gpd\\0vprinter.dll\\0vprinter.inf\\0vprinter.GPD\\0\\0\")); ZeroMemory(&di3, sizeof(DRIVER_INFO_3)); di3.cVersion = 3; di3.pName =_TEXT(\"Virtual Printer\");//HP LaserJet III di3.pEnvironment = Environment; di3.pEnvironment =_TEXT(\"Windows NT x86\"); di3.pDriverPath = lpDriverPath; di3.pDataFile =lpDataFilePath; di3.pConfigFile =lpConfigFilePath; di3.pDependentFiles = lpDependecy; di3.pHelpFile = NULL; di3.pMonitorName = NULL; di3.pDefaultDataType = _TEXT(\"RAW\"); AddPrinterDriver(NULL, 3, (LPBYTE)&di3); |
|
7楼#
发布于:2003-08-12 12:46
我也正在看这方面的,但是还没有开始写。
我的msn:flyingxu@msn.com 欢迎大家加我 |
|
|
8楼#
发布于:2003-08-21 15:23
me too
tfp10@msn.com |
|
9楼#
发布于:2004-04-01 14:10
各位高手,我也是这样加的,可是也加不上。请多多指教,代码如下(XP下):
PRINTER_INFO_2 pi2; DRIVER_INFO_3 di3; HANDLE hPrinter; char* Environment=_TEXT("Windows NT x86"); char lpDriverPath[MAX_PATH]; char lpBuffer[MAX_PATH]; DWORD uSize=0; CString str; DWORD dwErr; BOOL b; GetPrinterDriverDirectory(NULL,Environment,1,(LPBYTE)lpBuffer,MAX_PATH,&uSize); str.Format("lpBuffer is %s\n",lpBuffer); AfxMessageBox(str); lstrcpy(_TEXT(lpDriverPath),_TEXT(lpBuffer)); lstrcat(_TEXT(lpDriverPath),_TEXT("\\UNIDRV.DLL")); char lpDataFilePath[MAX_PATH]; lstrcpy(_TEXT(lpDataFilePath),_TEXT(lpBuffer)); lstrcat(_TEXT(lpDataFilePath),_TEXT("\\Dragon.GPD")); char lpConfigFilePath[MAX_PATH]; lstrcpy(_TEXT(lpConfigFilePath),_TEXT(lpBuffer)); lstrcat(_TEXT(lpConfigFilePath),_TEXT("\\UNIDRVUI.DLL")); char lpHelpFilePath[MAX_PATH]; lstrcpy(_TEXT(lpHelpFilePath),_TEXT(lpBuffer)); lstrcat(_TEXT(lpHelpFilePath),_TEXT("\\UNIDRV.HLP")); char lpDependecy[MAX_PATH]; memset(lpDependecy,0,sizeof(lpDependecy)); lstrcat(lpDependecy,_TEXT("UNIRES.DLL\\0STDNAMES.GPD\\0Dragon.INI\\0dragon.dll\\0\\0")); ZeroMemory(&di3, sizeof(DRIVER_INFO_3)); di3.cVersion = 0x3; di3.pName =_TEXT("DRoad USB Printer"); di3.pEnvironment = Environment; di3.pDriverPath = lpDriverPath; di3.pDataFile =lpDataFilePath; di3.pConfigFile =lpConfigFilePath; di3.pDependentFiles = lpDependecy; di3.pHelpFile = lpHelpFilePath; di3.pMonitorName = NULL; di3.pDefaultDataType = _TEXT("RAW"); //di3.pszzPreviousNames = _TEXT("OldName1\\0OldName2\\0\\0"); AddPrinterDriver(NULL, 3, (LPBYTE)&di3) ZeroMemory(&pi2, sizeof(PRINTER_INFO_2)); pi2.pServerName=NULL; pi2.pPrinterName = _TEXT("DRoad USB Printer"); pi2.pPortName = _TEXT("USB001"); pi2.pDriverName = _TEXT("DRoad USB Printer");pi2.pPrintProcessor = _TEXT("WinPrint"); pi2.pDatatype = _TEXT("RAW"); pi2.AveragePPM = 400; hPrinter = AddPrinter(NULL, 2, (LPBYTE)&pi2); ClosePrinter(hPrinter); |
|
|
10楼#
发布于:2004-04-02 17:29
在每个对打印机操作后面都加个getlasterror看看
|
|
11楼#
发布于:2004-04-14 16:04
TO davy_yang
我运行了一下你的程序,可以运行,没有错误.但在打印机中看不到有加的打印机. |
|
|
12楼#
发布于:2004-04-14 16:07
TO davy_yang
不介意的话,把你的驱动文件给我发过来.我的邮箱xierong008@sohu.com |
|
|
13楼#
发布于:2004-04-15 09:18
如果诚心的话,就公开个例子,然后让大家一起来修改下
|
|
|
14楼#
发布于:2004-04-15 10:19
发一个2000/xp下安装的例子
|
|
|
15楼#
发布于:2004-04-29 11:14
to:xierong008
对不起这里回复没有信通知,好久没来了。 我的问题已经解决。 di3.pDependentFiles=“UNIRES.DLL\\0STDNAMES.GPD\\0Dragon.INI\\0dragon.dll\\0\\0” 不要用这段该死的代码就ok了 char lpDependecy[MAX_PATH]; memset(lpDependecy,0,sizeof(lpDependecy)); lstrcat(lpDependecy,_TEXT(\"UNIRES.DLL\\0STDNAMES.GPD\\0Dragon.INI\\0dragon.dll\\0\\0\")); |
|
|
16楼#
发布于:2004-04-29 11:14
to:xierong008
对不起这里回复没有信通知,好久没来了。 我的问题已经解决。 di3.pDependentFiles=“UNIRES.DLL\\0STDNAMES.GPD\\0Dragon.INI\\0dragon.dll\\0\\0” 不要用这段该死的代码就ok了 char lpDependecy[MAX_PATH]; memset(lpDependecy,0,sizeof(lpDependecy)); lstrcat(lpDependecy,_TEXT(\"UNIRES.DLL\\0STDNAMES.GPD\\0Dragon.INI\\0dragon.dll\\0\\0\")); 我的msn:davy_yang2163.com |
|
|
17楼#
发布于:2004-04-29 11:16
to:xierong008
对不起这里回复没有信通知,好久没来了。 我的问题已经解决。直接对结构体付值: di3.pDependentFiles=“UNIRES.DLL\\0STDNAMES.GPD\\0Dragon.INI\\0dragon.dll\\0\\0” 不要用下面这段该死的代码就ok了 char lpDependecy[MAX_PATH]; memset(lpDependecy,0,sizeof(lpDependecy)); lstrcat(lpDependecy,_TEXT(\"UNIRES.DLL\\0STDNAMES.GPD\\0Dragon.INI\\0dragon.dll\\0\\0\")); 我的msn:davy_yang@163.com |
|
|
18楼#
发布于:2004-04-29 14:12
请问各路大侠:
是不是删除deleteport,deletemonitor, deleteprinter,deleteprinterdriver需要有顺序的删除呢?我原来用的顺序是OpenPrinter->DeletePrinter ->ClosePrinter->DeletePrinterDriver.我要删除port,那要在哪里插入deleteport呢,要删除language monitor需要在哪里插入deletemonitor呢? 我的代码如下,可以删除打印机,可是删除不了monitor,在注册表里还有monitor language项没有删除,郁闷了: if (OpenPrinter(\"D-ROAD Dragon J16 Printer\",&hPrinter,&prtdft)) { if(!DeletePrinter(hPrinter)) { dwErr = GetLastError(); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,dwErr,NULL,buffer,sizeof(buffer),NULL); MessageBox(buffer); } ClosePrinter(hPrinter); if(!DeletePrinterDriver(NULL,\"Windows NT x86\",\"D-ROAD Dragon J16 Printer\")) { dwErr = GetLastError(); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,dwErr,NULL,buffer,sizeof(buffer),NULL); MessageBox(buffer); } } if(!DeleteMonitor( NULL, // server name \"Windows NT x86\", // environment name \"DRAGON Language Monitor\" // monitor name )) { dwErr = GetLastError(); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,dwErr,NULL,buffer,sizeof(buffer),NULL); MessageBox(buffer); }//这里总是说你所指定的语言监视器正在使用!!! 可是我刚安装,什么都没有打印任务。这里如何写!!!????头大了 |
|
|
19楼#
发布于:2004-04-29 14:17
是不是要用
EnumMonitors( NULL, // server name 1, // information level lpMonitors, // monitor information buffer sizeof(lpMonitors), // size of monitor information buffer lpcbNeeded, // bytes received or required lpcReturned // number of monitors received ) 来枚举出所有的语言监视器呀,还是如何?我用这个函数的时候也总是出错说“向占位程序传送了空的指针”?昏!!!!!!!!!!!!!!!!!!!请高手多多指教!! |
|
|