解决方案 »

  1.   

    你用直接按 PrintScr 键能否截图(进了剪贴板)?
    如果能,就根本不是你说的问题。
    可能热键激活了你的程序,QQ在失去焦点时自动隐藏了。
    你应该考虑不让你的程序抢焦点。
      

  2.   

    对啊,一般截屏那部分代码应该是在后台执行的啊。取到了数据之后才有自己程序的Form.Show什么的。
      

  3.   

    直接按 PrintScr 键,屏幕上的所有窗口(含QQ界面和聊天窗口)都可以抓下来,无问题。
    就是GetDC(0)这个代码抓不了QQ界面,怎么办?
      

  4.   

    GetDC和BitBlt 不要同时用
    程序初始化的时候就把getdc(0)读进来,我就不信QQ窗口想躲你一辈子
      

  5.   


    Option Explicit
    Private Declare Function GetDC Lib "user32" (ByVal hwnd 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 DC As LongPrivate Sub Form_Click()
    BitBlt Me.hDC, 0, 0, Screen.Width \ 15, Screen.Height \ 15, DC, 0, 0, vbSrcCopy
    End SubPrivate Sub Form_Load()
    DC = GetDC(0)
    End Sub
      

  6.   


    谢谢楼上热心的朋友,我试着在Form_Load时就GetDC(0),然后在按钮事件中将图BitBlt在Picture1里面,结果还是一样,QQ的聊天窗口就跟透明人一样。如上图
      

  7.   

    qq 窗口如果有透明度的话,需要对 bitblt 的最后一个参数改造,否则无法截取透明窗口,大概是  vbSrcCopy and &H40000000 要么是 &H80000000lz可以去msdn查查,以前vbgood 做放大镜的擂台赛时提到过这个问题
      

  8.   


    哎呀,怎么没想到这个情况呢。谢谢。 按你说的,果然成功了。应该是下面这样:
    Call BitBlt(Picture1.hDC, 0, 0, w, h,  hDCtmp, 0, 0, vbSrcCopy Or &H40000000)