- Сообщения
- 8,673
- Репутация
- 2,486
AutoIt: 3.3.6.1 - 3.3.14.5
Версия: 1.1
Категория: Вспомогательные функции, Разное
Описание: Данная библиотека предназначена для подключения динамических библиотек, для последующего вызова содержащихся в них функций.
Полезно при необходимости подключать внешние модули, наподобие плагинов, которые пользователь может редактировать даже если главный скрипт скомпилирован.
Содержимое динамической библиотеки:
- Всё что до ;==== UDFs Part ====, это обработка передаваемых в библиотеку параметров.
- Всё что после этого разделителя, это функций доступные на выполнение главному скрипту (который подключает библиотеку/плагин).
Пример (требуются подключаемые библиотеки, см. выше):
Файл: PluginInclude.zip
История версий:
Источник: www.autoit-script.ru
Автор(ы): G.Sandler (CreatoR)
Версия: 1.1
Категория: Вспомогательные функции, Разное
Описание: Данная библиотека предназначена для подключения динамических библиотек, для последующего вызова содержащихся в них функций.
Полезно при необходимости подключать внешние модули, наподобие плагинов, которые пользователь может редактировать даже если главный скрипт скомпилирован.
Содержимое динамической библиотеки:
Код:
#NoTrayIcon
Global $sPI_Name = @ScriptName
If WinExists($sPI_Name) Then
Exit
EndIf
AutoItWinSetTitle($sPI_Name)
#Region Container UDF: http://www.autoitscript.com/forum/topic/126936-container-udf-scripts-interaction-library
Global $oContainerOMErr
Func _Container_Open($sName, $iMode)
Local $oShell, $oShellWindow, $oShellWindows
If Not ObjEvent("AutoIt.Error") Then
$oContainerOMErr = ObjEvent("AutoIt.Error", "__Container_COMErrHandler")
EndIf
$oShell = ObjCreate("Shell.Application")
If Not IsObj($oShell) Then
Return SetError(2, 0, 0)
EndIf
$oShellWindows = $oShell.Windows
For $oShellWindow In $oShellWindows
If $oShellWindow.StatusText = $sName Then
Return $oShellWindow
EndIf
If @error Then
ExitLoop
EndIf
Next
If $iMode = 0 Then
Return SetError(1, 0, 0)
EndIf
;$oContainer = ObjGet("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
$oContainer = ObjCreate("InternetExplorer.Application")
If Not IsObj($oContainer) Then
Return SetError(3, 0, 0)
EndIf
$oContainer.StatusBar = True ; IMPORTANT!!
$oContainer.StatusText = $sName
Return $oContainer
EndFunc
Func _Container_Close($oContainer)
Local $iRet = 0
Local $hContainer = HWnd($oContainer.HWnd)
If $hContainer Then
$iRet = WinClose($hContainer)
EndIf
Return SetError(Number($iRet <> 1), 0, $iRet)
EndFunc
Func _Container_PutProperty($oContainer, $sVarName, $vValue)
If Not IsObj($oContainer) Then
Return SetError(1, 0, 0)
EndIf
$oContainer.PutProperty($sVarName, $vValue)
EndFunc
Func _Container_GetProperty($oContainer, $sVarName)
If Not IsObj($oContainer) Then
Return SetError(1, 0, 0)
EndIf
Return $oContainer.GetProperty($sVarName)
EndFunc
Func __Container_COMErrHandler()
SetError(1)
Endfunc
Global $oContainer = _Container_Open("PI_Storage", 0)
#EndRegion Container UDF
$sFunc_Name = _Container_GetProperty($oContainer, "PI_Func_Name")
$sFunc_Params = _Container_GetProperty($oContainer, "PI_Func_Params")
$vReturn = Call($sFunc_Name, $sFunc_Params)
_Container_PutProperty($oContainer, "PI_Func_Return", $vReturn)
While _Container_GetProperty($oContainer, "PI_Func_Return") <> ''
Sleep(10)
WEnd
;==== UDFs Part ====
Func Some_UDF($sParams)
Local $iRet = MsgBox(36, @ScriptName & " - Question", $sParams)
Return $iRet
EndFunc
- Всё что до ;==== UDFs Part ====, это обработка передаваемых в библиотеку параметров.
- Всё что после этого разделителя, это функций доступные на выполнение главному скрипту (который подключает библиотеку/плагин).
Пример (требуются подключаемые библиотеки, см. выше):
Код:
#include <PluginInclude.au3>
_PluginInclude_AddInclude(@ScriptDir & "\External_UDFs.fnc")
_PluginInclude_AddInclude(@ScriptDir & "\Other_UDFs.fnc")
$vRet = _PluginInclude_ExecuteFunc("Some_UDF", "Are you sure?")
If Not @error Then
MsgBox(64, @ScriptName & " - ExecuteFunc", "Returned Message from Some_UDF: " & $vRet)
EndIf
$vRet = _PluginInclude_ExecuteFunc("Other_UDF", "Notepad.exe") ;Run the notepad
If Not @error Then
MsgBox(64, @ScriptName & " - ExecuteFunc", "Returned Message from Other_UDF.fnc (Other_UDF): " & $vRet)
EndIf
;=== Passing arrays ===
Dim $aArr[2]
$aRet = _PluginInclude_ExecuteFunc("SetArray", $aArr)
If Not @error Then
MsgBox(64, @ScriptName & " - ExecuteFunc", "Returned Message from Other_UDF.fnc (SetArray): " & $aRet[1])
EndIf
Файл: PluginInclude.zip
История версий:
[1.1]
* Теперь библиотека использует Container.au3 для интеракции с подключаемыми плагинами.
Это решает проблему с передачей массивов (пока только 2D) и других типов данных в параметрах вызова.
v1.0
* Первая версия.
* Теперь библиотека использует Container.au3 для интеракции с подключаемыми плагинами.
Это решает проблему с передачей массивов (пока только 2D) и других типов данных в параметрах вызова.
v1.0
* Первая версия.
Источник: www.autoit-script.ru
Автор(ы): G.Sandler (CreatoR)