Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 16:10   #1
Ski1alec
Новичок
Джуниор
 
Регистрация: 24.01.2011
Сообщений: 3
По умолчанию Не получается сделать скриншот C#

Добрый день. Необходимо сделать скриншот активного окна. Проблема в том, что окно создается одним приложением, а на него накладывается информация вторым приложением.

Первый метод:
Цитата:
Graphics gfx;
GetWindowRect(handle, ref rect);
bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format16bppRgb555);
gfx = Graphics.FromImage(bmp);
gfx.CopyFromScreen(rect.X, rect.Y, 0, 0, new Size(rect.Size.Width - rect.X, rect.Size.Height - rect.Y), CopyPixelOperation.SourceCopy);
bmp.Save("bmp.bmp");
Все работает быстро, но информация со второго приложения отсутствует, а она необходима.

Второй метод (эмуляция нажатия PrintScreen):
Цитата:
//Нажмем на кнопочку PrintScreen
SendKeys.Send("{PRTSC}");
//А теперь получим изображение из буффера обмена
Image image = Clipboard.GetImage();
bmp = new Bitmap(image);
bmp.Save("bmp.bmp");
Информация со второго окна присутствует, но работает нестабильно - иногда не делает скриншоты, тормозит мышь и вообще приложение. Дело в том, что мне необходимо делать скриншоты примерно раз в полсекунды, поэтому для меня это критично.

Буду благодарен за любую помощь

Последний раз редактировалось Ski1alec; 24.01.2011 в 16:14.
Ski1alec вне форума Ответить с цитированием
Старый 24.01.2011, 19:24   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Я раньше так снимок экрана делал

Код:
Public Screens() As System.Windows.Forms.Screen = System.Windows.Forms.Screen.AllScreens
    Private Declare Function BitBlt Lib "gdi32.dll" (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 Integer
    Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal nWidth As Integer, ByVal nHeight As Integer) As IntPtr
    Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As IntPtr) As Integer
    Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As IntPtr) As IntPtr
    Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As IntPtr) As Integer
    Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal hObject As IntPtr) As IntPtr
    Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr
    Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal hdc As IntPtr) As IntPtr
	 Dim x As Integer
     Dim y As Integer
	
	
  Sub gif()
        Dim hb, hd, hs As IntPtr
        On Error Resume Next
        hs = GetDC(IntPtr.Zero)
        x = (Screens(0).WorkingArea.Width())
        y = (Screens(0).WorkingArea.Height())
        hd = CreateCompatibleDC(hs)
        hb = CreateCompatibleBitmap(hs, x + 20, y + 40)
        DeleteObject(SelectObject(hd, hb))

        BitBlt(hd, 0, 0, x + 20, y + 40, hs, 0, 0, &HCC0020)

        ReleaseDC(IntPtr.Zero, hs)

        Dim b As Bitmap = Bitmap.FromHbitmap(hb)

b-ваш снимок
        b.Dispose()

        DeleteDC(hd)
        DeleteObject(hb)
    End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.01.2011, 21:23   #3
Ski1alec
Новичок
Джуниор
 
Регистрация: 24.01.2011
Сообщений: 3
По умолчанию

А что это за язык? Я кроме C# ничего не понимаю.
Ski1alec вне форума Ответить с цитированием
Старый 24.01.2011, 21:44   #4
mflance
Новичок
Джуниор
 
Регистрация: 24.01.2011
Сообщений: 0
По умолчанию

Цитата:
Сообщение от Ski1alec Посмотреть сообщение
А что это за язык? Я кроме C# ничего не понимаю.
Это VB.net )
Пишу программное обеспечение на заказ.
ICQ# 353-971-490
mflance вне форума Ответить с цитированием
Старый 24.01.2011, 21:48   #5
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

http://programmersforum.ru/showthread.php?t=83500
Cpluser вне форума Ответить с цитированием
Старый 24.01.2011, 22:56   #6
Ski1alec
Новичок
Джуниор
 
Регистрация: 24.01.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение

Так здесь через функцию CopyFromScreen как и у меня в первом методе
Ski1alec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Может ли бот сделать скриншот незаметно для клиента? amakl Софт 10 13.01.2011 13:02
Можно ли сделать скриншот без Windows функций? Spooner Общие вопросы Delphi 8 17.08.2010 10:57
Неудаётся сделать скриншот экрана и отлавить клавиши Вавел из ГМТУ Общие вопросы Delphi 4 13.09.2009 14:53
Не получается сделать .... Castro Паскаль, Turbo Pascal, PascalABC.NET 4 22.05.2009 19:11
как сделать скриншот xakkkkker Общие вопросы Delphi 1 10.02.2008 15:24