Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Мне нужно узнать значение цвета пиксела в определенной точке в не окна формы  (Прочитано 11334 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Gremlin
Гость
« : 30-07-2008 15:05 » new

Нужно сравнить изображение то что есть на мониторе (в другой программе) с другим изображением и на основе одинаково или нет сделать какое либо действие.
Пример таков:
В окне появился красный квадрат - WinExec ( "red.exe", SW_SHOWNORMAL );
Изменился на синий квадрат - WinExec ( "blue.exe", SW_SHOWNORMAL );

Мне посоветовали исрользовать GetPixel но это работает ума не прилажу
Хотелсь бы увидеть какой нибудь пример работы GetPixel
вроде этого:
int col;
col = GetPixel(0 , 230 ,30);
if(col == бла бла)
keybd_event(VK_F2, 0, 0, 0);
keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0);
else
keybd_event(VK_F3, 0, 0, 0);
keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0);

Мне нужно узнать значение цвета пиксела в определенной точке в не окна формы
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 30-07-2008 15:14 » 

GetWindowDC(0) - хендл контекста, на котором будет весь экран (только я не пробовал, так ли это Улыбаюсь )
Записан

Gremlin
Гость
« Ответ #2 : 30-07-2008 16:54 » 

Все я выяснил
Код:
void *hdc=CreateDCA("DISPLAY",NULL,NULL,NULL);
GetPixel(hdc,571,28);
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 30-07-2008 17:25 » 

Gremlin, замечательно.

Алексей1153++, кстати, вот так вот находу можно пополнять FAQ...
например, этот вопрос по контексту
« Последнее редактирование: 30-07-2008 17:27 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 30-07-2008 17:58 » 

А как туда добавлять статьи ? Не могу понять
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 30-07-2008 18:29 » 

Давай перейдем в "правильную" тему: https://forum.shelek.ru/index.php/topic,10005.msg180823#msg180823
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Gremlin
Гость
« Ответ #6 : 01-08-2008 20:16 » 

Вот то что у мну получилось Что, съел? - Рыбный бот для Lineage (неспорю, стоит его конкретно доработать, но первые шаги я уже сделал)

Код:
[color=green]//---------------------------------------------------------------------------[/color]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled = True;
Timer2->Enabled = True;
Timer3->Enabled = True;
}
[color=green]//---------------------------------------------------------------------------[/color]
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer1->Enabled = False;
Timer2->Enabled = False;
Timer3->Enabled = False;
}
[color=green]//---------------------------------------------------------------------------[/color]
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
void *hdc=CreateDCA("DISPLAY",NULL,NULL,NULL);
if(GetPixel(hdc,118,157) == 16239368)
keybd_event(VK_F2, 0, 0, 0);
keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0);
if(GetPixel(hdc,118,157) == 4852793)
keybd_event(VK_F3, 0, 0, 0);
keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0);
}
[color=green]//---------------------------------------------------------------------------[/color]
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
void *hdc=CreateDCA("DISPLAY",NULL,NULL,NULL);
if(GetPixel(hdc,256,136) == 3020813)
GetPixel(hdc,1,1);
else
keybd_event(VK_F1, 0, 0, 0);
keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0);
}
[color=green]//---------------------------------------------------------------------------[/color]
void __fastcall TForm1::Timer3Timer(TObject *Sender)
{
void *hdc=CreateDCA("DISPLAY",NULL,NULL,NULL);
if(GetPixel(hdc,336,70) == 1573045)
GetPixel(hdc,1,1);
else
keybd_event(VK_F4, 0, 0, 0);
keybd_event(VK_F4, 0, KEYEVENTF_KEYUP, 0);
}
[color=green]//---------------------------------------------------------------------------[/color]
Записан
zubr
Гость
« Ответ #7 : 02-08-2008 03:34 » 

Для одного монитора проще:
Код:
hdc = GetDC(NULL);
Вариант с CreateDC - для случая с несколькими мониторами.
Цитата
hWnd
[in] Handle to the window whose DC is to be retrieved. If this value is NULL, GetDC retrieves the DC for the entire screen.
Windows 98/Me, Windows 2000/XP: To get the DC for a specific display monitor, use the EnumDisplayMonitors and CreateDC functions.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines