mypromise
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2855回复:19

讨论一下virtual print driver的开发

楼主#
更多 发布于:2003-08-06 22:56
虚拟打印机驱动程序的开发是很有挑战意义的,而且也很有挑战,欢迎大家讨论my msn : maybeada@hotmail.com

最新喜欢:

ericyuericyu
一笑而过
tyong_obt
驱动牛犊
驱动牛犊
  • 注册日期2003-07-16
  • 最后登录2005-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-07 08:58
我做过win2000下的,现在想做98下的
你做过吗?还请指教
hwsmith
驱动牛犊
驱动牛犊
  • 注册日期2003-07-24
  • 最后登录2018-05-31
  • 粉丝0
  • 关注0
  • 积分-16分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-07 12:35
我正在做这方面的开发, 原与各位交流. My msn: wuhuang@hotmail.com
Hellboy
驱动牛犊
驱动牛犊
  • 注册日期2003-07-22
  • 最后登录2005-06-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-07 13:24
我正在写一个虚拟打印机驱动 , msn:Archonzhao@hotmail.com
LouYongZhi
驱动牛犊
驱动牛犊
  • 注册日期2003-02-09
  • 最后登录2018-05-31
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望22点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-08 18:17
我也在做虚拟打印驱动。
发现GDI操作比较有把握,而控制函数比较麻烦。
特别是Win98上开发,一些控制函数的参数没有详细说明 :(

所以,一个人(没人教)入门编这个太难。
大家一起来编程讨论,可能会好一些

我的邮箱是LouYongZhi@263.net,欢迎大家指教。
tyong_obt
驱动牛犊
驱动牛犊
  • 注册日期2003-07-16
  • 最后登录2005-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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);

希望对大家有点用
tyong_obt
驱动牛犊
驱动牛犊
  • 注册日期2003-07-16
  • 最后登录2005-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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);
flyingxu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-13
  • 最后登录2007-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-12 12:46
我也正在看这方面的,但是还没有开始写。
我的msn:flyingxu@msn.com
欢迎大家加我
http://webdigest.myrice.com
tfp_unix
驱动小牛
驱动小牛
  • 注册日期2003-07-10
  • 最后登录2008-01-25
  • 粉丝0
  • 关注0
  • 积分639分
  • 威望75点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-21 15:23
me too

tfp10@msn.com
davy_yang
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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);
davy_yang@163.com
Hellboy
驱动牛犊
驱动牛犊
  • 注册日期2003-07-22
  • 最后登录2005-06-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-02 17:29
在每个对打印机操作后面都加个getlasterror看看
xierong008
驱动牛犊
驱动牛犊
  • 注册日期2004-04-14
  • 最后登录2004-04-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-14 16:04
TO davy_yang

我运行了一下你的程序,可以运行,没有错误.但在打印机中看不到有加的打印机.
我愿意与志同道合的朋友交流.
xierong008
驱动牛犊
驱动牛犊
  • 注册日期2004-04-14
  • 最后登录2004-04-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-14 16:07
TO davy_yang

不介意的话,把你的驱动文件给我发过来.我的邮箱xierong008@sohu.com
我愿意与志同道合的朋友交流.
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
13楼#
发布于:2004-04-15 09:18
如果诚心的话,就公开个例子,然后让大家一起来修改下
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
Hellboy
驱动牛犊
驱动牛犊
  • 注册日期2003-07-22
  • 最后登录2005-06-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-04-15 10:19
发一个2000/xp下安装的例子
附件名称/大小 下载次数 最后更新
2004-04-15_PrinterInstaller.rar (562KB)  29
davy_yang
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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\"));

davy_yang@163.com
davy_yang
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分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

davy_yang@163.com
davy_yang
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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

davy_yang@163.com
davy_yang
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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);
}//这里总是说你所指定的语言监视器正在使用!!!
可是我刚安装,什么都没有打印任务。这里如何写!!!????头大了
davy_yang@163.com
davy_yang
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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 )
来枚举出所有的语言监视器呀,还是如何?我用这个函数的时候也总是出错说“向占位程序传送了空的指针”?昏!!!!!!!!!!!!!!!!!!!请高手多多指教!!

davy_yang@163.com
游客

返回顶部