VB 如何获取屏幕图片数据保存在一个二进制数组里面

VB 如何获取屏幕图片数据保存在一个二进制数组里面,第1张

'以下就是不经过任何控件直接把截图数据存入数组的代码。分二步:

'一、创建一个模块,复制下面代码:

Option Explicit

Private Type PALETTEENTRY

peRed As Byte

peGreen As Byte

peBlue As Byte

peFlags As Byte

End Type

Private Type LOGPALETTE

palVersion As Integer

palNumEntries As Integer

palPalEntry(255) As PALETTEENTRY

End Type

Private Type GUID

Data1 As Long

Data2 As Integer

Data3 As Integer

Data4(7) As Byte

End Type

Private Const RASTERCAPS As Long = 38

Private Const RC_PALETTE As Long = &H100

Private Const SIZEPALETTE As Long = 104

Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Long) As Long

Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Long, _

ByVal nWidth As Long, ByVal nHeight As Long) As Long

Private Declare Function GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal _

iCapabilitiy As Long) As Long

Private Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, _

ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries _

As PALETTEENTRY) As Long

Private Declare Function CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) _

As Long

Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject _

As Long) As Long

Private Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As _

Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, _

ByVal hDCSrc As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop _

As Long) As Long

Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long

Declare Function GetForegroundWindow Lib "user32" () As Long

Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette _

As Long, ByVal bForceBackground As Long) As Long

Private Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As Long

Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As _

RECT) As Long

Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As _

Long) As Long

Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Type PicBmp

Size As Long

Type As Long

hBmp As Long

hPal As Long

Reserved As Long

End Type

Private Declare Function OleCreatePictureIndirect Lib "olepro32dll" (PicDesc As _

PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long

'创建BMP位图

Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture

Dim r As Long

Dim Pic As PicBmp

Dim IPic As IPicture

Dim IID_IDispatch As GUID

'填充IDispatch界面

With IID_IDispatch

Data1 = &H20400

Data4(0) = &HC0

Data4(7) = &H46

End With

'填充Pic

With Pic

Size = Len(Pic) '注释: Pic结构长度

Type = vbPicTypeBitmap '注释: 图象类型

hBmp = hBmp '注释: 位图句柄

hPal = hPal '注释: 调色板句柄

End With

'建立Picture图象

r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)

'返回Picture对象

Set CreateBitmapPicture = IPic

End Function

'截图处理

Public Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, ByVal _

LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc _

As Long) As Picture

Dim hDCMemory As Long '保存截取图象的目标设备

Dim hBmp As Long

Dim hBmpPrev As Long

Dim r As Long

Dim hDCSrc As Long '要截取图象的源设备

Dim hPal As Long

Dim hPalPrev As Long

Dim RasterCapsScrn As Long

Dim HasPaletteScrn As Long

Dim PaletteSizeScrn As Long

Dim LogPal As LOGPALETTE

'GetDC传回用于写入窗口显示区域的设备内容句柄,而GetWindowDC传回写入整个窗口的设备内容句柄

'区别在于GetDC不包括边框、滚动条、标题栏、菜单等,而GetWindowDC则包括

If Client Then '如果为真,即指定是客户区(不包括标题栏等)

hDCSrc = GetDC(hWndSrc) 'GetDC检索一指定窗口的客户区域或整个屏幕的显示设备上下文的句柄

Else '否则用GetWindowDC寻找后获取

hDCSrc = GetWindowDC(hWndSrc)

End If

hDCMemory = CreateCompatibleDC(hDCSrc) '创建一块与hDCSrc设备场景一样的内存区

hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc) '创建一幅与设备有关位图

hBmpPrev = SelectObject(hDCMemory, hBmp) 'SelectObject将位图放入设备场景中

'获得屏幕属性

RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS) '根据指定设备场景代表的设备的功能返回信息

HasPaletteScrn = RasterCapsScrn And RC_PALETTE

PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE)

'如果屏幕对象有调色板则获得屏幕调色板

If HasPaletteScrn And (PaletteSizeScrn = 256) Then

'建立屏幕调色板的拷贝

LogPalpalVersion = &H300

LogPalpalNumEntries = 256

r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPalpalPalEntry(0)) '获取系统调色板

hPal = CreatePalette(LogPal) 'CreatePalette调色板函数

'将新建立的调色板选入建立的内存绘图句柄中

hPalPrev = SelectPalette(hDCMemory, hPal, 0)

r = RealizePalette(hDCMemory) 'RealizePalette函数使系统恢复当前选中的逻辑调色板中的值

End If

'拷贝图象

r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)

hBmp = SelectObject(hDCMemory, hBmpPrev)

If HasPaletteScrn And (PaletteSizeScrn = 256) Then

hPal = SelectPalette(hDCMemory, hPalPrev, 0)

End If

'释放资源

r = DeleteDC(hDCMemory)

r = ReleaseDC(hWndSrc, hDCSrc)

Set CaptureWindow = CreateBitmapPicture(hBmp, hPal)

End Function

'二、程序调用举例:

Private Sub Command1_Click()

'捕捉活动窗口

Dim tmpPicture

Dim hWndActive As Long

Dim r As Long

Dim RectActive As RECT

hWndActive = GetForegroundWindow()

r = GetWindowRect(hWndActive, RectActive)

'截图

Set tmpPicture = CaptureWindow(hWndActive, False, 0, 0, _

RectActiveRight - RectActiveLeft, RectActiveBottom - RectActiveTop)

'保存到数组

Dim PBag As New PropertyBag

Dim B() As Byte

PBagWriteProperty "Picture", tmpPicture

'读取tmpPicture 并写到 Pbag 容器中

B = PBagContents '获取容器Byte 到 B() 数组中

Set PBag = Nothing

MsgBox "已保存到数组B中!"

End Sub

使用scanner获取屏幕输入

1、定义scanner,能够监听屏幕输入

Scanner sc = new Scanner(Systemin);

2、通过nextInt获取输入整数

 int i = scnextInt();

补充:

new Scanner(Systemin)创建一个Scanner,控制台会一直等待输入,输入信息后,通过nextInt获取输入的整数值

当您的手机可以正常开机,但屏幕故障(例如触屏失灵、屏幕碎裂等)无法输入密码解锁时,我们为您提供以下两种方法进入手机系统备份数据:

一,使用OTG线解锁手机(适用于屏幕可看清时)

1 准备一条OTG连接线。

2 OTG线USB-C接口连接手机,OTG线USB接口连接USB接口的键盘。

3长按电源键重启手机,当手机振动后松开电源键,等待手机出现锁屏界面。

4 出现锁屏界面后立即在键盘上输入锁屏密码解锁屏幕。

5 拔掉USB接口的键盘线,连接USB接口的鼠标,使用鼠标就可以 *** 作手机备份数据了。

二,使用拓展坞设备投屏解锁手机(适用于屏幕完全无法看清时)

说明:使用拓展坞的HDMI接口连接显示器,需要您的手机支持有线投屏功能,如果不确定您的手机是否支持,可以致电华为客服咨询。

1,准备一个华为拓展坞。

拓展坞支持 Type-C 转多个端口,例如大屏设备是 HDMI 端口接入,可使用 Type-C 转 HDMI + USB +USB 的拓展坞设备。

2,将扩展坞USB-C接口连接手机端,USB接口连接键盘,HDMI接口连接显示器,如果使用VGA接口连接显示器,手机无需支持有线投屏功能。

3,长按电源键重启手机,当手机振动后松开电源键,等待手机出现锁屏界面。

4,出现锁屏界面后立即在键盘上输入锁屏密码,屏幕解锁后,显示器会显示手机屏幕。(注:HarmonyOS系统上,解锁后手机端会出现有线投屏提示的d框,通过 *** 作键盘上下键移动,移动到“同意”后按回车键确认,手机屏幕才会投屏到显示器上。

5,拔掉USB接口的键盘线,连接USB接口的鼠标,使用鼠标就可以 *** 作手机备份数据了。

备份数据:

您可以通过云空间和手机克隆这两种方式来备份您的数据。

您可以使用云空间来备份数据,数据备份后可以在其它华为手机上使用云空间来恢复云备份的数据。

您可以使用手机克隆,将您的数据传输到其它华为手机上。

以上就是关于VB 如何获取屏幕图片数据保存在一个二进制数组里面全部的内容,包括:VB 如何获取屏幕图片数据保存在一个二进制数组里面、如何用java获取屏幕输入整数、华为手机屏幕坏了,怎么导出数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10147367.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存