更改打印机输出端口问题~
空中猎手 2005-04-04 02:05:00 TPrinter *prn = Printer();
char Port2[] = "FILE:";
char Device[256] = {0},Driver[256] = {0},Port = {0};
Handle dMode;
prn->GetPrinterA(Device,Driver,Port,dMode);
prn->SetPrinterA(Device,Driver,Port2,dMode);
Form1->Print();
如果打印机目前的端口是LPT1,那么上面的程序可以正常工作。
如果打印机目前的端口是附LPT1以外的其它端口(Port2改成LPT1),那么就打印不到新端口上,有谁知道是怎么回事么?
我希望实现从不同的端口上输出打印内容。
下面是我用API来设置打印端口的代码,虽然SetPrinter的返回值是true,但好像端口还是没改过来。而且打印也好像总是提示“设置无法正确连接,是否重试”
//-----------------------------------------------------------------------
DWORD cByteNeeded,cByteUsed;
PRINTER_INFO_2 *pPrinterInfo = NULL;
PRINTER_DEFAULTS PrnDef;
memset(&PrnDef,0,sizeof(PRINTER_DEFAULTS));
PrnDef.DesiredAccess = PRINTER_ALL_ACCESS;
/* Get the buffer size needed. */
HANDLE hPrn;
int i = OpenPrinter("HP Color LaserJet PS",&hPrn,&PrnDef);
if (!GetPrinter(hPrn, 2, NULL, 0, &cByteNeeded))
{
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
return;
}
pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);
if (!(pPrinterInfo))
/* Failure to allocate memory. */
return;
/* Get the printer information. */
if (!GetPrinter(hPrn,
2,
(LPSTR)pPrinterInfo,
cByteNeeded,
&cByteUsed))
{
/* Failure to access the printer. */
free(pPrinterInfo);
pPrinterInfo = NULL;
return;
}
strcpy(pPrinterInfo->pPortName,"pdf:");//pdf:是我自定义的端口
//返回值是true,但好像端口没有改过来。
SetPrinter(hPrn,0,(LPBYTE)pPrinterInfo,0);
//这里是打印了,乱写,反正没法打印出来
ADDJOB_INFO_1 *info;
BYTE data[1000];
info = (ADDJOB_INFO_1 *)data;
DWORD SizeNeeded;
if(AddJob(hPrinter,1,data,sizeof(data),&SizeNeeded))
if(CopyFile("D:\\TOPDF\\PrintToFile\\input.ps",info->Path,true))
if(ScheduleJob(hPrinter,info->JobId))
ShowMessage("OK");
free(pPrinterInfo);
ClosePrinter(hPrn);