Кидаешь на форму TImage с картинкой типа "мишень" - кому что нравится, далее используем DragAndDrop, в свойствах
DragMode ставишь
dmAutomatic, и в событии
EndDrag пишешь код:
Код:
var
Hwnd_window:THandle; //хендл окна
HwndRect:Trect; //rect окна
screen_dc:hdc; //контекст окна
bmp:tbitmap; //картинка куда все рисуем
m_Canvas:TCanvas; // канва окна
...
implementation
...
procedure TForm1.Image1EndDrag(Sender, Target: TObject; X, Y: Integer);
var
hWnd: THandle;
begin
hWnd := WindowFromPoint(Point(x,y)); //получаем идентификатор окна
Hwnd_window:=hWnd; //делаем его глобальным - в принципе лишняя строчка
GetWindowRect(hwnd,HwndRect); // получаем границы окна
screen_dc:=GetDC(Hwnd_window); // получаем графический контекст
M_Canvas:=TCanvas.Create; //создаём канву
M_Canvas.Handle:=screen_DC; // получаем канву
end;
Нашли и хендл и канву.
Если надо получить изображение то по функции/таймеру делаем
Код:
bmp:=TBitmap.Create; //создаём картинку
bmp.Width := HwndRect.right; //задаём размеры
Bmp.Height := HwndRect.Bottom;
//создание картинки и задание размеров делается в FormCreate
Bmp.Canvas.Copyrect(Rect(0,0, Bmp.Width,Bmp.Height),
m_Canvas, Rect(0,0,HwndRect.Rigth-HwndRect.left, HwndRect.bottom-HwndRect.top)); //копируем изображение из окна
далее если надо тыкнуть мышкой в окно
Код:
procedure TForm1.clik(xm,ym:integer);
var
Lparams: Lparam;
begin
LPARAMs:=makelparam(xm,ym);
postmessage(Hwnd_window,WM_LBUTTONDOWN,MK_LBUTTON,LPARAMs); //нажимаем кнопку
sleep(10);
postmessage(Hwnd_window,WM_LBUTTONUP,0,LPARAMs); //отпускаем кнопку
end;
В принципе должны быть и сообщения для перемещения курсора. Типа WM_MOUSEMOVE.
Дальше с bmp работаешь как хочешь - ищешь пиксели или анализируешь, но помним, что если нашёл координаты нужного пикселя, то его координаты будут относительно bmp(окна) а не начала экрана. т.е
0 в bmp - это HwndRect.left/top на экране.