WR-e-D
Новичок
- Сообщения
- 53
- Репутация
- 3
Здравствуйте, хочу поделиться переделанным плагином для Sublime Text под Мак.
Вот как это примерно выглядит:
Для работы плагина нужно заменить все пути в файле плагина (autoitbuild.py) и скомпилировать файл autoitmac.au3 залив его в директорию autoit.
Делал для себя, за оптимизацию и советы буду благодарен.
Вот как это примерно выглядит:
Для работы плагина нужно заменить все пути в файле плагина (autoitbuild.py) и скомпилировать файл autoitmac.au3 залив его в директорию autoit.
Код:
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\..\ICO\wred.ico
#AutoIt3Wrapper_Res_Description=Use AutoIt on Mac os With Parallels
#AutoIt3Wrapper_Res_Fileversion=2.1.5 beta
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=Copyraight Wred Media
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <FileOperations.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiStatusBar.au3>
#include <Constants.au3>
#include <GUIEdit.au3>
#include <WinAPI.au3>
Opt('WinTitleMatchMode', 3)
Opt('WinWaitDelay', 0)
If Not $CmdLine[0] Then
ToolTip("Нет параметров запуска", 0, 20)
Sleep(2000)
Exit
EndIf
Global $fileFullPath, $Dummy1, $hForm, $ScriptOut, $Progress1, $progresscount = 0
$AutoIt3Wrapper = _GetAutoItPath() & "\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe"
If Not FileExists($AutoIt3Wrapper) Then
ToolTip("AutoIt3Wrapper not found", 0, 20)
Sleep(2000)
Exit
EndIf
$Params = StringSplit(StringReplace($CmdLineRaw, '"', ''), '^')
$ScriptAction = $Params[1]
$fileFullPath = "\\psf\Host" & StringReplace($Params[2], "/", "\")
;$fileFullPath = "\\psf\Home" & StringReplace($Params[2], "/", "\")
Switch $ScriptAction
#cs Case "RunScript"
Run('"' & _GetAutoItPath() & '\AutoIt3.exe" "' & $fileFullPath & '"')
ToolTip("Runscript", 0, 20)
#ce
Case "RunWithDebug"
_GetGUI()
_GUICtrlStatusBar_SetText($Dummy1, "Запуск скрипта в режиме тестирования")
GUICtrlSetData($Progress1, $progresscount + 5)
_GetParam($CmdLine, '"' & _GetAutoItPath() & '\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "' & $fileFullPath & '" /UserParams')
Case "CompileScript"
_GetGUI()
_GUICtrlStatusBar_SetText($Dummy1, "Компиляция")
GUICtrlSetData($Progress1, $progresscount + 5)
_GetParam($CmdLine, '"' & _GetAutoItPath() & '\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /prod /in "' & $fileFullPath & '" /UserParams')
Case "CompileScriptParam"
_GetGUI()
_GUICtrlStatusBar_SetText($Dummy1, "Компиляция с GUI")
GUICtrlSetData($Progress1, $progresscount + 5)
_GetParam($CmdLine, '"' & _GetAutoItPath() & '\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /ShowGui /in "' & $fileFullPath & '" /UserParams')
Case "Tidy"
_GetGUI()
_GUICtrlStatusBar_SetText($Dummy1, "Форматирование Кода")
GUICtrlSetData($Progress1, $progresscount + 5)
_GetParam($CmdLine, '"' & _GetAutoItPath() & '\SciTE\Tidy\Tidy.exe" "' & $fileFullPath)
Case "Koda"
EndSwitch
Func _SendMsg($hWnd, $iData)
Local $tCOPYDATA = DllStructCreate('ulong_ptr;dword;ptr')
Local $Val, $Ret
If IsString($iData) Then
$tData = DllStructCreate('char[' & (StringLen($iData) + 1) & '];dword')
$Val = 1
Else
$tData = DllStructCreate('int;dword')
$Val = 2
EndIf
DllStructSetData($tData, 1, $iData)
DllStructSetData($tCOPYDATA, 1, $Val)
DllStructSetData($tCOPYDATA, 2, DllStructGetSize($tData))
DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tData))
$Ret = DllCall('user32.dll', 'lresult', 'SendMessage', 'hwnd', $hWnd, 'uint', $WM_COPYDATA, 'ptr', 0, 'ptr', DllStructGetPtr($tCOPYDATA))
If (@error) Or (Not $Ret[0]) Then
Return 0
EndIf
Return 1
EndFunc ;==>_SendMsg
Func _GetGUI()
#Region ### START Koda GUI section ### Form=
$hForm = GUICreate("AutoItMac", 200, 37, 0, 0)
$Progress1 = GUICtrlCreateProgress(0, 0, 214, 17)
GUICtrlSetColor(-1, 32250); not working with Windows XP Style
$Dummy1 = _GUICtrlStatusBar_Create($hForm)
_GUICtrlStatusBar_SetSimple($Dummy1)
_GUICtrlStatusBar_SetText($Dummy1, "Начинаем обработку заданий")
GUICtrlSetData($Progress1, $progresscount + 10)
GUICtrlSetFont(-1, 9, 400, 0, 'Courier New')
_GUICtrlStatusBar_SetMinHeight($Dummy1, 20)
#EndRegion ### END Koda GUI section ###
GUIRegisterMsg($WM_COPYDATA, 'WM_COPYDATA')
GUISetState()
$Count = 0
EndFunc ;==>_GetGUI
Func _GetParam($Param, $Command)
If ($Param[0] = 1) Then
$ExitCode = -1
$hWnd = Ptr(HWnd($hForm))
$PID = Run($Command, '', @SW_HIDE, $STDERR_MERGED)
_GUICtrlStatusBar_SetText($Dummy1, "Скрипт запущен")
GUICtrlSetData($Progress1, $progresscount + 15)
If $PID Then
Switch @OSVersion
Case 'WIN_2000', 'WIN_2003', 'WIN_XP', 'WIN_XPe'
$hProcess = _WinAPI_OpenProcess(0x0400, 0, $PID) ; PROCESS_QUERY_INFORMATION
Case Else ; Vista/7
$hProcess = _WinAPI_OpenProcess(0x1000, 0, $PID) ; PROCESS_QUERY_LIMITED_INFORMATION
EndSwitch
While 1
$Data = StdoutRead($PID)
If @error Then
ExitLoop
EndIf
If @extended Then
If Not _SendMsg($hWnd, _WinAPI_OemToChar($Data)) Then
Exit
EndIf
EndIf
WEnd
If $hProcess Then
$ExitCode = _WinAPI_GetExitCodeProcess($hProcess)
If (@error) Or ($ExitCode = 259) Then
$ExitCode = -1
If ProcessExists($PID) Then
ProcessClose($PID)
EndIf
EndIf
_WinAPI_CloseHandle($hProcess)
EndIf
EndIf
_GUICtrlStatusBar_SetText($Dummy1, "Считывание данных")
GUICtrlSetData($Progress1, $progresscount + 20)
_SendMsg($hWnd, $ExitCode)
Exit
EndIf
EndFunc ;==>_GetParam
Func _WriteToFile($Output)
$OpenFileName = _FO_PathSplit($fileFullPath)
$file = FileOpen(_GetAutoItPath() & "/loging/" & $OpenFileName[1] & ".log", 256 + 1)
; Проверяет, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $file = -1 Then
_GUICtrlStatusBar_SetText($Dummy1, "Невозможно открыть лог файл - выходим")
Sleep(1000)
Exit
EndIf
FileWrite($file, $Output & @CRLF)
FileClose($file)
EndFunc ;==>_WriteToFile
Func _GetAutoItPath()
Local $OSArch = Execute("@OSArch")
Local $sRegistry_Key = "HKLM\SOFTWARE\AutoIt v3\AutoIt"
If $OSArch = "" Then
$OSArch = Execute("@ProcessorArch")
EndIf
If $OSArch <> "x86" Then
$sRegistry_Key = "HKLM\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt"
EndIf
Local $Au3_Path = StringRegExpReplace(@AutoItExe, '\\[^\\]+$', '')
If @Compiled Then $Au3_Path = RegRead($sRegistry_Key, "InstallDir")
If FileExists($Au3_Path & "\AutoIt3.exe") Then Return $Au3_Path
$Au3_Path = @ProgramFilesDir & "\AutoIt3"
If FileExists($Au3_Path & "\AutoIt3.exe") Then Return $Au3_Path
$Au3_Path = @ScriptDir & "\AutoIt3"
If FileExists($Au3_Path & "\AutoIt3.exe") Then Return $Au3_Path
Return SetError(1, 0, 0)
EndFunc ;==>_GetAutoItPath
Func _WinAPI_GetExitCodeProcess($hProcess)
Local $Ret = DllCall('kernel32.dll', 'int', 'GetExitCodeProcess', 'ptr', $hProcess, 'dword*', 0)
If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
Return $Ret[2]
EndFunc ;==>_WinAPI_GetExitCodeProcess
Func _WinAPI_OemToChar($sStr)
Local $tData = DllStructCreate('char[' & StringLen($sStr) + 1 & ']')
Local $Ret = DllCall('user32.dll', 'int', 'OemToChar', 'str', $sStr, 'ptr', DllStructGetPtr($tData))
If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, '')
EndIf
Return DllStructGetData($tData, 1)
EndFunc ;==>_WinAPI_OemToChar
Func WM_COPYDATA($hWnd, $iMsg, $wParam, $lParam)
Local $tCOPYDATA = DllStructCreate('ulong_ptr;dword;ptr', $lParam)
Switch $hWnd
Case $hForm
Switch DllStructGetData($tCOPYDATA, 1)
Case 1 ; Text
$tData = DllStructCreate('char[' & (DllStructGetData($tCOPYDATA, 2) - 4) & '];dword', DllStructGetData($tCOPYDATA, 3))
$ScriptOut = DllStructGetData($tData, 1)
_GUICtrlStatusBar_SetText($Dummy1, "Обработка данных")
$progresscount = $progresscount + 25
If $progresscount > 100 Then $progresscount = 0
GUICtrlSetData($Progress1, $progresscount)
_WriteToFile($ScriptOut)
Case 2 ; ExitCode
_WriteToFile("{AutoitExitScript}")
_GUICtrlStatusBar_SetText($Dummy1, "Выход")
$tData = DllStructCreate('int;dword', DllStructGetData($tCOPYDATA, 3))
GUICtrlSendToDummy($Dummy1, DllStructGetData($tData, 1))
EndSwitch
Return 1
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COPYDATA
Делал для себя, за оптимизацию и советы буду благодарен.