Что нового

Плагин Autoit для Sublime Text (Mac Os X+Parallels)

WR-e-D

Новичок
Сообщения
53
Репутация
3
Здравствуйте, хочу поделиться переделанным плагином для Sublime Text под Мак.
Вот как это примерно выглядит:

Для работы плагина нужно заменить все пути в файле плагина (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


Делал для себя, за оптимизацию и советы буду благодарен.
 

Вложения

  • AutoItScript_Ex.rar
    195.6 КБ · Просмотры: 9

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А расцветку кода сам писал?
 
Автор
WR-e-D

WR-e-D

Новичок
Сообщения
53
Репутация
3
С директории "C:\Program Files\AutoIt3\Extras\Editors"
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
:rofl:разрабатывать приложения под Windows на Mac...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
winstan [?]
rofl.gif
разрабатывать приложения под Windows на Mac...
так там винда. просто под parallels.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
winstan [?]
разрабатывать приложения под Windows на Mac...
А что не так? Тут есть крутой режим - Coherence, интеграция систем на высшем уровне :smile:
 
Верх