怎样截取Form1隐藏后屏幕上的图象

laisiwei 2004-04-15 10:18:47
怎样截取Form1隐藏后屏幕上的图象。当然不能把Form1设置为隐藏
...全文
59 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryuginka 2004-04-18
  • 打赏
  • 举报
回复
to MSTOP(陈建华(东莞立晨企资)) ( )
我把你的程序拷贝下来运行,怎么一运行就无法保存图片,看不到那个保存按钮
laisiwei 2004-04-18
  • 打赏
  • 举报
回复
同意KongNan(孔南)
laisiwei 2004-04-17
  • 打赏
  • 举报
回复
up
孔南 2004-04-17
  • 打赏
  • 举报
回复
webmasterss(性情中人) ,隐藏先不说,PrintScreen可以用SendKey发送吗?
pigpag 2004-04-17
  • 打赏
  • 举报
回复
等,给你写一段试试

不过只能在XP/2003下使用
laisiwei 2004-04-17
  • 打赏
  • 举报
回复
up
laisiwei 2004-04-16
  • 打赏
  • 举报
回复
MSTOP(陈建华(东莞立晨企资)) 的代码速度的确快,不过窗口还是隐藏过了,我的机子上很明显
有没有更好的办法?
wumy_ld 2004-04-16
  • 打赏
  • 举报
回复
原来是要抓整个屏幕,我还以为只是抓被窗体盖住的那部分。
webmasterss 2004-04-16
  • 打赏
  • 举报
回复
我估计是我理解错了,是截屏吗?sendkey,模拟按下print screen键,然后读取剪贴板内容到你想要的地方!
华芸智森 2004-04-16
  • 打赏
  • 举报
回复
Option Explicit

PRIVATE Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
PRIVATE Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
PRIVATE Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long


Sub SetPicture()
picCopy.Visible = True
If picCopy.Width <= Picture1.ScaleWidth Then
picCopy.Left = (Picture1.ScaleWidth - picCopy.Width) / 2
Else
picCopy.Left = 0
HScroll1.Min = 0
HScroll1.Value = 0
HScroll1.Max = picCopy.Width - Picture1.ScaleWidth
HScroll1.SmallChange = HScroll1.Max / 100
HScroll1.LargeChange = HScroll1.Max / 10
End If

If picCopy.Height <= Picture1.ScaleHeight Then
picCopy.Top = (Picture1.ScaleHeight - picCopy.Height) / 2
Else
picCopy.Top = 0
VScroll1.Min = 0
VScroll1.Value = 0
VScroll1.Max = picCopy.Height - Picture1.ScaleHeight
VScroll1.SmallChange = VScroll1.Max / 100
VScroll1.LargeChange = VScroll1.Max / 10
End If
End Sub

Private Sub Form_Resize()
On Error Resume Next
Picture1.Width = Me.ScaleWidth - VScroll1.Width
Picture1.Height = Me.ScaleHeight - HScroll1.Height
VScroll1.Left = Picture1.Width
HScroll1.Top = Picture1.Height
VScroll1.Height = Picture1.Height
HScroll1.Width = Picture1.Width

SetPicture
End Sub

Private Sub HScroll1_Change()
picCopy.Left = -HScroll1.Value
End Sub
Private Sub mCopyScreen_Click() '抓屏
Dim hDC As Long, sx As Integer, sy As Integer

Me.Hide
DoEvents

picCopy.Width = Screen.Width
picCopy.Height = Screen.Height

picCopy.AutoRedraw = True

hDC = GetDC(0)
sx = Screen.Width \ Screen.TwipsPerPixelX
sy = Screen.Height \ Screen.TwipsPerPixelY
BitBlt picCopy.hDC, 0, 0, sx, sy, hDC, 0, 0, vbSrcCopy
ReleaseDC 0, hDC

picCopy.AutoRedraw = False

SetPicture
Me.Show
End Sub

Private Sub mSaveFile_Click() '将文件保存为BMP
On Error Resume Next
With CommonDialog1
.DialogTitle = "储存文件"
.Filter = "位图文件(*.bmp)|*.bmp"
.CancelError = True
.ShowOpen
If Err.Number <> cdlCancel Then
SavePicture picCopy.Picture, .FileName
End If
End With
End Sub

Private Sub VScroll1_Change()
picCopy.Top = -VScroll1.Value
End Sub


8276 2004-04-16
  • 打赏
  • 举报
回复
这个问题太简单了,只要将FORM的visible设为false以后,用api就可以截取了,将截取的图象放在picturebox中,以备你以后的使用!
pigpag 2004-04-16
  • 打赏
  • 举报
回复
//最后怎么取这个区域的图像,同时不隐藏当前窗体,难度较大

一个可行的方法是调用PrintWindow函数,将背景打印到hDC中。注意仅被Windows XP/2003支持。
ukyoxh 2004-04-16
  • 打赏
  • 举报
回复
可以使用api实现吧

没有具体的遇到过,也不会哈

帮你顶!
laisiwei 2004-04-16
  • 打赏
  • 举报
回复
up
laisiwei 2004-04-16
  • 打赏
  • 举报
回复
up
wumy_ld 2004-04-15
  • 打赏
  • 举报
回复
首先获取窗体在屏幕上占用的区域坐标,可以用api函数GetDCOrgEx获取窗体左上角坐标,接下来通过窗体的宽度和高度可以算出这个矩形区域的右下角。
最后怎么取这个区域的图像,同时不隐藏当前窗体,难度较大,偶还不会。

7,762

社区成员

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

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