关于打印屏幕的问题!

zhuminmao 2005-11-27 11:06:54
程序中用了一段代码:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Command1_Click()
On Error Resume Next
'先截取屏幕
Call keybd_event(vbKeySnapshot, 1, 0, 0)
DoEvents
'放到粘贴板里
' Clipboard.GetData (vbCFBitmap)
'存为临时文件
SavePicture Clipboard.GetData(vbCFBitmap), "c:\temp.bmp"

ShellExecute Me.hwnd, "print", "c:\temp.bmp", "", vbNullString, 0
'删除临时文件
Kill "c:\temp.bmp"
End Sub

问题是:文件已经存储了,"c:\temp.bmp"存在!但就是后面那句“ShellExecute Me.hwnd, "print", "c:\temp.bmp", "", vbNullString, 0”执行后打印机并没有执行打印!

请各位高手指点指点!
...全文
486 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2005-11-28
  • 打赏
  • 举报
回复
翻转比较简单,可以参考:http://blog.csdn.net/northwolves/archive/2004/09/16/106996.aspx
zhuminmao 2005-11-28
  • 打赏
  • 举报
回复
我想了一个方法,不知道可行不?望各位高手指点一下:

多加载一个form2,上面就放置了一个picturebox,用它来加载图片“c:\temp.bmp”:

'先截取屏幕
Call keybd_event(vbKeySnapshot, 1, 0, 0)
DoEvents
'放到粘贴板里
Clipboard.GetData (vbCFBitmap)
'存为临时文件
SavePicture Clipboard.GetData(vbCFBitmap), "c:\temp.bmp"

Form2.Show(里面就一句:Picture1.Picture = LoadPicture("c:\temp.bmp"))
'调打印机设置
CommonDialog1.ShowPrinter
Printer.PaintPicture Form2.Picture1.Picture, 0, 0

把打印机设置改了后仍然不行,打印不全!
打印不完全:是因为保存的屏幕图片的宽度大于长度,与我们平时用的word样式刚好相反!我现在就想在form2上加载图片的时候:能不能把图片翻转90度,这样应该就能打印完全了?
zhuminmao 2005-11-28
  • 打赏
  • 举报
回复
多谢狼行天下大哥!
我用了:Printer.PaintPicture Clipboard.GetData(vbCFBitmap), 0, 0 , Printer.ScaleX(Printer.ScaleWidth, Printer.ScaleMode, vbHimetric), Printer.ScaleY(Printer.ScaleHeight, Printer.ScaleMode, vbHimetric)
它确实是把纸张打印满了,但是显示的内容变形了,而且很多没有打印出来!从平时我们用word的时候可以看出,打印屏幕只有把打印机设置为横向打印,才能打印完全!现在就是不知道该怎么设置有效?
zhuminmao 2005-11-28
  • 打赏
  • 举报
回复
多谢狼行天下大哥!
我用了你的方法,但只能够以picturebox的边界作为对称线来镜像,我想的是能够在原图的基础上旋转90度,还希望多指点指点!
northwolves 2005-11-27
  • 打赏
  • 举报
回复
适应纸张大小

Printer.PaintPicture Clipboard.GetData(vbCFBitmap), 0, 0 , Printer.ScaleX(Printer.ScaleWidth, Printer.ScaleMode, vbHimetric), Printer.ScaleY(Printer.ScaleHeight, Printer.ScaleMode, vbHimetric)
zhuminmao 2005-11-27
  • 打赏
  • 举报
回复
测试结果:

打印可以了,但打印不完全!

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Command1_Click()
On Error Resume Next
'先截取屏幕
Call keybd_event(vbKeySnapshot, 1, 0, 0)
DoEvents
'调打印机设置
CommonDialog1.CancelError = True
CommonDialog1.ShowPrinter

Printer.PaintPicture Clipboard.GetData(vbCFBitmap), 0, 0

我调出打印机设置后,设置了纸张为“横向”,因为竖向打印不完全,但设置后打印出来的还是竖向,不知道是什么问题?
province_ 2005-11-27
  • 打赏
  • 举报
回复
必须是文本文件才能用“PRINT”参数来打印的。
zhuminmao 2005-11-27
  • 打赏
  • 举报
回复
测试:
我在“ShellExecute Me.hwnd, "print", "c:\temp.bmp", "", vbNullString, 0”下面添加了如下代码:

ShellExecute Me.hwnd, "Print", "c:\temp.bmp", "", vbNullString, 0
a = ShellExecute(Me.hwnd, "Print", "c:\temp.bmp", "", vbNullString, 0)
Debug.Print a

输出的a=27,也就是说执行了ShellExecute ,但不知道为什么还是没有操作!
zhuminmao 2005-11-27
  • 打赏
  • 举报
回复
首先多谢各位大哥的指点!
1、试了:ShellExecute Me.hwnd, "print", "c:\temp.bmp", vbNullString, vbNullString, 1
还是不行;
2、我是xp系统,但不知道用 ShellExecute操作bmp文件会有什么问题?是不能执行操作还其它
的问题?请多指点一下;
3、我把“On Error Resume Next”屏蔽掉了,直到程序运行完成,没有出现报错,但就是打印
机没有执行操作(打印机随时测试,是好的);
4、狼行天下大哥的第二个方法,我正在测试中!

再次感谢!
winehero 2005-11-27
  • 打赏
  • 举报
回复
你把错误屏蔽去掉,即将On Error Resume Next这句屏蔽掉,看看那个地方报错,我怀疑
打印之前保存图像之类的就出错了
rainstormmaster 2005-11-27
  • 打赏
  • 举报
回复
你什么系统啊,xp系统的话,用 ShellExecute操作bmp文件会有问题
northwolves 2005-11-27
  • 打赏
  • 举报
回复
or try:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Command1_Click()
On Error Resume Next
'先截取屏幕
Call keybd_event(vbKeySnapshot, 1, 0, 0)
DoEvents
Printer.PaintPicture Clipboard.GetData(vbCFBitmap), 0, 0 ', Printer.ScaleX(Printer.ScaleWidth, Printer.ScaleMode, vbHimetric), Printer.ScaleY(Printer.ScaleHeight, Printer.ScaleMode, vbHimetric)
End Sub
northwolves 2005-11-27
  • 打赏
  • 举报
回复
try:

ShellExecute Me.hwnd, "print", "c:\temp.bmp", vbNullString, vbNullString, 1
zhuminmao 2005-11-27
  • 打赏
  • 举报
回复
我把“Kill "c:\temp.bmp"”这一句去掉了,还是不行啊!
打印机仍然没有操作!
rainstormmaster 2005-11-27
  • 打赏
  • 举报
回复
你把 Kill "c:\temp.bmp"这一句去掉试试
SecureCRT and SecureFX v7.3.3 x86 x64 build 779 注册破解正式版 2015年3月31日官方正式更新发布! 附带了注册机和注册说明,亲测可用 SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输。有流行CRTTelnet客户机的所有特点,包括:自动注册、对不同主机保持不同的特性、打印功能、颜色设置、可变屏幕尺寸、用户定义的键位图和优良的VT100,VT102,VT220和ANSI竞争.能从命令行中运行或从浏览器中运行.其它特点包括文本手稿、易于使用的工具条、用户的键位图编辑器、可定制的ANSI颜色等.SecureCRT的SSH协议支持DES,3DES和RC4密码和密码与RSA鉴别。 SecureFX 支持三种文件传输协议:FTP、SFTP 和 FTP over SSH2。它可以提供安全文件传输。无论您连接的是任何一种操作系统的服务器,它都能提供安全的传输服务。它主要用于Linux操作系统如redhat, ubuntu的客户端文件传输程序,您可以选择利用SFTP通过加密的SSH2实现安全传输,也可以利用FTP进行标准传输。该客户端具有Explorer风格的界面,易于使用,同时提供强大的自动化能力,可以实现自动化的安全文件传输。

7,762

社区成员

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

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