开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 112|回复: 7
收起左侧

[易语言] 易如何一键设置黑白打印或仅彩色打印或者全部颜色打印?

[复制链接]
结帖率:95% (400/419)
发表于 2025-4-8 15:47:21 | 显示全部楼层 |阅读模式   内蒙古自治区乌海市
5精币
易如何一键设置黑白打印或仅彩色打印或者全部颜色打印?


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:60% (3/5)

签到天数: 13 天

发表于 2025-4-8 17:52:37 | 显示全部楼层   河南省焦作市
调用打印机模板(副本),没法设置只能手动
回复

使用道具 举报

结帖率:50% (2/4)

签到天数: 13 天

发表于 2025-4-8 19:33:07 | 显示全部楼层   浙江省杭州市
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
打印机名称文本型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
打印机名称 = 取默认打印机名称 ()  ' 获取当前默认打印机
子程序名返回值类型公开备 注
_按钮_黑白打印_被单击  
设置打印颜色模式 ("黑白")  ' ‌:ml-citation{ref="2,6" data="citationList"}
子程序名返回值类型公开备 注
_按钮_彩色打印_被单击  
设置打印颜色模式 ("彩色")  ' ‌:ml-citation{ref="2,3" data="citationList"}
子程序名返回值类型公开备 注
设置打印颜色模式  
参数名类 型参考可空数组备 注
模式文本型
变量名类 型静态数组备 注
命令行文本型 
' 通过rundll32调用系统打印配置组件‌:ml-citation{ref="5" data="citationList"}
命令行 = "rundll32 printui.dll,PrintUIEntry /y /n """ + 打印机名称 + """ /e /q /h /m """ + 模式 + """"
执行 (, 命令行, 假, #隐藏窗口, )
' 备用方案:修改注册表设置(需管理员权限)
写注册项 ( #本地机器, "SYSTEM\CurrentControlSet\Control\Print\Printers\" + 打印机名称 + "\PrinterDriverData", "ColorMode", 选择 (模式 = "黑白", 2, 1))

回复

使用道具 举报

结帖率:95% (400/419)

签到天数: 16 天

 楼主| 发表于 2025-4-8 23:11:48 | 显示全部楼层   内蒙古自治区乌海市
xizhihan 发表于 2025-4-8 19:33
[e=0].版本 2
.程序集 窗口程序集_启动窗口
.程序集变量 打印机名称, 文本型

非常感谢,
提示“错误(37): 找不到指定的命令/子程序/Dll命令调用名称“取默认打印机名称”。”
另外,如何确定设置是否成功?如何查看当前是什么模式(是黑白还是彩色)?
回复

使用道具 举报

结帖率:50% (2/4)

签到天数: 13 天

发表于 7 天前 | 显示全部楼层   浙江省杭州市
wh1234567 发表于 2025-4-8 23:11
非常感谢,
提示“错误(37): 找不到指定的命令/子程序/Dll命令调用名称“取默认打印机名称”。”
另外 ...
  
DLL命令名返回值类型公开备 注
GetDefaultPrinter逻辑型 
DLL库文件名:
winspool.drv
在DLL库中对应命令名:
GetDefaultPrinterW
参数名类 型传址数组备 注
pszBuffer文本型
pcchBuffer整数型

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
缓冲区大小整数型 
结果逻辑型 
缓冲区大小 = 1024  ' 初始缓冲区大小
打印机名称 = 取空白文本 (缓冲区大小)  ' 预分配空间
结果 = GetDefaultPrinter (打印机名称, 缓冲区大小)
如果真 (结果 = )  ' 如果首次获取失败
' 获取所需缓冲区大小
GetDefaultPrinter (0, 缓冲区大小)
打印机名称 = 取空白文本 (缓冲区大小)  ' 重新分配正确大小
结果 = GetDefaultPrinter (打印机名称, 缓冲区大小)

如果真 (结果)
' 去除字符串中的空字符
打印机名称 = 取文本左边 (打印机名称, 寻找文本 (打印机名称, 字符 (0), , ) - 1)
信息框 ("无法获取默认打印机", 16, "错误", )

以上内容是对那个函数的修补
  
DLL命令名返回值类型公开备 注
OpenPrinter逻辑型 
DLL库文件名:
winspool.drv
在DLL库中对应命令名:
OpenPrinterW
参数名类 型传址数组备 注
pPrinterName文本型
phPrinter整数型
pDefault整数型
DLL命令名返回值类型公开备 注
ClosePrinter逻辑型 
DLL库文件名:
winspool.drv
在DLL库中对应命令名:
ClosePrinter
参数名类 型传址数组备 注
hPrinter整数型
DLL命令名返回值类型公开备 注
GetPrinter逻辑型 
DLL库文件名:
winspool.drv
在DLL库中对应命令名:
GetPrinterW
参数名类 型传址数组备 注
hPrinter整数型
Level整数型
pPrinter字节集
cbBuf整数型
pcbNeeded整数型

子程序名返回值类型公开备 注
取当前颜色模式整数型 
变量名类 型静态数组备 注
hPrinter整数型 
需要大小整数型 
缓冲区字节集 
模式标识整数型 
OpenPrinter (打印机名称, hPrinter, 0)
如果真 (hPrinter = 0)
返回 -1  ' 打开失败

' 第一次调用获取所需缓冲区大小
GetPrinter (hPrinter, 9, { }, 0, 需要大小)
缓冲区 = 取空白字节集 (需要大小)
如果真 (GetPrinter (hPrinter, 9, 缓冲区, 需要大小, 需要大小))
' 解析PRINTER_INFO_9结构中的颜色设置
' 注意:偏移量可能因系统版本不同而变化,这里以Win10为例
模式标识 = 取字节集数据 (缓冲区, #整数型, 21)  ' pDevMode->dmColor
模式标识 = -1

ClosePrinter (hPrinter)
返回 模式标识

这些是验证
  
子程序名返回值类型公开备 注
设置打印颜色模式  
参数名类 型参考可空数组备 注
模式文本型
变量名类 型静态数组备 注
预期值整数型 
当前模式整数型 
预期值 = 选择 (模式 = "黑白", 2, 1)  ' 注册表值对应
' 先尝试注册表修改
写注册项 ( #本地机器, "SYSTEM\CurrentControlSet\Control\Print\Printers\" + 打印机名称 + "\PrinterDriverData", "ColorMode", 预期值)
' 验证设置结果(双重检查)
如果真 (取注册项 ( #本地机器, "SYSTEM\CurrentControlSet\Control\Print\Printers\" + 打印机名称 + "\PrinterDriverData\ColorMode", ) ≠ 预期值)
信息框 ("注册表写入失败!", 16, "错误", )
当前模式 = 取当前颜色模式 ()
判断 (当前模式 = -1)
信息框 ("模式cha询失败,请检查驱动支持", 48, "提示", )
判断 (当前模式 ≠ 预期值)
信息框 ("设置未生效,可能需要重启打印服务", 48, "警告", )
信息框 ("成功设置为" + 模式 + "模式", 64, "成功", )

这是改进后的设置验证流程
  
子程序名返回值类型公开备 注
_按钮_测试_被单击  
变量名类 型静态数组备 注
测试模式整数型 
测试模式 = 取当前颜色模式 ()
判断 (测试模式 = 1)
信息框 ("当前为彩色模式", 0, "测试结果", )
判断 (测试模式 = 2)
信息框 ("当前为黑白模式", 0, "测试结果", )
信息框 ("无法识别的模式:" + 到文本 (测试模式), 16, "错误", )

打印机兼容性测试
回复

使用道具 举报

结帖率:95% (400/419)

签到天数: 16 天

 楼主| 发表于 7 天前 | 显示全部楼层   内蒙古自治区乌海市
xizhihan 发表于 2025-4-9 19:32
[e=0].版本 2
.DLL命令 GetDefaultPrinter, 逻辑型, "winspool.drv", "GetDefaultPrinterW"
    .参数 ps ...

老师能不能上传源码文件?
回复

使用道具 举报

结帖率:50% (2/4)

签到天数: 13 天

发表于 6 天前 | 显示全部楼层   浙江省杭州市
wh1234567 发表于 2025-4-9 20:50
老师能不能上传源码文件?

抱歉,我最近有点忙,只能在手机上写写源码了。
回复

使用道具 举报

结帖率:95% (400/419)

签到天数: 16 天

 楼主| 发表于 6 天前 | 显示全部楼层   内蒙古自治区乌海市
xizhihan 发表于 2025-4-10 19:21
抱歉,我最近有点忙,只能在手机上写写源码了。

写注册项   错误(39): 为某支持库命令提供了过多的参数。

补充内容 (2025-4-10 21:29):
写注册项(#本地机器, "SYSTEM\CurrentControlSet\Control\Print\Printers\" + 打印机名称 + "\PrinterDriverData", "ColorMode", 预期值)  怎么修正?

补充内容 (2025-4-10 21:31):
信息框("设置未生效,可能需要重启打印服务", 48, "警告", )这里如何用易语言重启服务?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表