VB.net Tomar capturas de pantalla en el juego

Estoy trabajando en un programa que permitirá a los usuarios tomar capturas de pantalla de juegos de pantalla completa, como Call of Duty, Battlefield 3, etc.

Sin embargo, tengo dos problemas con mi código.

En primer lugar, tengo que presionar el atajo dos veces, en lugar de una vez como mis otros atajos. Esto solo ocurre cuando el código a continuación está realmente en el subdirectorio de manejo. Si solo se muestra un cuadro de mensaje cuando se presiona el acceso directo, funciona siempre.

En segundo lugar, cada vez que tomo una captura de pantalla, sale completamente negra o toma una foto de mi escritorio, aunque haya un juego ejecutándose en primer plano.

He buscado y parece que la impresión de pantalla es la única forma de obtener una captura de pantalla de un juego a través de vb.net.

Mi código está abajo. Cualquier ayuda es apreciada.

    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

preguntado el 01 de mayo de 12 a las 22:05

1 Respuestas

PrintScreen es manejado por el entorno Win32, que maneja el dibujo normal de las ventanas. Entonces, si la tecla PrintScreen llega a Win32 (no es engullida por el juego), probablemente tomará una captura de pantalla de lo que está dibujando actualmente que, como dijiste, es tu escritorio o nada ( negro).

Podrías intentar usar GDI a Bitblt from the de la pantalla DC a una memoria DC (como lo hacen la mayoría de los programas de captura de pantalla), pero no se garantiza que funcione. Aquí está la gran pregunta. ¿Funciona realmente presionar Imprimir pantalla mientras estás en el juego y luego ir y pegar en MS Paint? Si no, entonces probablemente no tenga suerte, sin profundizar en el lado directo de las cosas.

Paul-Jan señaló esta pregunta SO estrechamente relacionada: Tomar captura de pantalla de la aplicación DirectX a pantalla completa que recomienda el uso de Microsoft Desvíos para conectar/instrumentar las llamadas de DirectX necesarias para realizar una captura de fotogramas.

contestado el 23 de mayo de 17 a las 13:05

¿Qué recomendarías entonces? Todo lo que he visto ha dicho que use printscreen para manejar la captura de pantalla. - Justin

Obviamente no lo has visto todo entonces... stackoverflow.com/questions/1962142/… - Paul-Jan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.