Как получить цвет окна

Я пытаюсь использовать API GetBkColor и GetSysColor (COLOR_WINDOW), чтобы получить цвет окна, но это дает мне неправильное значение.
Когда я получаю цвет wndow с помощью какого-либо инструмента, он отличается от того, что я получаю от API.

Любое предложение о том, как получить правильное значение цвета?

Если в окне используется градиентный цвет, то как мне найти цвет для определенного пикселя?

1

Решение

GetBkColor возвращает значение COLORREF значение для текущего цвета фона в случае успеха. Чтобы получить красный, зеленый и синий компоненты цвета, используйте макросы GetRValue, GetGValue и GetBValue соответственно. Это то, что вам нужно? ИЛИ что за «правильное значение» вы имеете в виду?

Чтобы получить цвет пикселя, используйте GetPixel функция:

COLORREF color;
HDC hdc_ = GetDC(NULL); //get dc of whole screen
color = GetPixel(hdc_, x, y);

Надеюсь, это поможет вам как-то.

2

Другие решения

GetBkColor сообщает текущий цвет фона для текста, но окно может изменить его при рисовании, так что это не даст вам значения.

GetSysColor(COLOR_WINDOW) является рекомендуемым цветом по умолчанию для окна, учитывая текущую цветовую схему, но многие окна выбирают другой цвет. Вы можете попытаться получить WNDCLASS для окна и проверьте hbrBackground поле, но не все окна полагаются на этот механизм для установки его цвета фона.

Чтобы получить цвет в определенном пикселе, вы можете использовать GetPixel. Это хорошо для выборки пары пикселей, но не пытайтесь прочитать каждый пиксель в окне, называя это миллион раз — это слишком медленно для этого.

0