VB.net在游戏中截图

VB.net在游戏中截图,vb.net,directx,screenshot,fullscreen,Vb.net,Directx,Screenshot,Fullscreen,我正在开发一个程序,允许用户拍摄全屏游戏的截图,如《使命召唤》、《战场3》等 然而,我的代码有两个问题 首先,我必须按两次快捷键,而不是像其他快捷键一样按一次。只有当下面的代码实际位于处理子模块中时,才会出现这种情况。如果按下快捷方式时,我只显示一个消息框,则每次都会起作用 第二,每当我拍摄屏幕截图时,它要么完全变黑,要么拍摄我的桌面,即使前台正在运行游戏 我环顾四周,似乎printscreen是通过vb.net获取游戏截图的唯一方法 我的代码如下。感谢您的帮助 Private Sub

我正在开发一个程序,允许用户拍摄全屏游戏的截图,如《使命召唤》、《战场3》等

然而,我的代码有两个问题

首先,我必须按两次快捷键,而不是像其他快捷键一样按一次。只有当下面的代码实际位于处理子模块中时,才会出现这种情况。如果按下快捷方式时,我只显示一个消息框,则每次都会起作用

第二,每当我拍摄屏幕截图时,它要么完全变黑,要么拍摄我的桌面,即使前台正在运行游戏

我环顾四周,似乎printscreen是通过vb.net获取游戏截图的唯一方法

我的代码如下。感谢您的帮助

    Private Sub game_Press(ByVal s As Object, ByVal e As Shortcut.HotKeyEventArgs) Handles gamewindow.press
    Dim gamewin As RECT
    If GetWindowRect(GetForegroundWindow, gamewin) Then
        Dim bmp As Bitmap
        Dim gfx As Graphics
        SendKeys.Send("%{PRTSC}")
        Dim getscrn As IDataObject = Clipboard.GetDataObject()
        Dim bmpsize As New Size(gamewin._Right - gamewin._Left, gamewin._Bottom - gamewin._Top)
        bmp = New Bitmap(CType(getscrn.GetData(GetType(System.Drawing.Bitmap)), Bitmap))

        gfx = Graphics.FromImage(bmp)
        gfx.CopyFromScreen(gamewin._Left, gamewin._Top, 0, 0, New Size(bmpsize.Width, bmpsize.Height), CopyPixelOperation.SourceCopy)
        Dim sr As New System.Threading.Thread(AddressOf uploadimage)
        sr.IsBackground = True
        sr.SetApartmentState(Threading.ApartmentState.STA)
        sr.Start(bmp)
        gfx.Dispose()
    End If
End Sub

PrintScreen由Win32环境处理,该环境处理windows的正常绘图。因此,如果PrintScreen键进入Win32(没有被游戏吞噬),它可能会捕获当前正在绘制的内容的屏幕截图,正如您所说,它要么是您的桌面,要么什么都没有(黑色)

您可以尝试使用从到(正如大多数屏幕捕获程序所做的那样),但这并不能保证工作正常。这是一个大问题。在游戏中按Print Screen,然后粘贴到MS paint中,真的有效吗?如果没有,那么如果没有深入研究directX方面的内容,您可能就不走运了


指出了这一密切相关的SO问题:哪一个建议使用Microsoft的来钩住/插入执行帧捕获所需的DirectX调用。

那么您会推荐什么?我所看到的一切都说是使用printscreen来处理屏幕截图。很明显,你当时还没有看到全部-