棉纺织技术期刊2017.8:windows打印对话框怎么屏蔽“打印份数”选项

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 03:19:00
windows打印对话框怎么屏蔽“打印份数”选项
悬赏分:200 - 离问题结束还有 5 天 15 小时
请问windows的打印对话框怎么去掉“打印份数”那个选项?编程、改注册表,什么方法都行。只要在打印时不再显示“打印份数”就行了。
要求设置必须对windows所有能打印的地方都起作用,而不是只对IE或word之类的软件起作用。
请说出详细的步骤,如果是编程,最好是能给出完整的程序,至少是重要的语句,谢谢。
谢谢楼下的回答,这么做肯定是有需要,要求所有的打印一次只能打印一份,不能多份打印。

使用一个守护进程,查找出现的打印窗口,然后向窗口发消息,隐藏“打印份数”相关的控件。
以下是相关的资料
查找控件的delphi示例,我想既然delphi能做到,c++肯定也没问题
http://www.yuhuatel.com/yang/news/detail.asp?id=647
var hWindow:hwnd;
begin
hWindow:=FindWindowEx(Handle,0,'TEdit',nil);//参数为0表示从头开始查找
while hWindow<>0 do
begin
ListBox1.Lines.Add(Format('%x',[hWindow]));//将句柄放入ListBox
hWindow:=FindWindowEx(Handle,hWindow,'TEdit',nil);//查找下一个
end;
end;
还可以用 form1.componets[i]来遍历
获得一个窗口的句柄后,如何遍历该窗口的所有控件,如何获得该窗口中'取消'按钮的句柄,如何获得该窗口中'确认'按钮的句柄?

var
hh:thandle;
sch:array[0..255] of char
begin
hh:=findwindow(nil,窗中标题);
bringwindowtotop(hh);
enumchildwindows(hh,@findenum,integer(@sch[0])
end;
function findenum(hh:integer;lparam:longint):boolean;stdcall;
var
buffer:pchar;
begin
result:=true;
getmem(buffer,256);
getwindowtext(hh,buffer,256);
if buffer='确定' then
begin
end;
if buffer='取消' then
begin
end;

end;

使窗体右上角的X按钮失效
http://www.yesky.com/319/202319.shtml
窗体右上角的X按钮通常用来关闭一个程序,这个小X按钮实际上是和系统菜单的“关闭”菜单项关联在一起的,什么?不知道什么是系统菜单,系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其中好象有“恢复”、“移动”、“最大化”、“最小化”、“关闭”这么几个按钮。这个菜单用普通的方法是不能编辑和改变的,但是我们可以通过API函数GetSystemMenu来得到它的句柄,然后通过菜单相关的API函数就能改变它了,下面一起看看怎么做吧。

为了学习方便,下面先给出源码,并且已经作了详细的中文注释:

-------------------------------------------
使窗体右上角的X按钮失效
-------------------------------------------
程序说明:
本例利用API函数GetSystemMenu得到系统菜单的句柄
X按钮是系统菜单的一菜单项,然后用RemoveMenu函数
删去这一菜单项,也就是使X按钮失效了。
-------------------------------------------
【VB声明】

Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

【说明】
取得指定窗口的系统菜单的句柄。在vb环境,“系统菜单”的正式名称为“控制菜单”,即单击窗口左上角的控制框时出现的菜单

【返回值】
Long,如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单)

【备注】
在vb里使用:系统菜单会向窗口发送一条WM_SYSCOMMAND消息,而不是WM_COMMAND消息

【参数表】
hwnd ----------- Long,窗口的句柄

bRevert -------- Long,如设为TRUE,表示接收原始的系统菜单

Private Declare Function GetSystemMenu Lib "user32" ( _
ByVal hwnd As Integer, _
ByVal bRevert As Integer _
) As Integer

【VB声明】

Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

VC小知识总结
http://www.lzvw.com/bbs/PostView.asp?BoardID=19&imageID=248&page=1&imageNum=88&PostPage=1
11如何使窗口不可见?
很简单,用SW_HIDE 隐藏窗口,可以结合 FindWindow,ShowWindow控制.
另外这个页面还有很多内容可以参考

其它相关资料
VC++:编程技巧
http://www.rosipay.com/4/2627.html
关于调整控件大小的一个问题
http://142.club.yesky.com/bbs/jsp/view.jsp?articleID=2150043&skin=0&forumID=145

这个目标不合实际,设想你如果不告诉打印机给你打印几份人家如何给你打印呢?我不知道你是出于什么目的问这个问题的。

这个不好改,真的.

要替换WINDOWS的系统DLL.

个人觉得是十分复杂的.

还有个方法,有一个软件,叫什么exespy什么来着,能看EXE和DLL里的资源,然后你再查到系统对话框是在哪个DLL中的,用那个软件一读,找到你想改动的,用那个软件也可以改动.

高级→ 打印默认

如果不使用专用软件打印,不可能全封掉的.
并不是改了系统那一个就行的,可调节部分在很多程序里都能改,这些无法全部列出,也就无法全部封锁.
自己做的VB程序里直接就能设置调节.