当前位置:编程学习 > VB >>

求助:关于VB截图提示“出错521: 不能打开剪切板”

我做的是一个VB截图程序,程序打开flv视频后,截图,然后播放下一个视频,在运行中,会出现“出错521: 不能打开剪切板”错误,不知道如何来出来和产生的原因,请高手指教,下面是截图过程的一部分代码!

SourceDC = CreateDC("DISPLAY", 0, 0, 0)
  DestDC = CreateCompatibleDC(SourceDC)
  Bhandle = CreateCompatibleBitmap(SourceDC, FX_num, FY_num)
  SelectObject DestDC, Bhandle
  BitBlt DestDC, 0, 0, FX_num, FY_num, SourceDC, X_num, Y_num, &HCC0020
  Wnd = Screen.ActiveForm.hwnd
  OpenClipboard Wnd
  EmptyClipboard
  SetClipboardData 2, Bhandle
  CloseClipboard
  DeleteDC DestDC
  ReleaseDC Dhandle, SourceDC
  Set pPic = Clipboard.GetData
    If pPic Is Nothing Or pPic.Handle = 0 Then
    Else
        SavePicture pPic, P_name & ".jpg"
    End If VB不支持jpeg格式的图片。
引用 1 楼 caozhy 的回复:
VB不支持jpeg格式的图片。

后缀是jpg,其实保存的还是bmp图象
lz单步执行,看是哪句报错
Option Explicit

Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long
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 SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
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 OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

' 抓取屏幕图像到剪贴板
Private Function GetScreenBitmap(ByVal Left As Long, ByVal Top As Long, ByVal Right As Long, ByVal Bottom As Long)
    Dim rWidth As Long
    Dim rHeight As Long
    Dim SourceDC As Long
    Dim DestDC As Long
    Dim BHandle As Long
    Dim Wnd As Long
    Dim DHandle As Long
    On Error GoTo Lhandle
    rWidth = Right - Left
    rHeight = Bottom - Top
    SourceDC = CreateDC("DISPLAY", 0, 0, 0)
    DestDC = CreateCompatibleDC(SourceDC)
    BHandle = CreateCompatibleBitmap(SourceDC, rWidth, rHeight)
    SelectObject DestDC, BHandle
    BitBlt DestDC, 0, 0, rWidth, rHeight, SourceDC, Left, Top, &HCC0020
    Wnd = Screen.ActiveForm.hwnd
    OpenClipboard Wnd
    EmptyClipboard
    SetClipboardData 2, BHandle
    CloseClipboard
    DeleteDC DestDC
    ReleaseDC DHandle, SourceDC
Lhandle:
       Exit Function
End Function

Private Sub Command1_Click()
    Me.ScaleMode = 3
    Picture1.ScaleMode = 3
    Picture2.ScaleMode = 3
    GetScreenBitmap Picture1.Left + 2, Picture1.Top + 2, Picture1.Left + 2 + Picture1.ScaleWidth, Picture1.Top + 2 + Picture1.ScaleHeight
    Picture2.Picture = Clipboard.GetData
    '清空剪贴板
    OpenClipboard Screen.ActiveForm.hwnd
    EmptyClipboard
End Sub
其他的应用程序正在使用剪贴板,且不能将其释放给此应用程序。 解码器.播放流.提取帧..
补充:VB ,  控件
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,