![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование библиотеки AutoIt [D7, XP]
worldmen © (2010-07-18 20:09:00)Кто-нибудь использовал библиотеку 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.
Юрий Зотов (2010-07-19 17:51:00) [1]Зачем выводить в Label? Поставьте брейкпойнт и посмотрите отладчиком. Дожно работать.
Да даже если и не работало бы - все равно ведь чему-то R, G, B равны? Пусть хоть любому мусору - но чему-то все равно равны. Значит, в любом случае хоть что-нибудь, но должно выводиться.
Только вместо нуля я бы использовал GetDesktopWindow. Кто их знает, этих мелкомягких...
RWolf (2010-07-19 16:37:00) [2]
> Переменные R,G,B вообще ничему не равны.
Не бывает в дельфях такого. Лейблы чересчур узкие, наверно.
worldmen (2010-07-19 14:54:00) [3]> Ради какого-то несчастного цвета пикселя.
Там есть куча процедур которые я тоже использовал бы.
А вот такая процедура ничего не выводит:
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=
Юрий Зотов (2010-07-18 23:12:00) [4]> "Access violation at address 00420EE4 in module ... Read of adress "
> останавливается на строке
> 16: Bmp.PixelFormat := pf16Bit;
Bmp кривое. Или еще не создано, или уже убито.
Но вместо того, чтобы найти и убрать ошибку, мы подключаем аж целую навороченную библиотеку. Ради какого-то несчастного цвета пикселя.
Юрий Зотов (2010-07-18 23:08:00) [5]А просто GetPixel(DC, X, Y) вместо всего этого - не канает?
worldmen (2010-07-18 22:35:00) [6]Умею я средствами 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;
SD Software (2010-07-18 21:16:00) [7]
> Возможности AutoItX3
>
> Блокировка/разрешение ввода пользователя
> Открытие/закрытие лотка CD-ROM.
> Запись/чтение текста из буфера обмена
> ...
А средствами Delphi ни как?
QAZ (2010-07-18 21:15:00) [8]не найти в гугле как двигать курсор-это надо уметь