Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];
ВнизИспользование библиотеки AutoIt Найти похожие ветки
← →
worldmen (2010-07-18 20:09) [0]Кто-нибудь использовал библиотеку AutoIt (http://www.script-coding.info/AutiItX.html)
Хотел использовать некоторые процедуры:
MouseMove - Перемещает указатель мыши
PixelGetColor - Возвращает цвет пикселя в координатах x, y.
Но при написании кода возникают ошибки:"Too many actual parameters"procedure MouseMove; external "AutoItX3.dll";
implementation
procedure My;
begin
MouseMove(500,100,50);
End;
ПС: пробовал в AutoIt писать - работает отлично, но мне надо на Delphi.
← →
QAZ (2010-07-18 21:15) [1]не найти в гугле как двигать курсор-это надо уметь
← →
SD Software (2010-07-18 21:16) [2]
> Возможности AutoItX3
>
> Блокировка/разрешение ввода пользователя
> Открытие/закрытие лотка CD-ROM.
> Запись/чтение текста из буфера обмена
> ...
А средствами Delphi ни как?
← →
worldmen (2010-07-18 22:35) [3]Умею я средствами Delphi двигать курсор, нажимать правую и левую кнопку.
А я хочу подключить AutoItX3. У меня ща проблема при определении цвета пикселя - то работает, то ошибка - " Access violation at address 00420EE4 in module ... Read of adress "
останавливается на строке16: Bmp.PixelFormat := pf16Bit;
При этом я эту процедуру перенес с др. своей проги и там она работала пол года без проблем и использовалась очень часто.
Определение цвета пикселя:
procedure TForm.PrintScreen(x,y,w,h: integer; var bmp :TBitmap; FBit :Word);
var
DC: HDC;
Begin // создаем копию области
try
case FBit of
8: Bmp.PixelFormat := pf8Bit;
16: Bmp.PixelFormat := pf16Bit;
24: Bmp.PixelFormat := pf24Bit;
end;
bmp.Width := w;
bmp.Height:= h;
DC := GetDC(0);
StretchBlt(bmp.Canvas.Handle,0,0, w,h, DC,x,y, w,h, SRCCOPY);
ReleaseDC(0, DC);
except
on E: Exception do
begin
Writeln(FLog,TimeToStr(Now)+" "+ E.Message+". Координаты точки: W="+IntToStr(w)+", h="+IntToStr(h)+", x="+IntToStr(x)+", y="+IntToStr(y));
end;
end;
End;
procedure .....
Var
bmpDoc: TBitmap;
R,G,B : Word;
begin
bmpDoc := TBitmap.Create;
PrintScreen(x, y, 1, 1, bmpDoc, 16);
R := GetRValue(bmpDoc.Canvas.Pixels[0,0]);
G := GetGValue(bmpDoc.Canvas.Pixels[0,0]);
B := GetBValue(bmpDoc.Canvas.Pixels[0,0]);
...........
bmpDoc.Free;
end;
← →
Юрий Зотов © (2010-07-18 23:08) [4]А просто GetPixel(DC, X, Y) вместо всего этого - не канает?
← →
Юрий Зотов © (2010-07-18 23:12) [5]> "Access violation at address 00420EE4 in module ... Read of adress "
> останавливается на строке
> 16: Bmp.PixelFormat := pf16Bit;
Bmp кривое. Или еще не создано, или уже убито.
Но вместо того, чтобы найти и убрать ошибку, мы подключаем аж целую навороченную библиотеку. Ради какого-то несчастного цвета пикселя.
← →
worldmen (2010-07-19 14:54) [6]> Ради какого-то несчастного цвета пикселя.
Там есть куча процедур которые я тоже использовал бы.
А вот такая процедура ничего не выводит:procedure TForm1.BitBtn3Click(Sender: TObject);
var
DC: HDC;
Color: Cardinal;
X ,Y : word;
R,G,B : Word;
begin
x:= 100;
y:= 100;
DC := GetDC(0);
Color := GetPixel(DC, X, Y);
ReleaseDC(0, DC);
R := GetRValue(Color);
G := GetGValue(Color);
B := GetBValue(Color);
Label5.Caption:="R= "+IntToStr(R);
Label6.Caption:="G= "+IntToStr(G);
Label7.Caption:="B= "+IntToStr(B);
End;
Переменные R,G,B вообще ничему не равны. Выводит просто
R=
G=
B=
← →
RWolf © (2010-07-19 16:37) [7]
> Переменные R,G,B вообще ничему не равны.
Не бывает в дельфях такого. Лейблы чересчур узкие, наверно.
← →
Юрий Зотов © (2010-07-19 17:51) [8]Зачем выводить в Label? Поставьте брейкпойнт и посмотрите отладчиком. Дожно работать.
Да даже если и не работало бы - все равно ведь чему-то R, G, B равны? Пусть хоть любому мусору - но чему-то все равно равны. Значит, в любом случае хоть что-нибудь, но должно выводиться.
Только вместо нуля я бы использовал GetDesktopWindow. Кто их знает, этих мелкомягких...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c