Автор Тема: AutoItX + Delphi первый старт или как использовать.  (Прочитано 23250 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yuriy [?]

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

Русское сообщество AutoIt

Re: AutoItX + Delphi первый старт или как использовать.
« Ответ #15 Отправлен: Декабрь 05, 2010, 23:38:14 »

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
после регистрации библиотеки, использовать все функции надо в соответствии с его объектной моделью. то есть (не знаю как там в дельфи, но скажем на 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), а потом уже вызывать методы и атрибуты, отделяя их от корневого метода точкой.
Конференция посвященная AutoIt на jabber.ru - [email protected]
Как попасть на конференцию читаем тут


Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Код: AutoIt [Выделить]
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 100, "long", 200)

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

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

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


Думай, прежде чем говорить.

Оффлайн sendsay [?]

  • Новичок
  • *
  • Сообщений: 29

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


Добавлено: Декабрь 06, 2010, 07:36:37
после регистрации библиотеки, использовать все функции надо в соответствии с его объектной моделью. то есть (не знаю как там в дельфи, но скажем на 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 ....
Похоже на не стыковку типов.
Ладно на работу буду пробовать.
Всем спс. 


Добавлено: Декабрь 06, 2010, 07:42:31
Код: AutoIt [Выделить]
$result = DllCall("AutoItX3.dll", "long", "AU3_MouseMove", "long", 100, "long", 200)

действие произошло, но вываливается ошибка.
Тогда решил добавить еще один параметр (уже из справки AutoIt - скорость перемещения мыши) и получился такой код:
Код: 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, то есть результат исполнения.
Правильно????
« Последнее редактирование: Декабрь 06, 2010, 07:42:32 от sendsay, Причина: Объединение сообщений »
Abeunt studia in mores.

Русское сообщество AutoIt

Re: AutoItX + Delphi первый старт или как использовать.
« Ответ #18 Отправлен: Декабрь 06, 2010, 07:29:34 »

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
sendsay  [?]
Цитировать
Поэтому у вас все работает, вам не надо переводить этот пример на другой язык.
еще раз, я не знаком с Delphi, но могу точно сказать, что ты пытаешься вызвать функцию непосредственно из библиотеки. Для этого регистрировать библиотеку не надо. Но! после регистрации можно пользоваться непосредственно объектной модель. Для этого использую специальный ключевые слова, о которых я не знаю, нужно вызвать конструктор и создать корневой объект AutoItX3.Control. Из которого уже доступные все остальные методы AutoIt.


Добавлено: Декабрь 06, 2010, 08:30:07
однако, выполнив работу за тебя, нашел в инете функцию конструктора для Delphi и выглядит она, как ни странно весьма аналогично многим другим ЯП
au3OLE := CreateOleObject('AutoItX3.Control');
au3OLE.Run('notepad')
« Последнее редактирование: Декабрь 06, 2010, 08:30:07 от Kaster, Причина: Объединение сообщений »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Правильно????

Да. А еще нужно указать полный путь к DLL или закинуть его, как было сказано выше, в системную папку или в папку с проектом. Но лучше испоьзовать COM интерфейс, т.к. он предоставляет несравнимо больше функций.

Оффлайн sendsay [?]

  • Новичок
  • *
  • Сообщений: 29

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


Добавлено: Декабрь 06, 2010, 08:30:07
однако, выполнив работу за тебя, нашел в инете функцию конструктора для Delphi и выглядит она, как ни странно весьма аналогично многим другим ЯП
au3OLE := CreateOleObject('AutoItX3.Control');
au3OLE.Run('notepad')
Спс. Но я пытаюсь избежать СОМ. Так как это надо изучать и устанавливать сложнее. Но видно никуда не денешься. Буду пробовать СОМ.

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
sendsay  [?]
Цитировать
Так как это надо изучать и устанавливать сложнее
хм. а на чем основаны эти выводы? вызывать методы куда проще чем вытягивать функцию из сырой библиотеки с указанием кучи параметров и их типов. да и потом, тот хелп что в папаке с AutoItX как раз таки для COM. вызов функций так же прозрачен как и в родной среде, с одним дополнением в названии связанный с корневым объектом.
поэтому мне, если честно, твоя позиция непонятна.

Русское сообщество AutoIt

Re: AutoItX + Delphi первый старт или как использовать.
« Ответ #22 Отправлен: Декабрь 06, 2010, 09:32:21 »

Оффлайн sendsay [?]

  • Новичок
  • *
  • Сообщений: 29

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • sendsay
    • Награды
Правильно????

Да. А еще нужно указать полный путь к DLL или закинуть его, как было сказано выше, в системную папку или в папку с проектом. Но лучше испоьзовать COM интерфейс, т.к. он предоставляет несравнимо больше функций.
Да закинул я ее в папку проeкта и system32, для верности, и зарегистрировал.
И все равно не работает. Буду пробовать СОМ. ((((



Добавлено: Декабрь 06, 2010, 09:48:34
sendsay  [?]
Цитировать
Так как это надо изучать и устанавливать сложнее
хм. а на чем основаны эти выводы? вызывать методы куда проще чем вытягивать функцию из сырой библиотеки с указанием кучи параметров и их типов. да и потом, тот хелп что в папаке с AutoItX как раз таки для COM. вызов функций так же прозрачен как и в родной среде, с одним дополнением в названии связанный с корневым объектом.
поэтому мне, если честно, твоя позиция непонятна.
Так ДЛЛ как то привычней. Я согласен что иду наверное не правильным путем, но привычная дорога легче, а новая интересней. )))) Буду читать СОМ. Спс.

Оффлайн sendsay [?]

  • Новичок
  • *
  • Сообщений: 29

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • sendsay
    • Награды
ЛЮДИ ДОБРЫЕ!!!! ВСЕМ ОГРОМНОЕ СПС ОСОБЕННО Kastor (направил меня на путь истинный). Все работает
через СОМ. Признаю это Я лох. Сам себе пудрил мозги. Заработало после вот этого:
(код на Дельфи)

procedure TForm1.JvBitBtn1Click(Sender: TObject);  // нажали кнопку на форме
var
  au3OLE : Variant ;     //переменная, так как возвращ. тип не известен то Variant
begin
   au3OLE := CreateOLEObject('AutoItX3.Control');      // подключились к контролу

   au3OLE.MouseMove(500, 500);                        //перемещаем мышь

   if au3OLE.WinExists('Калькулятор') = 1 then   //проверяем присутствие алькулятора"
      ShowMessage('OK')                                 // есть
   else
      ShowMessage('not OK');                          //нет
end;

Теперь последние мелочи.
Для использования этого метода, обязательно надо регистрировать ДЛЛ в системе!!!!!
(regsvr32.exe AutoItX3.Dll)

Как я рад!!!! :laugh:

P.S.
CreateCOMObject требует GUID контрола, поэтому использую CreateOLEObject

ВСЕ тема закрыта!!!! ВСЕ ОГРОМНОЕ СПС. ;)
« Последнее редактирование: Декабрь 06, 2010, 12:30:47 от sendsay »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 4003
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
sendsay  [?]
Цитировать
Для использования этого метода, обязательно надо регистрировать ДЛЛ в системе!!!!!(regsvr32.exe AutoItX3.Dll)
COM/OLE по жизни требует regsvr32, странно что вы такого не знали :-X

Скорблю и помню.




Оффлайн sendsay [?]

  • Новичок
  • *
  • Сообщений: 29

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • sendsay
    • Награды
sendsay  [?]
Цитировать
Для использования этого метода, обязательно надо регистрировать ДЛЛ в системе!!!!!(regsvr32.exe AutoItX3.Dll)
COM/OLE по жизни требует regsvr32, странно что вы такого не знали :-X
Вообще то, если Вы читали выше, из текста видно что я  СОМ вообще не знаю.
А написал этот факт, для таких как я, которые будут читать этот текст после меня.

Русское сообщество AutoIt

Re: AutoItX + Delphi первый старт или как использовать.
« Ответ #26 Отправлен: Декабрь 06, 2010, 19:01:22 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
136756 Просмотров
Последний ответ Июль 18, 2009, 19:36:48
от `p r o x y
3 Ответов
2814 Просмотров
Последний ответ Июнь 28, 2012, 11:35:05
от CreatoR
6 Ответов
2643 Просмотров
Последний ответ Февраль 14, 2013, 16:46:43
от gregaz
11 Ответов
10509 Просмотров
Последний ответ Май 20, 2014, 23:28:18
от GOODVIN
1 Ответов
1560 Просмотров
Последний ответ Май 28, 2014, 13:28:30
от Z_Lenar
4 Ответов
8185 Просмотров
Последний ответ Март 09, 2015, 16:33:10
от ivanius
0 Ответов
6610 Просмотров
Последний ответ Март 08, 2015, 06:19:56
от madmasles
0 Ответов
5240 Просмотров
Последний ответ Март 10, 2016, 16:39:12
от belovkirill
4 Ответов
885 Просмотров
Последний ответ Ноябрь 26, 2016, 23:12:00
от Gilman
0 Ответов
570 Просмотров
Последний ответ Январь 16, 2018, 03:55:07
от Sternman