что может помешать работе GetPixel?

#c #winapi

#c #winapi #c

Вопрос:

Я использую GetPixel для считывания пикселей из определенного окна (если быть более конкретным, покерного стола).

Теперь, конечно, на моем компьютере и примерно на 95% других ПК все это работает отлично. Но время от времени есть компьютер, на котором это не работает — GetPixel возвращает CLR_INVALID. Даже несмотря на то, что операционная система win7 с включенным aero (я видел, как это происходит только на 64-разрядной версии win7).

Итак, то же самое окно с использованием GetPixel работает на моем компьютере, но оно не работает на другом компьютере.

Кто-нибудь сталкивался с этим раньше? Может ли какое-то приложение препятствовать другим приложениям. от использования GetPixel?

Ответ №1:

Если другое приложение работает с повышенными правами или от имени другого пользователя, вы не сможете к нему прикоснуться.

Комментарии:

1. Хммм, понятно… Что, если я также использую повышенный уровень?

2. Обновление: похоже, это не так — я только что попробовал запустить клиент poker от имени администратора, а я — от имени обычного пользователя — все сработало так, как ожидалось.

Ответ №2:

Из MSDN:

Если пиксель находится за пределами текущей области отсечения, возвращаемое значение равно CLR_INVALID .

Комментарии:

1. Понятно… В качестве дополнительного примечания, если я захватываю все окно целиком и делаю BitBlt, это работает. Что мне с этим делать?

2. Что вы отбираете пиксель за пределами диапазона отсечения постоянного тока, связанного с окном. Вы все еще можете использовать BitBlt, поскольку это выполняет массовую операцию со всем DC.