Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Захват экрана Добавлено: 01.01.08 21:59  

Автор вопроса:  lexei | ICQ: 464882716 
Такой вопросик. У меня есть приложение, которое выводит объекты Direct3D в пикчербокс, который занимает не весь экран. Как сохранить картинку в пикчербоксе (тоесть сцену)в бмп файл?

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #1
Добавлено: 01.01.08 23:15
Как на NET не знаю, но ты напшешь сам, посмотрев пример на VB клавиши то ведь, не кто не отменял?
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Const VK_MENU = &H12
Const KEYEVENTF_KEYUP = &H2
Const VK_SNAPSHOT = &H2C
Private Sub Picture_bufer()
Call keybd_event(VK_SNAPSHOT, 0, 0, 0) 'Hажимаем Print Screen
Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем Print Screen
End Sub
Private Sub Command1_Click()
 Picture_bufer
End Sub
Private Sub Command2_Click()
Picture1.Picture = Clipboard.GetData'вставка из буфера
End Sub

Private Sub Command3_Click()
SavePicture Picture1.Picture, "C:\Ess.bmp"
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #2
Добавлено: 01.01.08 23:18
VB нет у меня ошибся извени
Private Sub Command1_Click()
 Picture1.Picture = Picture_bufer
End Sub

Ответить

Номер ответа: 3
Автор ответа:
 lexei



ICQ: 464882716 

Вопросов: 13
Ответов: 32
 Профиль | | #3 Добавлено: 01.01.08 23:19
Как я понял это просто скрин экрана. Но прикол в том, что у меня пикчербокс (сцена) занимает не весь экран.

Ответить

Номер ответа: 4
Автор ответа:
 lexei



ICQ: 464882716 

Вопросов: 13
Ответов: 32
 Профиль | | #4 Добавлено: 01.01.08 23:20
Извени, понял

Ответить

Номер ответа: 5
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #5
Добавлено: 01.01.08 23:22
Блин все было правильно, новый год однако.

Ответить

Номер ответа: 6
Автор ответа:
 lexei



ICQ: 464882716 

Вопросов: 13
Ответов: 32
 Профиль | | #6 Добавлено: 01.01.08 23:24
И всё таки, по моему это скрин всего экрана

Ответить

Номер ответа: 7
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #7
Добавлено: 02.01.08 00:06
И всё таки, по моему это скрин всего экрана
Ну да,(Заголовок читай), а если октивного окна то
Private Sub Picture_bufer()
Call keybd_event(VK_MENU, 0, 0, 0) 'Hажимаем Alt
Call keybd_event(VK_SNAPSHOT, 0, 0, 0) 'Hажимаем Print Screen
Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем Print Screen
Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем Alt
' End
End Sub

А если конкретного то много АПИ , а как ваш язык с этим дружит незнаю? Если не кто не отвтит дам код на АПИ, для любого контрола, но завтра, сейчас спать ХОЧЮ. С новым годом!

Ответить

Номер ответа: 8
Автор ответа:
 lexei



ICQ: 464882716 

Вопросов: 13
Ответов: 32
 Профиль | | #8 Добавлено: 03.01.08 17:14
Хорошо, есть другой вариант. Как из рисунка вырезать прямоугольную область (зная её коотдинаты), и сохранить её?

Ответить

Номер ответа: 9
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #9
Добавлено: 03.01.08 22:02
'Функция StretchBlt копирует часть изображения от одного Picture в
'другое. Эта функция также позволяет масштабировать (сжимать, растягивать,
'выворачивать наизнанку, задавая параметры с разными знаками)
Private Declare Function StretchBlt Lib "gdi32" _
           ;(ByVal hdc 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 hSrcWidth As Long, ByVal nSrcHeight As Long, _
           ByVal dwRop As Long) As Long

Это наверно есть и у вас?
а сохраняем типа как у нас
SavePicture Picture1.Image, путь куда

Ответить

Номер ответа: 10
Автор ответа:
 lexei



ICQ: 464882716 

Вопросов: 13
Ответов: 32
 Профиль | | #10 Добавлено: 03.01.08 22:09
В принципи есть функция BitBlt которая захватывает часть экрана. Но проблема в том, что я на ВБ.НЕТ перевести её не могу.

Ответить

Номер ответа: 11
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #11
Добавлено: 03.01.08 22:24
Ну что сказать? В 1 посте уже писал, как на NET не знаю!!! Видел его пару дней, фал инсталяции привел в ужас, снес...н.ф. А вообще ари должны работать везде, по моему?

Ответить

Номер ответа: 12
Автор ответа:
 lexei



ICQ: 464882716 

Вопросов: 13
Ответов: 32
 Профиль | | #12 Добавлено: 03.01.08 22:43
Работает та везде, но вызов, синтаксис разный. Нашол пример BitBlt на 6.0, пытаюсь перевести.

Ответить

Номер ответа: 13
Автор ответа:
 lexei



ICQ: 464882716 

Вопросов: 13
Ответов: 32
 Профиль | | #13 Добавлено: 03.01.08 23:00
УРРА!!!!!
Нашол
Пашет!!!

Imports System
Imports System.Runtime.InteropServices
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms
Public Class Form1
    <;DllImport("user32.dll";)> _
    Public Shared Function GetDesktopWindow() As IntPtr
    End Function

    <System.Runtime.InteropServices.DllImport("user32.dll";)> _
    Public Shared Function GetWindowDC(ByVal hwnd As IntPtr) As IntPtr
    End Function

    <System.Runtime.InteropServices.DllImport("gdi32.dll";)> _
    Public Shared Function BitBlt(ByVal hDestDC As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hSrcDC As IntPtr, _
    ByVal xSrc As Integer, ByVal ySrc As Integer, ByVal dwRop As Integer) As UInt64
    End Function

    <STAThread()> _
    Private Shared Sub Main(ByVal args As String())

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myImage As Image = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
        Dim gr1 As Graphics = Graphics.FromImage(myImage)

        Dim dc1 As IntPtr = gr1.GetHdc()
        Dim dc2 As IntPtr = GetWindowDC(GetDesktopWindow())

        BitBlt(dc1, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc2, _
        0, 0, 13369376)

        gr1.ReleaseHdc(dc1)

        myImage.Save("C:\screenshot.png", ImageFormat.Png)

    End Sub
End Class

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам