![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() сделал прогу которая в зависимости от цвета жмет на кнопку
(программма делалась для игры) так вот когда игра в оконом режиме все норм работает но как только разворачиваеш во весь экран перестает работать (т.е постоянна жмет на кнопку необрашая внимания на цвет пикселя) вот код проги (немного урезан вконце изза ограничения в 10к символов): Код:
unit Unit1; procedure TForm1.startClick(Sender: TObject); begin d1:=strtoint(edt1.Text); d2:=strtoint(edt2.text); d3:=strtoint(edt3.text); p1:=(key1.ItemIndex); p2:=(key2.ItemIndex); p3:=(key3.ItemIndex); nkey1.Interval:= d1; nkey2.Interval:=d2; nkey3.Interval:=d3; nkey1.Enabled:= Not(nkey1.Enabled); nkey2.Enabled:= Not(nkey2.Enabled); nkey3.Enabled:= Not(nkey3.Enabled); end; procedure TForm1.windowClick(Sender: TObject); begin hwndtmr.Enabled:= Not(hwndtmr.Enabled); end; procedure TForm1.hwndtmrTimer(Sender: TObject); begin if (getasynckeystate($13)<>0) then //условия на то чтоб было нажатие кнопки begin GetCursorPos( Pos ); //определяет координаты курсора Wnd:= WindowFromPoint( Pos );//запоминает хвид окна который под курсорам hwndtmr.Enabled:= Not(hwndtmr.Enabled); ShowMessage('окно захваченно!'); end end; procedure TForm1.zdc1Click(Sender: TObject); begin zdc1tmr.Enabled:= Not(zdc1tmr.Enabled); end; procedure TForm1.zdc1tmrTimer(Sender: TObject); begin GetCursorPos(pos); DC:=GetDC(0); colzdc1:=GetPixel(DC,pos.x,pos.y); ReleaseDC(0,DC); shp1.brush.Color:=colzdc1; if (getasynckeystate($13)<>0) then //условия на то чтоб было нажатие кнопки begin SetForeGroundWindow(wnd); GetCursorPos(pos); DC:=GetDC(0); colzdc1:=GetPixel(DC,pos.x,pos.y); kx1:=Pos.X; ky1:=Pos.Y; ReleaseDC(0,DC); shp1.brush.Color:=colzdc1; zdc1tmr.Enabled:= Not(zdc1tmr.Enabled); ShowMessage('цвет захвачен(1)!'); end end; procedure TForm1.zdc2Click(Sender: TObject); begin zdc2tmr.Enabled:= Not(zdc2tmr.Enabled); end; procedure TForm1.zdc2tmrTimer(Sender: TObject); begin GetCursorPos(pos); DC:=GetDC(0); colzdc2:=GetPixel(DC,pos.x,pos.y); ReleaseDC(0,DC); shp2.brush.Color:=colzdc2; if (getasynckeystate($13)<>0) then //условия на то чтоб было нажатие кнопки begin SetForeGroundWindow(wnd); GetCursorPos(pos); DC:=GetDC(0); colzdc1:=GetPixel(DC,pos.x,pos.y); kx2:=Pos.X; ky2:=Pos.Y; ReleaseDC(0,DC); shp2.brush.Color:=colzdc2; zdc2tmr.Enabled:= Not(zdc2tmr.Enabled); ShowMessage('цвет захвачен!(2)'); end end; procedure TForm1.zdc3Click(Sender: TObject); begin zdc3tmr.Enabled:= Not(zdc3tmr.Enabled); end; procedure TForm1.zdc3tmrTimer(Sender: TObject); begin GetCursorPos(pos); DC:=GetDC(0); colzdc3:=GetPixel(DC,pos.x,pos.y); ReleaseDC(0,DC); shp3.brush.Color:=colzdc3; if (getasynckeystate($13)<>0) then //условия на то чтоб было нажатие кнопки begin SetForeGroundWindow(wnd); GetCursorPos(pos); DC:=GetDC(0); colzdc3:=GetPixel(DC,pos.x,pos.y); kx3:=Pos.X; ky3:=Pos.Y; ReleaseDC(0,DC); shp3.brush.Color:=colzdc3; zdc3tmr.Enabled:= Not(zdc3tmr.Enabled); ShowMessage('цвет захвачен!(3)'); end end; procedure TForm1.nkey1Timer(Sender: TObject); begin if p1<>0 then begin DC:=GetDC(0); colsr:=GetPixel(DC,kx1,ky1); if (colsr<>colzdc1)and (p1=1) then begin PostMessage(wnd,WM_KEYDOWN,vk_F1, 0); PostMessage(wnd,WM_KEYUP,vk_F1, 0); end; if (colsr<>colzdc1)and (p1=2) then begin PostMessage(wnd,WM_KEYDOWN,vk_F2, 0); PostMessage(wnd,WM_KEYUP,vk_F2, 0); end; if (colsr<>colzdc1)and (p1=3) then begin PostMessage(wnd,WM_KEYDOWN,vk_F3, 0); PostMessage(wnd,WM_KEYUP,vk_F3, 0); end; if (colsr<>colzdc1)and (p1=3) then begin PostMessage(wnd,WM_KEYDOWN,vk_F3, 0); PostMessage(wnd,WM_KEYUP,vk_F3, 0); end; if (colsr<>colzdc1)and (p1=4) then begin PostMessage(wnd,WM_KEYDOWN,vk_F4, 0); PostMessage(wnd,WM_KEYUP,vk_F4, 0); end; if (colsr<>colzdc1)and (p1=5) then begin PostMessage(wnd,WM_KEYDOWN,vk_F5, 0); PostMessage(wnd,WM_KEYUP,vk_F5, 0); end; if (colsr<>colzdc1)and (p1=6) then begin PostMessage(wnd,WM_KEYDOWN,vk_F6, 0); PostMessage(wnd,WM_KEYUP,vk_F6, 0); end; if (colsr<>colzdc1)and (p1=7) then begin PostMessage(wnd,WM_KEYDOWN,vk_F7, 0); PostMessage(wnd,WM_KEYUP,vk_F7, 0); end; if (colsr<>colzdc1)and (p1=8) then begin PostMessage(wnd,WM_KEYDOWN,vk_F8, 0); PostMessage(wnd,WM_KEYUP,vk_F8, 0); end; if (colsr<>colzdc1)and (p1=9) then begin PostMessage(wnd,WM_KEYDOWN,vk_F9, 0); PostMessage(wnd,WM_KEYUP,vk_F9, 0); end; if (colsr<>colzdc1)and (p1=10) then begin PostMessage(wnd,WM_KEYDOWN,vk_F10, 0); PostMessage(wnd,WM_KEYUP,vk_F10, 0); end; if (colsr<>colzdc1)and (p1=11) then begin PostMessage(wnd,WM_KEYDOWN,vk_F11, 0); PostMessage(wnd,WM_KEYUP,vk_F11, 0); end; if (colsr<>colzdc1)and (p1=12) then begin PostMessage(wnd,WM_KEYDOWN,vk_F12, 0); PostMessage(wnd,WM_KEYUP,vk_F12, 0); end; ReleaseDC(0,DC); end; end; procedure TForm1.nkey2Timer(Sender: TObject); begin if p2<>0 then begin DC:=GetDC(0); colsr2:=GetPixel(DC,kx2,ky2); if (colsr2<>colzdc2)and (p2=1) then begin PostMessage(wnd,WM_KEYDOWN,vk_F1, 0); PostMessage(wnd,WM_KEYUP,vk_F1, 0); end; if (colsr2<>colzdc2)and (p2=2) then begin PostMessage(wnd,WM_KEYDOWN,vk_F2, 0); PostMessage(wnd,WM_KEYUP,vk_F2, 0); end; if (colsr2<>colzdc2)and (p2=3) then begin PostMessage(wnd,WM_KEYDOWN,vk_F3, 0); PostMessage(wnd,WM_KEYUP,vk_F3, 0); end; if (colsr2<>colzdc2)and (p2=3) then begin PostMessage(wnd,WM_KEYDOWN,vk_F3, 0); PostMessage(wnd,WM_KEYUP,vk_F3, 0); end; if (colsr2<>colzdc2)and (p2=4) then begin PostMessage(wnd,WM_KEYDOWN,vk_F4, 0); PostMessage(wnd,WM_KEYUP,vk_F4, 0); end; if (colsr2<>colzdc2)and (p2=5) then begin PostMessage(wnd,WM_KEYDOWN,vk_F5, 0); PostMessage(wnd,WM_KEYUP,vk_F5, 0); end; if (colsr2<>colzdc2)and (p2=6) then begin PostMessage(wnd,WM_KEYDOWN,vk_F6, 0); PostMessage(wnd,WM_KEYUP,vk_F6, 0); end; if (colsr2<>colzdc2)and (p2=7) then begin PostMessage(wnd,WM_KEYDOWN,vk_F7, 0); PostMessage(wnd,WM_KEYUP,vk_F7, 0); end; if (colsr2<>colzdc2)and (p2=8) then begin PostMessage(wnd,WM_KEYDOWN,vk_F8, 0); PostMessage(wnd,WM_KEYUP,vk_F8, 0); end; if (colsr2<>colzdc2)and (p2=9) then begin PostMessage(wnd,WM_KEYDOWN,vk_F9, 0); PostMessage(wnd,WM_KEYUP,vk_F9, 0); end; if (colsr2<>colzdc2)and (p2=10) then begin PostMessage(wnd,WM_KEYDOWN,vk_F10, 0); PostMessage(wnd,WM_KEYUP,vk_F10, 0); end; if (colsr2<>colzdc2)and (p2=11) then begin PostMessage(wnd,WM_KEYDOWN,vk_F11, 0); PostMessage(wnd,WM_KEYUP,vk_F11, 0); end; if (colsr2<>colzdc2)and (p2=12) then begin PostMessage(wnd,WM_KEYDOWN,vk_F12, 0); PostMessage(wnd,WM_KEYUP,vk_F12, 0); end; ReleaseDC(0,DC); end; end; procedure TForm1.nkey3Timer(Sender: TObject); begin if p3<>0 then begin DC:=GetDC(0); colsr3:=GetPixel(DC,kx3,ky3); if (colsr3<>colzdc3)and (p3=1) then begin PostMessage(wnd,WM_KEYDOWN,vk_F1, 0); PostMessage(wnd,WM_KEYUP,vk_F1, 0); end; if (colsr3<>colzdc3)and (p3=2) then begin PostMessage(wnd,WM_KEYDOWN,vk_F2, 0); PostMessage(wnd,WM_KEYUP,vk_F2, 0); end; if (colsr3<>colzdc3)and (p3=3) then begin PostMessage(wnd,WM_KEYDOWN,vk_F3, 0); PostMessage(wnd,WM_KEYUP,vk_F3, 0); end; if (colsr3<>colzdc3)and (p3=3) then begin PostMessage(wnd,WM_KEYDOWN,vk_F3, 0); PostMessage(wnd,WM_KEYUP,vk_F3, 0); end; вот часть кода которыя показывает как я определяю цвет пикселя (и его координаты) Код:
procedure TForm1.zdc3tmrTimer(Sender: TObject); begin GetCursorPos(pos); DC:=GetDC(0); colzdc3:=GetPixel(DC,pos.x,pos.y); ReleaseDC(0,DC); shp3.brush.Color:=colzdc3; if (getasynckeystate($13)<>0) then //условия на то чтоб было нажатие кнопки begin SetForeGroundWindow(wnd); GetCursorPos(pos); DC:=GetDC(0); colzdc3:=GetPixel(DC,pos.x,pos.y); kx3:=Pos.X; ky3:=Pos.Y; ReleaseDC(0,DC); shp3.brush.Color:=colzdc3; zdc3tmr.Enabled:= Not(zdc3tmr.Enabled); ShowMessage('цвет захвачен!(3)'); end как еще можно получить цвет пикселя? можно ли как вариант делать скриншот и из него узнавать цвет? (и как это сделать, насколько затратная эта операция в плане загрузки ресурсов компа) |