#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.