Что нового

AutoItX + Delphi первый старт или как использовать.

sendsay

sendsay
Сообщения
29
Репутация
0
Не могу понять как их соединить. Думаю что я не первый. Максимум что я сделал, это вызвал из Dll функцию WinExists, и та не реагирует на появление нужного окна.
А MouseMove вообще рожает run-time error.
Помогите кто чем может!
Очень надо их соединить, если это сделать то нет необходимости изучать WinAPI, так как нужные мне функции есть в AutoItX.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sendsay [?]
вызвал из Dll функцию WinExists
Нужно не вызывать, а использовать методы и свойства объекта «AutoItX3.Control» (после регистраций Dll). В справке есть примеры использования.
 
Автор
S

sendsay

sendsay
Сообщения
29
Репутация
0
Так там пример на VB кажется или я ошибаюсь?
Если да то значит надо изучить COM технологию?

Кажется я на верном пути!!!!! Уже читаю про использование СОМ технологии.

Спасибо CreatoR
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
sendsay
в смысле "если да"? вызов методов из библиотеки осуществляется посредством COM-интерфейса, независимо от ЯП в котором он был применен. уверен, что Delphi умеет это делать
 
Автор
S

sendsay

sendsay
Сообщения
29
Репутация
0
Kaster сказал(а):
sendsay
в смысле "если да"? вызов методов из библиотеки осуществляется посредством COM-интерфейса, независимо от ЯП в котором он был применен. уверен, что Delphi умеет это делать
Чё то ты меня совсем запутал!!!! ))))) Дельфи может работать с ДЛЛ вызывая функции внутри ДЛЛ, но для этого надо знать параметры этих функций (типы парамеров), это сказали, узнать почти не возможно. Так же Дельфи может работать с СОМ технологиями, вот тут я полный ноль. Хотя вызывать функции из ДЛЛ я недавно научился, может по этому не получается? ))))) Сейчас прочитаю про СОМ, и думаю что нибудь придумаю. Но от помощи все равно не отказываюсь!!! ;)
 

SyDr

Сидра
Сообщения
651
Репутация
158
CreatoR [?]
Нужно не вызывать, а использовать методы и свойства объекта «AutoItX3.Control» (после регистраций Dll). В справке есть примеры использования.
Kaster [?]
в смысле "если да"? вызов методов из библиотеки осуществляется посредством COM-интерфейса, независимо от ЯП в котором он был применен. уверен, что Delphi умеет это делать
AutoItX предоставляет не только COM-интерфейс, но и DLL-интерфейс.

sendsay
Открой справку. Там всё есть.

AutoItX can be used as a standard DLL from any language capable of calling functions in external DLLs.

The following files are provided to allow you to use the DLL (for the C/C++ language):
AutoIt3.h - C language header file showing the exported functions and parameters
AutoItX3.lib - Microsoft format import library
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
SyDr [?]
AutoItX предоставляет не только COM-интерфейс, но и DLL-интерфейс
Я пару раз пытался это сделать, у меня не получалось, поэтому я и предположил что оно работает только как COM.
 
Автор
S

sendsay

sendsay
Сообщения
29
Репутация
0
CreatoR сказал(а):
SyDr [?]
AutoItX предоставляет не только COM-интерфейс, но и DLL-интерфейс
Я пару раз пытался это сделать, у меня не получалось, поэтому я и предположил что оно работает только как COM.
Так вот я о том же. Из ДЛЛ вызвать как то не получается. Вернее получается но работает не так как надо. Прочитал про СОМ. Для использования это способа надо знать GUID интерфейса AutoItX. Если я правильно понимаю то этот GUID создается когда ДЛЛ регистрируется в системе. Блин как все запущенно!!! )))))) Продолжаю читать про СОМ, там еще все хуже!!! :smile: Но от помощи не отказываюсь.

HELP - мощная вещь!!!! СПС - SyDr. Читаем, Читаем и еще раз Читаем!!!!
 
Автор
S

sendsay

sendsay
Сообщения
29
Репутация
0
НУ ЧТО НЕ ТАК!!!!!! Мышь прыгает в левый верхний угол и Access violation ...... , а вот MinimizeAll работает. Может какую инициализацию провести?? Или как то параметры хитро задать???????? HELPPPPPPPPP !!!!!!!
 

SyDr

Сидра
Сообщения
651
Репутация
158
Не кричи. И так всё слышно.

Одно из двух:
1) Ты неправильно используешь библиотеку. В этом случае её неправильно использую и я:
Похожий код на FPC выдаёт похожий результат. При передаче функции любых параметров, курсор мыши со случайной (но обычно большой) скоростью перемещается в один из трёх углов (верхние и левый нижний). Причём, даже если передаю одни и те же параметры, курсор может "прыгать" по углам. Функция всегда возвращает 1. Иногда приводит к краху программы.
2) Что-то неправильно с самой функцией.

P. S. Код обычно не выкладывают в виде скриншотов :smile:
 
Автор
S

sendsay

sendsay
Сообщения
29
Репутация
0
SyDr сказал(а):
Не кричи. И так всё слышно.

Одно из двух:
1) Ты неправильно используешь библиотеку. В этом случае её неправильно использую и я:
Похожий код на FPC выдаёт похожий результат. При передаче функции любых параметров, курсор мыши со случайной (но обычно большой) скоростью перемещается в один из трёх углов (верхние и левый нижний). Причём, даже если передаю одни и те же параметры, курсор может "прыгать" по углам. Функция всегда возвращает 1. Иногда приводит к краху программы.
2) Что-то неправильно с самой функцией.

P. S. Код обычно не выкладывают в виде скриншотов :smile:

1) Если функция такая "прибацанная", то ее разработчик знает об этом? Надеюсь что да, и он уже ночей не спит пытается исправить!! :laugh: И у меня возвращает 0
2) Не было времени разбираться, как код из Дельфи в пихнуть в этот форум (жена кричала что мы уже опаздываем) :smile:

Да и не кричу я, я просто весь горю от не терпения. :laugh:


Добавлено:
Сообщение автоматически объединено:

Блин, я в ШОКЕ!!!! Ни чего не получается. :mad: :mad: :mad: Я уже пробую другие функции, и все равно ничего не работает. Работают только процедуры без параметров. Что это может быть?, может это я дурак или ...................
Пойду погоняю монстров. Утро вечера мудренее!!!! :smile:
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Я попробовал использовать эту библиотеку из AutoIt.
Сначала я прочитал чуть-чуть тут http://www.script-coding.info/AutiItX.html
и зарегистрировал эту библиотеку, как там написано.
Затем открыл справку "AutoItX" -> "DLL Interface" -> "Function Prototypes",
нашел там такую строку: AU3_API long WINAPI AU3_MouseMove(long nX, long nY, /*[in,defaultvalue(-1)]*/long nSpeed);
и попробовал выполнить такой код:
Код:
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 100, "long", 200)

действие произошло, но вываливается ошибка.
Тогда решил добавить еще один параметр (уже из справки AutoIt - скорость перемещения мыши) и получился такой код:
Код:
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 500, "long", 700, "long", 10)

действие произошло без сообщений о ошибках.
Это все.
Не знаю как там в Delphi, но возможно это то.
 
Автор
S

sendsay

sendsay
Сообщения
29
Репутация
0
Yuriy сказал(а):
Я попробовал использовать эту библиотеку из AutoIt.
Сначала я прочитал чуть-чуть тут http://www.script-coding.info/AutiItX.html
и зарегистрировал эту библиотеку, как там написано.
Затем открыл справку "AutoItX" -> "DLL Interface" -> "Function Prototypes",
нашел там такую строку: AU3_API long WINAPI AU3_MouseMove(long nX, long nY, /*[in,defaultvalue(-1)]*/long nSpeed);
и попробовал выполнить такой код:
Код:
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 100, "long", 200)

действие произошло, но вываливается ошибка.
Тогда решил добавить еще один параметр (уже из справки AutoIt - скорость перемещения мыши) и получился такой код:
Код:
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 500, "long", 700, "long", 10)

действие произошло без сообщений о ошибках.
Это все.
Не знаю как там в Delphi, но возможно это то.

Спс за помощь, но я пробовал указывать Speed и не помогло.
Да и ты используешь для вызова функции AutoIt, там все работает, я там уже давно пробовал !!! :(
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Решил проверить на другом ЯП. Более-менее (так себе) знаком с PureBasic.
Вот код (примитив) на PureBasic:
Код:
OpenLibrary(1, "C:\WINDOWS\system32\AutoItX3.dll") ; я ее так зарегистрировал
x.l = 500 ; координата x (long)
y.l = 700 ; координата y (long)
z.l = 30 ; скорость перемещения курсора (long)
CallFunction(1, "AU3_MouseMove", x, y, z)
CallFunction(1, "AU3_MouseMove", x + 300 , y + 100, z - 10)
CallFunction(1, "AU3_MouseMove", x - 300 , y - 100, z + 50)
End

Вот еще EXE этого кода (MouseMove1.rar)
И там точно такая же история была (не хватало третьего параметра - без него ошибка)
 
Автор
S

sendsay

sendsay
Сообщения
29
Репутация
0
Yuriy сказал(а):
Решил проверить на другом ЯП. Более-менее (так себе) знаком с PureBasic.
Вот код (примитив) на PureBasic:
Код:
OpenLibrary(1, "C:\WINDOWS\system32\AutoItX3.dll") ; я ее так зарегистрировал
x.l = 500 ; координата x (long)
y.l = 700 ; координата y (long)
z.l = 30 ; скорость перемещения курсора (long)
CallFunction(1, "AU3_MouseMove", x, y, z)
CallFunction(1, "AU3_MouseMove", x + 300 , y + 100, z - 10)
CallFunction(1, "AU3_MouseMove", x - 300 , y - 100, z + 50)
End

Вот еще EXE этого кода (MouseMove1.rar)
И там точно такая же история была (не хватало третьего параметра - без него ошибка)

Странно!!! Но у меня твой ехе не работает, мышь мигнула раз и все.
Параметр Speed, я задавал и все равно не работает. Пробую другие функции, все не работают, работают только те которые не имеют параметров (напр. MinimizeAll)
Спс за помощь.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Зарегистрируй библиотеку.
(Скопировать AutoItX3.dll в C:\WINDOWS\system32 и выполнить regsvr32.exe "C:\WINDOWS\system32\AutoItX3.dll")
Перезагрузить ПК.
Теперь что?
P.S. у меня WinXP Pro RUS SP3 - работает норм.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
после регистрации библиотеки, использовать все функции надо в соответствии с его объектной моделью. то есть (не знаю как там в дельфи, но скажем на VB)
Код:
Set oAutoIt = WScript.CreateObject("AutoItX3.Control")

value = oAutoIt.PixelSearch(0,0, 100, 100, 0)
If oAutoIt.error = 1 Then
  WScript.Echo "Colour not found"
Else
  WScript.Echo "Colour found at: " & value(0) & "," & value(1)
End If
то есть сначала нужно вызвать конструктор (аналог ObjCreate в AutoIt), а потом уже вызывать методы и атрибуты, отделяя их от корневого метода точкой.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Yuriy сказал(а):
Код:
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 100, "long", 200)

действие произошло, но вываливается ошибка.
Тогда решил добавить еще один параметр (уже из справки AutoIt - скорость перемещения мыши) и получился такой код:
Код:
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 500, "long", 700, "long", 10)

действие произошло без сообщений о ошибках.

Вы не можете игнорировать параметры при вызове функций из DLL. Все параметры должны быть перечислены в стого определенной последовательности и иметь соответствующий тип.
 
Автор
S

sendsay

sendsay
Сообщения
29
Репутация
0
Yuriy сказал(а):
Зарегистрируй библиотеку.
(Скопировать AutoItX3.dll в C:\WINDOWS\system32 и выполнить regsvr32.exe "C:\WINDOWS\system32\AutoItX3.dll")
Перезагрузить ПК.
Теперь что?
P.S. у меня WinXP Pro RUS SP3 - работает норм.
Зарегистрировал, а вот перезагрузить кажется забыл.
Вечером проверю, а то на работу, надо идти.
У меня Вин7 максимальная, до этого ВСЕ работало. ))))


Добавлено:
Сообщение автоматически объединено:

Kaster сказал(а):
после регистрации библиотеки, использовать все функции надо в соответствии с его объектной моделью. то есть (не знаю как там в дельфи, но скажем на VB)
Код:
Set oAutoIt = WScript.CreateObject("AutoItX3.Control")

value = oAutoIt.PixelSearch(0,0, 100, 100, 0)
If oAutoIt.error = 1 Then
  WScript.Echo "Colour not found"
Else
  WScript.Echo "Colour found at: " & value(0) & "," & value(1)
End If
то есть сначала нужно вызвать конструктор (аналог ObjCreate в AutoIt), а потом уже вызывать методы и атрибуты, отделяя их от корневого метода точкой.
Вам просто говорить потому что вы пишите на VB, а пример из справки тоже на нем.
Поэтому у вас все работает, вам не надо переводить этот пример на другой язык.
Может надо и мне VB изучить, и не морочить яйца ни себе ни людям. ))))
Да и оно как бы работает, функции без параметров (MinimizeAll), а вот с параметрами - Access violation ....
Похоже на не стыковку типов.
Ладно на работу буду пробовать.
Всем спс.


Добавлено:
Сообщение автоматически объединено:

Yashied сказал(а):
Yuriy сказал(а):
Код:
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 100, "long", 200)

действие произошло, но вываливается ошибка.
Тогда решил добавить еще один параметр (уже из справки AutoIt - скорость перемещения мыши) и получился такой код:
Код:
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 500, "long", 700, "long", 10)

действие произошло без сообщений о ошибках.

Вы не можете игнорировать параметры при вызове функций из DLL. Все параметры должны быть перечислены в стого определенной последовательности и иметь соответствующий тип.
Так я и не игнорирую, посмотри выше (скриншот), я смотрю AutiItX.h и в соответствии с ним описываю вызов функции, и задаю параметры и типы мне кажется что я не правильно это делаю, я не уверен, но как то чувствуется. )))
напр. MouseMove(X, Y, Speed: longinteger): longinteger;
Этой функции надо три параметра Longint (X, Y, Speed), а вернет она тоже Longint, то есть результат исполнения.
Правильно????
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
sendsay [?]
Поэтому у вас все работает, вам не надо переводить этот пример на другой язык.
еще раз, я не знаком с Delphi, но могу точно сказать, что ты пытаешься вызвать функцию непосредственно из библиотеки. Для этого регистрировать библиотеку не надо. Но! после регистрации можно пользоваться непосредственно объектной модель. Для этого использую специальный ключевые слова, о которых я не знаю, нужно вызвать конструктор и создать корневой объект AutoItX3.Control. Из которого уже доступные все остальные методы AutoIt.


Добавлено:
Сообщение автоматически объединено:

однако, выполнив работу за тебя, нашел в инете функцию конструктора для Delphi и выглядит она, как ни странно весьма аналогично многим другим ЯП
Код:
au3OLE := CreateOleObject('AutoItX3.Control');
au3OLE.Run('notepad')
 
Верх