Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Скрин зоны рабочего стола  (Прочитано 67097 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Axenic
Гость
« Ответ #30 : 09-02-2010 20:17 » 

Можешь написать чисто код, который заносит картинку рабочего стола в обьект HBITMAP и больше ничего. Без убеждений что он там находится.
Записан
Axenic
Гость
« Ответ #31 : 09-02-2010 20:36 » 

УЗРИТЕ! Вот этот кусок котда, который мне не давал покая последние 4 дня!
Код:
HDC scrdc, memdc;
HBITMAP membit;//HBITMAP - ,если можно так выразиться, native указатель на Bitmap
scrdc = GetDC(0);
memdc = CreateCompatibleDC(scrdc);
membit = CreateCompatibleBitmap(scrdc, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
SelectObject(memdc, membit);
BitBlt(memdc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), scrdc, 0, 0, SRCCOPY);//Вот сдесь процес записи скрина в HBITMAP закончен
IntPtr ukaz = static_cast<IntPtr>(membit);//Здесь мы преобразуем native типа(HBITMAP) в указатель menaged тип (IntPtr) которым и оперируют функции MSDN
Bitmap^ bmp=Bitmap::FromHbitmap(ukaz);//Создаем Bitmap
bmp->Save("D:\\bmp.bmp");//Записываем его в файл
this->pictureBox1->Image = bmp;//Или выводим в обьекте PicteruBox
Пользуйтесь на здоровье.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #32 : 10-02-2010 04:26 » 

Можешь написать чисто код, который заносит картинку рабочего стола в обьект HBITMAP и больше ничего. Без убеждений что он там находится.

а я это и сделал ))))
Записан

Optimus1
Новенький

ru
Offline Offline

« Ответ #33 : 06-05-2020 19:05 » 

В MSDN, тот же скрин делается проще:
Код:
// Create a normal DC and a memory DC for the entire screen. The 
// normal DC provides a "snapshot" of the screen contents. The
// memory DC keeps a copy of this "snapshot" in the associated
// bitmap.
 
hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
hdcCompatible = CreateCompatibleDC(hdcScreen);
 
// Create a compatible bitmap for hdcScreen.
 
hbmScreen = CreateCompatibleBitmap(hdcScreen,
                     GetDeviceCaps(hdcScreen, HORZRES),
                     GetDeviceCaps(hdcScreen, VERTRES));
 
if (hbmScreen == 0)
    errhandler("hbmScreen", hwnd);
 
// Select the bitmaps into the compatible DC.
 
if (!SelectObject(hdcCompatible, hbmScreen))
    errhandler("Compatible Bitmap Selection", hwnd);
 
        // Hide the application window.
 
        ShowWindow(hwnd, SW_HIDE);
 
         //Copy color data for the entire display into a
         //bitmap that is selected into a compatible DC.
 
        if (!BitBlt(hdcCompatible,
               0,0,
               bmp.bmWidth, bmp.bmHeight,
               hdcScreen,
               0,0,
               SRCCOPY))
 
        errhandler("Screen to Compat Blt Failed", hwnd);
 
        // Redraw the application window.
 
        ShowWindow(hwnd, SW_SHOW);

Здравствуйте,

Подскажите пожалуйста, что в итоге делает этот код ? На MSDNе описаение отдельных функций вроде бы изучил, а вот как они между собой работают так и не могу понять.
То есть, последняя выполненная функция в Вашем коде - это BitBlt:

MSDN говорит, что - Функция BitBlt выполняет передачу битового блока цветовых данных, соответствующих прямоугольнику пикселей, из указанного контекста исходного устройства в контекст целевого устройства.


Откуда взялся этот битовый поток, что в данном случае контекст целевого устройства ? Это hDC или hDс ?
В каком виде и где этот поток хранится и что в данном случае такое поток ?
И самый главный вопрос: как получить доступ ко всему этому битовому потоку, что бы как-то прочитать его что ли ?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #34 : 06-05-2020 22:23 » 

Поток? Здесь нет такого слова. Есть слово блок.

На выходе — hbmScreen — графика формата bmp. Можно сохранить в файл.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Optimus1
Новенький

ru
Offline Offline

« Ответ #35 : 07-05-2020 05:25 » 

Поток? Здесь нет такого слова. Есть слово блок.

На выходе — hbmScreen — графика формата bmp. Можно сохранить в файл.

Прошу прощения, действительно блок, а а не поток.

Подскажите пожалуйста, а что из себя представляет данный hbmScreen  - это какой то массив байтов в памяти ? Если да, то можно ли получить доступ для его просмотра ?
Мне в данном случае по крайней мере на данный момент не нужно его сохранять, я хочу найти совпадение определенной последовательности пикселей, ну то есть найти на скрине рабочего стола какой то заданный кусок, к примеру значок какого то окна или что то подобное.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #36 : 07-05-2020 10:57 » 

https://docs.microsoft.com/ru-ru/windows/win32/gdi/bitmap-functions

Тут есть более полный пример: https://docs.microsoft.com/ru-ru/windows/win32/gdi/capturing-an-image
Там используется захват изображения собственного окна. В теме наоборот, свое окно скрывается и захватывается изображение всего экрана. Зато по ссылке есть пример, как сохранить полученный битмап.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Optimus1
Новенький

ru
Offline Offline

« Ответ #37 : 07-05-2020 11:03 » new

В том то и дело, мне не нужно сохранять изображение, мне нужно получить доступ к изображению, когда оно где тов памяти находится, чтобы лишних действий по сохранению не делать.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #38 : 07-05-2020 20:19 » 

Посмотри код по последней ссылке. GetDIBits как раз копирует в буфер lpbitmap.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines