Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)

Модерирует : gyra, Maz

Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

AZJIO



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
;  @AZJIO 12.05.2010
; панелька для сохранения и ввода готовых конструкций кода AutoIt3 в редакторы Notepad++ и SciTE
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <MenuConstants.au3>
#include <WinAPI.au3>
 
;#NoTrayIcon
Global $defaultstatus = "Ready", $status
Global $initext, $kol, $aSet
Global $Ini = @ScriptDir & '\panfun.ini' ; путь к panfun.ini
;Проверка существования panfun.ini
If Not FileExists($Ini) Then
    If MsgBox(4, "Выгодное предложение", "Хотите создать необходимый panfun.ini" & @CRLF & "для примера?  Иначе выход.") = "6" Then
        $iniopen = FileOpen($Ini, 2)
        FileWrite($iniopen, _
'[Setting]' & @CRLF & _
'272,46,2,30|Notepad++' & @CRLF & _
'[z--z]' & @CRLF & _
'Msg|' & @CRLF & _
'MsgBox(0, ''Сообщение'', $text)' & @CRLF & _
'Exit' & @CRLF & _
'[z--z]' & @CRLF & _
'FO|' & @CRLF & _
'$file = FileOpen(@ScriptDir&''\file.txt'',2)' & @CRLF & _
'FileWrite($file, $text)' & @CRLF & _
'FileClose($file)' & @CRLF & _
'Exit' & @CRLF & _
'[z--z]' & @CRLF & _
'If|' & @CRLF & _
'If $var = 0 Then' & @CRLF & _
'    ' & @CRLF & _
'Else' & @CRLF & _
'    ' & @CRLF & _
'EndIf' & @CRLF & _
'[z--z]' & @CRLF & _
'Sw|' & @CRLF & _
'Switch @HOUR' & @CRLF & _
'Case 6 To 11' & @CRLF & _
'    $msg = "Good Morning"' & @CRLF & _
'Case 12 To 17' & @CRLF & _
'    $msg = "Good Afternoon"' & @CRLF & _
'Case 18 To 21' & @CRLF & _
'    $msg = "Good Evening"' & @CRLF & _
'Case Else' & @CRLF & _
'    $msg = "What are you still doing up?"' & @CRLF & _
'EndSwitch' & @CRLF & _
'[z--z]' & @CRLF & _
'Wh|' & @CRLF & _
'While 1' & @CRLF & _
'    MsgBox(0, "Сообщение", ''Вот опять сообщение'')' & @CRLF & _
'WEnd' & @CRLF & _
'[z--z]' & @CRLF & _
'Se|' & @CRLF & _
'Select' & @CRLF & _
'    Case $var = 1' & @CRLF & _
'        MsgBox(0, "", "Если 1 тогда")' & @CRLF & _
'    Case $var2 = "test"' & @CRLF & _
'        MsgBox(0, "", "Если test тогда")' & @CRLF & _
'    Case Else' & @CRLF & _
'        MsgBox(0, "", "Иначе")' & @CRLF & _
'EndSelect' & @CRLF & _
'[z--z]' & @CRLF & _
'DU|' & @CRLF & _
'Do' & @CRLF & _
'    MsgBox(0, "Сообщение", ''Вот опять сообщение'')' & @CRLF & _
'Until 0' & @CRLF & _
'[z--z]' & @CRLF & _
'cse|' & @CRLF & _
'#cs' & @CRLF & _
'Блок комментариев' & @CRLF & _
'#ce' & @CRLF & _
'[z--z]' & @CRLF & _
'FU|' & @CRLF & _
'Func _funcname()' & @CRLF & _
'    return (@MON & "/" & @MDAY & "/" & @YEAR)' & @CRLF & _
'EndFunc' & @CRLF & _
'[z--z]')
        FileClose($iniopen)
    Else
        Exit
    EndIf
EndIf
 
$iniopen = FileOpen($Ini, 0)
$initext = FileRead($iniopen)
FileClose($iniopen)
 
$aSet = StringSplit(StringRegExpReplace($initext, "(?s).*\[Setting\]\r\n(.*?)(?:\r\n\[.*)", "\1"), '|')
 
$aPos = StringSplit($aSet[1], ',')
$Gui = GUICreate("панель", $aPos[1], $aPos[2], $aPos[3], $aPos[4], BitOR($WS_POPUP, $WS_THICKFRAME, $WS_SIZEBOX, $WS_SYSMENU))
GUISetBkColor(0x3f3f3f)
$filemenu = GUICtrlCreateMenu("Файл")
$Quit2 = GUICtrlCreateMenuItem("Перезапуск панели", $filemenu)
$recreate = GUICtrlCreateMenuItem("Добавить образец из буфера", $filemenu)
$Saveini = GUICtrlCreateMenuItem("Сохранить текущие настройки", $filemenu)
$Editini = GUICtrlCreateMenuItem("Редактировать ini", $filemenu)
GUICtrlCreateMenuItem("", $filemenu)
$Npad = GUICtrlCreateMenuItem("Использовать Notepad++", $filemenu)
$SciTE = GUICtrlCreateMenuItem("Использовать SciTE", $filemenu)
GUICtrlCreateMenuItem("", $filemenu)
$Quit1 = GUICtrlCreateMenuItem("Выход", $filemenu)
 
If $aSet[2] = "Notepad++" Then
    GUICtrlSetState($Npad,$GUI_CHECKED)
Else
    GUICtrlSetState($SciTE,$GUI_CHECKED)
EndIf
 
$delmenu = GUICtrlCreateMenu("Удаление")
 
$helpmenu = GUICtrlCreateMenu("?")
$helpitem = GUICtrlCreateMenuItem("О программе", $helpmenu)
 
$aPattern = StringRegExp($initext, '(?s)z\]\r\n(.*?)(?=\r\n\[z)', 3)
$kol = UBound($aPattern) - 1
 
$Width = $aPos[1] - Mod($aPos[1], 30) ; вычисление позиции кнопок при старте скрипта (12 строк)
$y = 0
$x = 0
$posy = 1
For $i = 0 To $kol
    $x += 1
    If $x * 30 > $aPos[1] Then
        $x = 1
        $y += 1
        $posy = $y * 25 + 1
    EndIf
    $posx = $x * 30 - 29
 
    $tmp = StringSplit($aPattern[$i], '|')
    Assign('Button' & $i, GUICtrlCreateButton($tmp[1], $posx, $posy, 30, 25))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetTip(-1, $tmp[2])
    Assign('execute' & $i, $tmp[2])
    Assign('name_b' & $i, $tmp[1])
    Assign('del' & $i, GUICtrlCreateMenuItem("Удалить - "&$tmp[1], $delmenu))
Next
 
$r = 0
 
GUISetState()
 
 
While 1
    $msg = GUIGetMsg()
    _SendMessage($Gui, $WM_SYSCOMMAND, BitOR($SC_MOVE, $HTCAPTION), 0) ; для перемещения окна за само окно
    For $i = 0 To $kol
        If $msg = Eval('Button' & $i) Then _insert(Eval('execute' & $i))
        If $msg = Eval('del' & $i) Then _delitem($i)
    Next
 
    $r += 1
    If $r = 200 Then ; каждые 0,2 секунд проверка распределения кнопок
        $r = 0
        $GuiPos = WinGetPos($Gui)
        $Width = $GuiPos[2] - Mod($GuiPos[2], 30) ; ширине окна по кнопкам
        $y = 0
        $x = 0
        $posy = 1
        For $i = 0 To $kol
            $x += 1
            If $x * 30 > $GuiPos[2] Then
                $x = 1
                $y += 1
                $posy = $y * 25 + 1
            EndIf
            $posx = $x * 30 - 29
            GUICtrlSetPos(Eval('Button' & $i), $posx, $posy)
        Next
            $GuiPos[2]=$GuiPos[2]-Mod( $GuiPos[2], 30 )+3; подгоняем размер под кнопки окна при ресайзе (пять строк), можно закомментировать их.
            If $kol * 30 < $GuiPos[2] Then $GuiPos[2]=$kol * 30+38
            If $y > 0 Then $GuiPos[2]=$Width+8
            If $GuiPos[2] < 182 Then $GuiPos[2]=182
            WinMove($Gui, "", $GuiPos[0], $GuiPos[1], $GuiPos[2], $posy+51)
    EndIf
 
    Select
        Case $msg = $Saveini
            $GuiPos = WinGetPos($Gui)
            $GuiPos[2]=$GuiPos[2]-Mod( $GuiPos[2], 30 )+2 ; подгоняем размер под кнопки окна при сохранении (четыре строки), можно закомментировать их.
            If $kol * 30 < $GuiPos[2] Then $GuiPos[2]=$kol * 30+32
            If $kol * 30 < 178 Then $GuiPos[2]=182
            $GuiPos[3]=$posy+45
            $initext = StringRegExpReplace($initext, "(?s)(?:\[Setting\]\r\n)(.*?)(?=\r\n\[)", '[Setting]' & @CRLF & $GuiPos[2] & ',' & $GuiPos[3] & ',' & $GuiPos[0] & ',' & $GuiPos[1] & '|' & $aSet[2])
            $iniopen = FileOpen($Ini, 2)
            FileWrite($iniopen, $initext)
            FileClose($iniopen)
 
        Case $msg = $recreate
            $newButtom = ClipGet()
            $nameButt = StringRegExpReplace($newButtom, "(?sx).*?(\w[b]{3}).*"[/b], '\1')
            $varnew = InputBox("Сообщение", 'Введите имя переменной' & @CRLF & 'желательно три символа', $nameButt, "", 170, 150, $GuiPos[0], $GuiPos[3] + $GuiPos[1])
            If $varnew = '' Then
                ContinueLoop
            Else
                $initext &= @CRLF & $varnew & '|' & $newButtom & @CRLF & '[z--z]'
            EndIf
            If $y=0 Then
            $GuiPos = WinGetPos($Gui)
            $GuiPos[2]+=30
            WinMove($Gui, "", $GuiPos[0], $GuiPos[1], $GuiPos[2],$GuiPos[3])
            EndIf
            $kol += 1
            Assign('Button' & $kol, GUICtrlCreateButton($varnew, 1, 1, 30, 25))
            GUICtrlSetTip(-1, $newButtom)
            GUICtrlSetResizing(-1, $GUI_DOCKALL)
            Assign('execute' & $kol, $newButtom)
            Assign('name_b' & $kol, $varnew)
            Assign('del' & $kol, GUICtrlCreateMenuItem("Удалить - "&$varnew, $delmenu))
 
        Case $msg = $Npad
            $aSet[2] = 'Notepad++'
            GUICtrlSetState($Npad,$GUI_CHECKED)
            GUICtrlSetState($SciTE,$GUI_UNCHECKED)
 
        Case $msg = $SciTE
            $aSet[2] = 'SciTEWindow'
            GUICtrlSetState($SciTE,$GUI_CHECKED)
            GUICtrlSetState($Npad,$GUI_UNCHECKED)
 
        Case $msg = $helpitem
            MsgBox(0, 'О программе', 'Панелька для вставки готовых конструкций'&@CRLF&'кода в окно редактора Notepad++ или SciTE'&@CRLF&@CRLF&'        @AZJIO 12.05.2010')
        Case $msg = $Editini
            ShellExecute(@ScriptDir & '\panfun.ini', "", @ScriptDir, "")
        Case $msg = -3 Or $msg = $Quit1
            Exit
        Case $msg = $Quit2
            _restart()
    EndSelect
WEnd
 
Func _delitem($d)
For $i = 0 To $kol
    GUICtrlDelete(Eval('Button' & $i))
    GUICtrlDelete(Eval('execute' & $i))
    GUICtrlDelete(Eval('name_b' & $i))
    GUICtrlDelete(Eval('del' & $i))
Next
 
$initext = StringRegExpReplace($initext, '(?s)\[z--z\]\r\n('&Eval('name_b' & $d)&'\|.*?)(?=\[z)', '')
$aPattern = StringRegExp($initext, '(?s)z\]\r\n(.*?)(?=\r\n\[z)', 3)
$kol = UBound($aPattern) - 1
 
$Width = $aPos[1] - Mod($aPos[1], 30) ; вычисление позиции кнопок при старте скрипта (12 строк)
$y = 0
$x = 0
$posy = 1
For $i = 0 To $kol
    $x += 1
    If $x * 30 > $aPos[1] Then
        $x = 1
        $y += 1
        $posy = $y * 25 + 1
    EndIf
    $posx = $x * 30 - 29
 
    $tmp = StringSplit($aPattern[$i], '|')
    Assign('Button' & $i, GUICtrlCreateButton($tmp[1], $posx, $posy, 30, 25))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetTip(-1, $tmp[2])
    Assign('execute' & $i, $tmp[2])
    Assign('name_b' & $i, $tmp[1])
    Assign('del' & $i, GUICtrlCreateMenuItem("Удалить - "&$tmp[1], $delmenu))
Next
EndFunc
 
Func _insert($pattern)
    $NP = '[CLASS:' & $aSet[2] & ']' ; здесь можно указать другой редактор, или в ini
    If WinExists($NP) Then
        WinActivate($NP)
        WinWaitActive($NP)
        $byfertmp=ClipGet()
        ClipPut($pattern)
        Send("[b]+{ins}"[/b])
        ClipPut($byfertmp)
        $byfertmp=''
    EndIf
EndFunc
 
Func _restart()
    Local $sAutoIt_File = @TempDir & "\~Au3_ScriptRestart_TempFile.au3"
    Local $sRunLine, $sScript_Content, $hFile
 
    $sRunLine = @ScriptFullPath
    If Not @Compiled Then $sRunLine = @AutoItExe & ' /AutoIt3ExecuteScript ""' & $sRunLine & '""'
    If $CmdLine[0] > 0 Then $sRunLine &= ' ' & $CmdLineRaw
 
    $sScript_Content &= '#NoTrayIcon' & @CRLF & _
            'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
            '   Sleep(10)' & @CRLF & _
            'WEnd' & @CRLF & _
            'Run("' & $sRunLine & '")' & @CRLF & _
            'FileDelete(@ScriptFullPath)' & @CRLF
 
    $hFile = FileOpen($sAutoIt_File, 2)
    FileWrite($hFile, $sScript_Content)
    FileClose($hFile)
 
    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sAutoIt_File & '"', @ScriptDir, @SW_HIDE)
    Sleep(1000)
    Exit
EndFunc
 
 

Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 13:23 11-05-2010 | Исправлено: AZJIO, 11:25 12-05-2010
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)
Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru