Как получить цвет пикселя под курсором?

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

Как я могу создать это на VC ++, мне нужно что-то похожее на this, но в идеале не в .NET, чтобы его можно было запускать много раз в секунду?


person Robin Rodricks    schedule 20.06.2010    source источник


Ответы (1)


Прямо из головы простой способ:

#include <stdio.h>
#include <Windows.h>

int main(void) {
    POINT p;
    COLORREF color;
    HDC hDC;
    BOOL b;

    // Get the device context for the screen
    hDC = GetDC(NULL);
    if (hDC == NULL)
        return 3;

    // Get the current cursor position
    b = GetCursorPos(&p);
    if (!b)
        return 2;

    // Retrieve the color at that position
    color = GetPixel(hDC, p.x, p.y);
    if (color == CLR_INVALID)
        return 1;

    // Release the device context again
    ReleaseDC(GetDesktopWindow(), hDC);

    printf("%i %i %i", GetRValue(color), GetGValue(color), GetBValue(color));
    return 0;
}

ETA: Похоже, работает, по крайней мере, для меня.

ETA2: добавлена ​​проверка ошибок.

ETA3: закомментированный код, скомпилированный исполняемый файл и решение Visual Studio можно найти в мой репозиторий SVN.

person Joey    schedule 20.06.2010
comment
Большое спасибо! Я полагаю, я построил это в консольном приложении Win32 ?? - person Robin Rodricks; 20.06.2010
comment
@ Джереми: Да. Я не мог понять, как его собрать из командной строки, но в качестве консольного приложения из Visual Studio он работал нормально. - person Joey; 20.06.2010
comment
Спасибо! Еще одна вещь, я пытаюсь вызвать это за кадром из другого приложения, так есть ли способ скрыть черное окно командной строки от отображения? - person Robin Rodricks; 20.06.2010
comment
Я нахожу здесь несколько ответов .. stackoverflow.com/questions/2763669/ .. но знаете ли вы, как быстро сделать то же самое? Мне в основном нужно вернуть некоторые значения, не показывая окно консоли. - person Robin Rodricks; 20.06.2010
comment
Практически каждый язык / среда имеет возможность запускать консольную программу и получать ее выходные данные. Используйте то, что подходит вам. Понятия не имею, на каком языке программирования вы хотите его запустить. Для простого Windows API вы можете использовать CreateProcess, в C # использовать Process.Start, в C вы можете использовать popen, & c. ... - person Joey; 20.06.2010