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

  • Май 22, 2012, 14:25:26 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

Создан файловый архив для участников форума.

Закачивайте свои файлы и получайте рейтинг, прямые ссылки, и т.п.

Для изображений и скриншотов по прежнему есть AUTOIT.RV.UA

Реклама

Автор Тема: Пишем свои компоненты  (Прочитано 660 раз)

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

Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Репутация: 191
  • Offline Offline
  • Сообщений: 902
  • Версия AutoIt: 3.3.8.1
    • Награды
Пишем свои компоненты
« Создано: Февраль 13, 2012, 14:08:26 »
На оф.форуме нашёл пример как можно написать свой ActiveX компонент без компиляции и создания dll, но ни один пример так и не заработал, чуть - чуть погуглив, пришлось почитать о WSC скриптах, в принципе ни чего сложного нет, можно брать готовый шаблон и добавлять свои функции, вот пример самого компонента:

<?xml version="1.0" encoding="windows-1251" standalone="yes"?>

<?component error="true" debug="true"?>

<package>

<!--
=====================================AutoIt.Msg===================================
-->

<component id="Example">

<registration progid="AutoIt.Msg" classid="{96AE6C76-AC01-4C05-9A4B-56E46CF1076C}"/>

<public>
    <property name="Version"><get/></property>
    <property name="LastErrorInfo"><get/></property>
    <property name="LastErrorMethod"><get/></property>
    <property name="LastErrorReason"><get/></property>
    <property name="LastErrorNumber"><get/></property>
    <property name="LastErrorDescription"><get/></property>
    <property name="LastErrorSource"><get/></property>
    <event name="OnError"/>
   
    <method name="MsgCom"><parameter name="MsgCom"/></method>
</public>

<resource id="ver">1.21</resource>

<script language="VBScript"><![CDATA[

' информация о последней произошедшей ошибке
LastErrorInfo = ""
LastErrorMethod = ""
LastErrorReason = ""
LastErrorNumber = ""
LastErrorDescription = ""
LastErrorSource = ""

Sub ClearLastError()
    LastErrorInfo = ""
    LastErrorMethod = ""
    LastErrorReason = ""
    LastErrorNumber = ""
    LastErrorDescription = ""
    LastErrorSource = ""
End Sub

Sub fireError(strInfo, strMethod, strReason)
    LastErrorInfo = strInfo
    LastErrorMethod = strMethod
    LastErrorReason = strReason
    LastErrorNumber = Err.Number
    LastErrorDescription = Err.Description
    LastErrorSource = Err.Source
    Err.Clear
    fireEvent("onError")
End Sub

Function get_LastErrorInfo()
    get_LastErrorInfo = LastErrorInfo
End Function
Function get_LastErrorMethod()
    get_LastErrorMethod = LastErrorMethod
End Function
Function get_LastErrorReason()
    get_LastErrorReason = LastErrorReason
End Function
Function get_LastErrorNumber()
    get_LastErrorNumber = LastErrorNumber
End Function
Function get_LastErrorDescription()
    get_LastErrorDescription = LastErrorDescription
End Function
Function get_LastErrorSource()
    get_LastErrorSource = LastErrorSource
End Function
Function get_Version()
    get_Version = GetResource("ver")
End Function

Function MsgCom(Index, Title, Text)
    MsgCom = MsgBox (Text, Index, Title)
End Function

]]></script>

</component>

<!--
=====================================AutoIt.Msg===================================
-->

</package>


В данном примере вызывается функция MsgCom и возвращает значение выполнения функции, в случае ошибки вызова компонента предусмотрены функции выше, они вернут код ошибки в AutoIt скрипт, для того чтоб зарегистрировать компонент, достаточно нажать ПКМ на файл и выбрать "Подключить", после этого можно писать AutoIt код:

Код: AutoIt [Выделить]
$oAutoIt = ObjCreate('AutoIt.Msg')
$Ret = $oAutoIt.MsgCom (64, 'AutoIt.Msg', 'Example')
MsgBox(0, 'Return', 'Return code = ' & $Ret)
 

P.S. Тестировалось на XP, отрабатывает отлично, прозьба протестировать на других системах.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Февраль 13, 2012, 15:08:40 от Viktor1703 »



  Записан

XpycT [?]

  • Продвинутый
  • ***
  • Репутация: 92
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 285
  • Версия AutoIt: 3.3.8.1 / 3.3.9.4 Beta
  • Награды Первое место конкурса
    • Награды
Re: Пишем свои компоненты
« Ответ #1, Отправлен: Февраль 13, 2012, 15:03:12 »
Viktor1703
У меня выпадает с ошибкой

Все разобрался




  Записан
Рожденный летать, висеть не может.

Джедаям запрещено участвовать в любых предприятиях, ставящих целью получение прибыли. Мы не можем извлекать выгоду из помощи, которую оказываем.

Viktor1703 [?]

  • AutoIt Гуру
  • *****

  • Автор темы
  • Репутация: 191
  • Offline Offline
  • Сообщений: 902
  • Версия AutoIt: 3.3.8.1
    • Награды
Re: Пишем свои компоненты
« Ответ #2, Отправлен: Февраль 13, 2012, 15:09:21 »
XpycT, у Вас XP, 7/Vista ?




  Записан

XpycT [?]

  • Продвинутый
  • ***
  • Репутация: 92
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 285
  • Версия AutoIt: 3.3.8.1 / 3.3.9.4 Beta
  • Награды Первое место конкурса
    • Награды
Re: Пишем свои компоненты
« Ответ #3, Отправлен: Февраль 13, 2012, 15:18:07 »
Win XP SP3




  Записан

Viktor1703 [?]

  • AutoIt Гуру
  • *****

  • Автор темы
  • Репутация: 191
  • Offline Offline
  • Сообщений: 902
  • Версия AutoIt: 3.3.8.1
    • Награды
Re: Пишем свои компоненты
« Ответ #4, Отправлен: Февраль 13, 2012, 15:19:53 »
Значит на XP гарантировано работает, хотелось бы чтоб и на 7/Vista так же работало :)




  Записан

WSWR [?]

  • Продвинутый
  • ***
  • Репутация: 53
  • Offline Offline
  • Сообщений: 218
  • Версия AutoIt: 3.3.6.1
    • Награды
Re: Пишем свои компоненты
« Ответ #5, Отправлен: Февраль 13, 2012, 15:24:00 »
На Win7 работает вроде




  Записан
Спросить - позор на минуту, не знать - позор на всю жизнь

Александр [?]

  • joiner
  • Продвинутый
  • ***
  • Репутация: 78
  • Online Online
  • Пол: Мужской
  • Сообщений: 445
  • Версия AutoIt: 3.3.6.1-3.3.8.0
    • Награды
Re: Пишем свои компоненты
« Ответ #6, Отправлен: Февраль 13, 2012, 15:24:41 »
---------------------------
AutoIt Error
---------------------------
Line 2  (File "C:\Users\111111\Desktop\AutoIt.Msg.exe"):


Error: Variable must be of type "Object".
windows 7
мож я что не так понял?




  Записан
я за гуй с картинкой

WSWR [?]

  • Продвинутый
  • ***
  • Репутация: 53
  • Offline Offline
  • Сообщений: 218
  • Версия AutoIt: 3.3.6.1
    • Награды
Re: Пишем свои компоненты
« Ответ #7, Отправлен: Февраль 13, 2012, 15:33:42 »
У меня работает даже и не через Autoit, а при вызове из другой программы.

Viktor1703
Где можно почитать про добавление своих функций в такой компонент?




  Записан

Viktor1703 [?]

  • AutoIt Гуру
  • *****

  • Автор темы
  • Репутация: 191
  • Offline Offline
  • Сообщений: 902
  • Версия AutoIt: 3.3.8.1
    • Награды
Re: Пишем свои компоненты
« Ответ #8, Отправлен: Февраль 13, 2012, 15:36:15 »
Александр, а Вы компонент зарегистрировали в системе?

Цитата
чтоб зарегистрировать компонент, достаточно нажать ПКМ на файл и выбрать "Подключить", после этого можно писать AutoIt код

скачайте архив прикреплённый к первому посту, разархивируйте файлы в какую нибудь папку, далее нажмите правой кнопкой мыши на файл AutoIt.Msg.wsc, выберите 'Подключить', а потом запускайте AutoIt скрипт, если XP, то должно работать без ошибок, на счёт 7/Vista - не знаю, но WSWR говорит что вроде работает :)


Добавлено: Февраль 13, 2012, 15:39:26
Цитата
Где можно почитать про добавление своих функций в такой компонент?

Да в принципе везде :) в нэте море инфы, эти функции VBS скрипта, нужно просто изучить VBS и можно писать функции в компонент. Могу предложить форум где обсуждают VBS/JS/HTA/WSH

Посмотрите пример компонента, чтоб добавить функцию нужно сначала объявить метод между тегами <public></public>:

Пример из компонента:
<method name="MsgCom"><parameter name="MsgCom"/></method>
Ниже неё или вместо неё ставим свой метод:

<method name="Название функции"><parameter name="Название функции"/></method>
И соответственно изменить или добавить функцию

Function Название функции()
    ; Код
End Function
« Последнее редактирование: Февраль 13, 2012, 16:02:46 от Viktor1703 »



  Записан

Александр [?]

  • joiner
  • Продвинутый
  • ***
  • Репутация: 78
  • Online Online
  • Пол: Мужской
  • Сообщений: 445
  • Версия AutoIt: 3.3.6.1-3.3.8.0
    • Награды
Re: Пишем свои компоненты
« Ответ #9, Отправлен: Февраль 13, 2012, 15:43:24 »
ага. сработало..просто поосторожничал ..подключать  :)




  Записан

Viktor1703 [?]

  • AutoIt Гуру
  • *****

  • Автор темы
  • Репутация: 191
  • Offline Offline
  • Сообщений: 902
  • Версия AutoIt: 3.3.8.1
    • Награды
Re: Пишем свои компоненты
« Ответ #10, Отправлен: Февраль 13, 2012, 15:46:42 »
Александр, я тоже сначала не хотел, а потом всё таки подключил на свой страх и риск, но к моему большому удивлению после запуска AutoIt скрипта, всё сработало  :)




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1403
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5068
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Re: Пишем свои компоненты
« Ответ #11, Отправлен: Февраль 13, 2012, 16:34:57 »
Viktor1703  [?]
Цитата
можно брать готовый шаблон и добавлять свои функции
Функции на VBS? А смысл?

Вот если бы их можно было писать на AutoIt.
Но для этого уже есть AutoItX3.




  Записан
Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.



«Не оказываю техподдержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

DarWiM [?]

  • Новичок
  • *
  • Репутация: 8
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 93
  • Версия AutoIt: 3.3.6.1
    • Награды
Re: Пишем свои компоненты
« Ответ #12, Отправлен: Февраль 13, 2012, 16:47:23 »
Расскажите, что это дает? Как работает?




  Записан

WSWR [?]

  • Продвинутый
  • ***
  • Репутация: 53
  • Offline Offline
  • Сообщений: 218
  • Версия AutoIt: 3.3.6.1
    • Награды
Re: Пишем свои компоненты
« Ответ #13, Отправлен: Февраль 13, 2012, 16:50:24 »
CreatoR
Цитата
Но для этого уже есть AutoItX3.

На первый взгляд, у AutoItX3 бедноват функционал, например, как с его помощью хотя бы вывести сообщение MsgBox?

У меня есть приложение, которое поддерживает вызов функций только по COM, и эти компоненты мне будут очень полезны.




  Записан

Viktor1703 [?]

  • AutoIt Гуру
  • *****

  • Автор темы
  • Репутация: 191
  • Offline Offline
  • Сообщений: 902
  • Версия AutoIt: 3.3.8.1
    • Награды
Re: Пишем свои компоненты
« Ответ #14, Отправлен: Февраль 13, 2012, 16:58:42 »
Это для общего развития, например мне было очень  интересно, если бы можно было такое на AutoIt.... :'(

DarWiM, ну что тут рассказать, это обычный компонент (Windows Script Component) позволяет создавать функции и регистрировать их в системе, а вызывать с помощью создания этого объекта в коде, то есть вызов будет происходить не как DllCall(), но возможности VBS не такие расширенные как у AutoIt, ещё раз повторю, это для общего развития, я не предлогаю использовать это как часть AutoIt кода, а всего лишь привожу пример как можно сделать, я например не знал о таком способе, и очень удивился когда узнал, ну и естественно попробывал  :), но я так думаю что здесь можно писать не только VBS функции но и других скриптовых языков которые не нуждаются в компиляции и создании исполняющего файла.


Добавлено: Февраль 13, 2012, 17:03:14
WSWR, могу дать Obfuscator для VBS кода.




  Записан
 




Реклама

* Последние сообщения на форуме
post Re: Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] eropov Сегодня в 14:11:37
post Re: Авторизация в одноклассниках
[Автоматизация IE и Web-интерфейса] Arei Сегодня в 13:24:59
post Re: Смена IP адресса
[AutoIt для новичков] Zaramot Сегодня в 13:04:33
post Re: Авторизация в одноклассниках
[Автоматизация IE и Web-интерфейса] Александр Сегодня в 12:59:21
post Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] madmasles Сегодня в 12:23:31
post [Мышь, клавиатура] Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] Nurgazy Сегодня в 12:09:36
post Re: Объясните плз, как работать с массивами ArrayAdd и прочее...
[AutoIt для новичков] madmasles Сегодня в 12:08:03
post Объясните плз, как работать с массивами ArrayAdd и прочее...
[AutoIt для новичков] webmonster Сегодня в 12:03:38
post Re: Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] ---Zak--- Сегодня в 11:39:56
post Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] eropov Сегодня в 11:26:37

* Пользователи онлайн
  • Dot Гостей: 137
  • Dot Скрыт: 2
  • Dot Пользователей: 33
  • Dot Пользователи Online: