更改打印机输出端口问题~

空中猎手 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);
...全文
356 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NetSpider9804040 2005-04-04
  • 打赏
  • 举报
回复
关注加学习。
Friecin 2005-04-04
  • 打赏
  • 举报
回复
对不住兄弟啦~ 俺不懂API打印~:(
ccrun.com 2005-04-04
  • 打赏
  • 举报
回复
捧场.
空中猎手 2005-04-04
  • 打赏
  • 举报
回复
忘了说一下,没打印出来可能是因为我没装打印机的关系。
不过端口的确没改掉。从打印任务管理器里可以看到的
arraden 2005-04-04
  • 打赏
  • 举报
回复
帮你顶,呵呵
猛禽 2005-04-04
  • 打赏
  • 举报
回复
1
用法: rundll32 printui.dll,PrintUIEntry [options] [@commandfile] /a[file] 二进制文件名 /b[name] 基本打印机名 /c[name] 如果操作在远程机器上,unc 机器名 /dl 删除本地打印机 /dn 删除网络打印机连接 /dd 删除打印机驱动程序 /e 显示打印首选项 /f[file] inf 文件或输出文件 /ga 添加每个机器打印机连接 /ge 枚举每个机器打印机连接 /gd 删除每个机器打印机连接 /h[arch] 下列驱动程序体系结构之一,Alpha | Intel | IA64 | x64 /ia 用 inf 文件安装打印机驱动程序 /id 用添加打印机驱动程序向导安装打印机驱动程序 /if 用 inf 文件安装打印机 /ii 用带 inf 文件的添加打印机向导安装打印机 /il 用添加打印机向导安装打印机 /in 添加网络打印机连接 /j[provider] 打印提供程序名称 /k 将测试页打印到指定的打印机,不能安装打印机时的命令组合 /l[path] 打印机驱动程序源路径 /m[model] 打印机驱动程序型号名 /n[name] 打印机名 /o 显示打印机队列查看 /p 显示打印机属性 /q 安静模式,不显示错误信息 /r[port] 端口名 /s 显示服务器属性 /Ss 将打印机设置存到一个文件 /Sr 从一个文件还原打印机设置 储存或还原必须放在命令结尾的打印机设置选项标志: 2 PRINTER_INFO_2 7 PRINTER_INFO_7 c 颜色配置文件 d 打印机数据 s 安全描述符 g 全局 DevMode m 最低设置 u 用户 DevMode r 解决名称冲突 f 强制使用名称 p 解析端口 /u 如果已安装,则使用现有的打印机驱动程序 /t[#] 起始的以零为基础的索引页 /v[version] 驱动程序版本属于下列中的一个: Windows 95、98 和 ME | Windows NT 4.0 | Windows NT 4.0 或 2000 | Windows 2000 或 XP| Windows XP /w 如果指定的驱动程序不在 inf 中,则提示用户 /y 将打印机设为默认打印机 /Xg 获得打印机设置 /Xs 设定打印机设置 /z 不要自动共享这台打印机 /Z 不要自动生成打印机名 /K 更改 /v 和 /h 的意义来将 Windows x64 和 Windows IA64 | Windows NT x86 | Windows NT Alpha_AXP | Windows 4.0 分别接受为 0、1、2、3 /Z 共享这台打印机,只能跟 /if 选项一起使用 /? 帮助信息 @[file] 命令行参数文件 /Mw[message] 确认命令之前显示警告消息 /Mq[message] 确认命令之前显示确认消息 /W[flags] 指定向导(APW 和 APDW)的标志和切换 r 使向导可以从上一页重新启动 /G[flags] 指定全局标志和切换 w 抑制安装程序驱动程序警告 UI (超级静声模式) 例如: 运行服务器属性: rundll32 printui .dll ,PrintUIEntry /s /t1 /n\\machine 运行打印机属性: rundll32 printui .dll ,PrintUIEntry /p /n\\machine\printer 在本地运行添加打印机向导: rundll32 printui .dll ,PrintUIEntry /il 在 \\machine: rundll32 printui .dll ,PrintUIEntry /il /c\\Machine 运行添加打印机向导 运行队列查看: rundll32 printui .dll
1、【接线】+【联机】; 2、双击光盘中【Setup.exe】,弹出安装界面; 3、选择【端口】+【Jolimark FP-570K】驱程——>点选【开始安装】; (请忽略有关【数字签名】提示——>【继续】......) 4、点击【确认】——>【安装完毕】——>点选【退出安装】; 5、设置打印纸张尺寸: 【打印机】文件夹窗口菜单栏——>【文件夹】——>【服务器属性】 ——>【格式】选项卡——>勾选【创建新格式】 ——>在【格式描述:】自定义纸张名称 ——>设定【度量单位:】,包括单位(推荐【公制】)、纸张大小、打印机区域边距 ——>【保存格式】——>【确定】; 7、选定打印纸张尺寸: (1)【打印机】文件夹——>【Jolimark FP-570K】驱程, 右击【属性】 ——>【常规】选项卡 ——>【打印首选项...】——>【布局】选项卡——>【高级】 ——>【纸张/输出】目录,选择相应纸张尺寸; (2)【打印机】文件夹——>【Jolimark FP-570K】驱程, 右击【属性】 ——>【设备设置】选项卡 ——>【按送纸器格式指派】目录,选择相应纸张尺寸; ————————————————————————————————————————————— 在Windows 98&Windows; ME操作系统中安装驱程: ————————————————————————————————————————————— 1、在用USB接口打印前,先安装USB接口驱程,然后按下面操作安装FP-570K打印机驱程; 2、单击【开始】——>【设置】——>【打印机】; 3、【添加打印机】——>【下一步】——>【下一步】; 4、【从软盘安装】——>【浏览】——>打开光盘中【WIN98(WINME)\FP570K.inf】文件; 5、【确定】——>【确定】——>【下一步】...... 6、【下一步】,选择打印端口——>【下一步】,选设为默认打印机 ——>【下一步】,选择【是- 建议打印】——>【完成】。 (请忽略有关【数字签名】提示——>【继续】......) ————————————————————————————————————————————— USB驱程的安装 ————————————————————————————————————————————— 1、连接【USB 电缆】+开启【打印机】,操作系统自动安装。 (在Windows 2000/Windows XP操作系统中) 2、连接【USB 电缆】+开启【打印机】——>系统弹出【添加新硬件【向导窗口,按提示操作。】 ——>点击【下一步】,选择【浏览】 ——>选中FP-570K驱程下【WIN98(WINME)\USBdriver\JMUSBPrint.inf】——>点击【确定】 ——>【下一步】——>单击【确定】,安装完毕。 (在Windows 98/Windows ME操作系统下) ————————————————————————————————————————————— 驱程打印注意事项 ————————————————————————————————————————————— 1、自动卸载打印机驱程: (1)选择【开始】——>【设置】——>【控制面板】打开【添加或删除程序】。 (2)请选中【映美打印机系列卸载程序】并点击【更改/删除】按钮。 (3)在【映美打印机系列卸载程序】界面中选择你要卸载的打印机驱程 2、如何手动删除电脑中已经安装的打印机驱程: (1)单击【开始】——>【设置】——>【控制面板】——>【打印机(或打印机和传真机)】, ——>在【打印机】文件夹窗口中,选中FP-570K打印机驱程——>右击【删除】; (在Windows 98或Windows ME的操作系统下) (2)在【打印机】文件夹窗口菜单栏——>【文件】选项——>选中【服务器属性】, ——>在【打印服务器属性】窗口——>选中【驱动程序】选项卡 ——>选中FP-570K打印机驱程, ——>右击【删除】; (在Windows 2000或Windows XP系统下,执行上述第(1)步、第(2)步所有【删除】操作。) 2、有关连接USB接口打印提示: (1)请使用电脑主机上【相同的USB接口】,连接USB接口打印, 避免系统自动产生FP-570K驱程的副本。 (2)请在【【USB 电缆】+开启【打印机】】的状态下安装USB驱动程序。 避免系统自动产生FP-570K驱程的副本。 (3)在安装驱程过程中,推荐【并口】和【USB口】——>【单独连接打印机】安装。
开启windowsXP空密码共享访问 1.检查guest账户是否开启    XP默认情况下不开启guest账户,因此些为了其他人能浏览你的计算机,请启用guest账户。同时,为了安全请为guest设置密码或相应的权限。当然,也可以为每一台机器设置一个用户名和密码以便计算机之间的互相访问。 2.检查是否拒绝Guest用户从网络访问本机 当你开启了guest账户却还是根本不能访问时,请检查设置是否为拒绝guest从网络访问计算机,因为XP默认是不允许guest从网络登录的,所以即使开了guest也一样不能访问。在开启了系统Guest用户的情况下解除对Guest账号的限制. 点击“开始→运行”,在“运行”对话框中输入“gpedit.msc”,打开组策略编辑器,依次选择“计算机配置→Windows设置→安全设置→本地策略→用户权利指派”,双击“拒绝从网络访问这台计算机”策略,删除里面的“Guest”账号。 这样其他用户就能够用Guest账号通过网络访问使用Windows XP系统的计算机了。并且在双击“从网络访问此计算机”策略中添加“Guest”账号。 3.改网络访问模式    XP默认是把从网络登录的所有用户都按来宾账户处理的,因此即使管理员从网络登录也只具有来宾的权限,若遇到不能访问的情况,请尝试更改网络的访问模式。打开组策略编辑器,依次选择“计算机配置→Windows设置→安全设置→本地策略→安全选项”,双击“网络访问:本地账号的共享和安全模式”策略,将默认设置“仅来宾—本地用户以来宾身份验证”,更改为“经典:本地用户以自己的身份验证”。 这样即使不开启guest,你也可以通过输入本地的账户和密码来登录你要访问的计算机,本地的账户和密码为你要访问的计算机内已经的账户和密码。若访问网络时需要账户和密码,可以通过输入你要访问的计算机内已经的账户和密码来登录。 4.确保Server服务和NetBIOS协议开启 NetBIOS(Network Basic Input Output System,网络基本输入输出系统),是一种应用程序接口(API),系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享。对应的端口是(137,138,139)。137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态137、138端口都属于UDP端口,它们在局域网中相互传输文件信息时,就会发生作用。而138端口的主要作用就是提供NetBIOS环境下的计算机名浏览功能。139端口是一种TCP端口,该端口在你通过网上邻居访问局域网中的共享文件或共享打印机时就能发挥作用;445端口也是一种TCP端口,该端口在Windows 2000 Server或Windows Server 2003系统中发挥的作用与139端口是完全相同的。具体地说:445端口也是提供局域网中文件或打印机共享服务。不过该端口是基于CIFS协议(通用因特网文件 系统协议)工作的,而139端口是基于SMB协议(服务器协议族)对外提供共享服务. 5.一个值得注意的问题    我们可能还会遇到另外一个问题,即当用户的口令为空时,即使你做了上述的所有的更改还是不能进行登录,访问还是会被拒绝。(如用administrator账号,密码为空时)这是因为,在系统“安全选项”中有“账户:使用空白密码的本地账户只允许进行控制台登录”策略默认是启用的,根据Windows XP安全策略中拒绝优先的原则,密码为空的用户通过网络访问使用Windows XP的计算机时便会被禁止。我们只要将这个策略停用即可解决问题。在安全选项中,找到"账户:使用空白密码的本地账户只允许进行控制台登录”项,停用就可以,否则即使开了guest并改成经典模式还是不能登录。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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