ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Захват не видимых областей экрана С++ (https://forum.antichat.xyz/showthread.php?t=1491364)

Gafask 10.10.2023 06:46

Добрый день или ночь!🤌



Я хочу узнать о наличии библиотек на C++🧐, которые могут захватывать цвет пикселей даже из неактивных областей экрана. Другими словами, мне интересны библиотеки, которые могут получать информацию о цветах пикселей даже в тех окнах или областях экрана, которые находятся на заднем плане, и даже если поверх них запущены другие приложения. Примерами таких программ могут быть OBS и Fraps.


Заранее благодарю за помощь и рекомендации по этому вопросу!

🤡😶*🌫️😶*🌫️😶*🌫️👾

Да чё там, брат? Как дела, доброй ночи или чего? Слышь, кто-нибудь в курсе, где можно взять какие-то крутые библиотеки на C++, чтоб они, типа, цвета пикселей с экрана хватали? Да не просто так, а чтоб даже из тех окон, что неактивные, понимаешь? Чтоб они фигачили цвета пикселей, даже если вон сверху другие приложухи нафигачили.
👾😶*🌫️😶*🌫️😶*🌫️🤡

Digger Man52 26.10.2023 18:34

[QUOTE="sazzas1978"]

C++:





[CODE]
#include
#include
int
main
(
)
{
int
targetColor
=
RGB
(
255
,
0
,
0
)
;
// Целевой цвет (красный в данном случае)
HWND hwnd
=
GetTopWindow
(
NULL
)
;
while
(
hwnd
!=
NULL
)
{
HDC hdc
=
GetDC
(
hwnd
)
;
RECT rect
;
GetClientRect
(
hwnd
,
&
rect
)
;
// Перебор всех пикселей в окне
for
(
int
x
=
rect
.
left
;
x

C++:





[CODE]
#include
#include
int
main
(
)
{
// короче для работы с опенцв
// нужно ему скрин экрана пихнуть
// это на винапи можно сделать
// потом короче нужно передать картинку в прогу
cv
::
Mat screen
=
cv
::
imread
(
"screenshot.png"
)
;
cv
::
Vec3b
target
(
0
,
0
,
255
)
;
// тут можно вьебать цикл
// который будет перебирать каждый х и y экрана,
// и проверять каждый пиксель, равен ли он нашему значению
// x и y достаются из нашего материала
// типо screen.cols - x
// screen.rows - y
// я пишу это с телефона, поэтому да,
// не буду ниче лишнего писать
cv
::
Vec3b PIXELCVET
=
screen
.
at

(
y
,
x
)
;
// и короче тут в этом цикле сразу сверяем
if
(
PIXELCVET
==
target
)
{
std
::
cout


Digger Man52 26.10.2023 20:59

Цитата:

Сообщение от sazzas1978

Основная суть задачи была в поиске пикселей во всех программах, даже свернутых, у тебя - чисто на скриншоте, минус моего кода - что долго исполняется, так как нужно применить многопоточность для cpu bound
(Обновил свой код)

у тебя все потоки ща будут обращаться к хдс и хвнд окна, получаем крутые гонки данных, когда несколько потоков пытаются получить доступ к контексту и окну, почему ты не сделал это через мьютексы? в твоей ситуации, лучше мьютексы юзать, что бы была некая синхронизация доступа к общим файлам


Время: 23:35