Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
NikLok,
Это не для AutoIt'а задачка, тут видимо нужно смотреть в сторону javascript/css, по этим вопросам лучше обратиться сюда (http://operafan.net/forum/) ;)
Senka11,
как теперь добавить чтоб и мак дописывал ся!
amel27 привёл функцию на предыдущей страничке:
MsgBox(0, "IP-Adress", @IPAddress1)
MsgBox(0, "Computer-name", @ComputerName)
$nEdit = InputBox("Input inventory ID", "Input inventory ID", "", "", -1,3,175,20)
$aEdit = InputBox("Input Everest ID", "Input Everest ID", "", "", -1,30,175,20)
$aMac = _NetAdapterGetProp()
$hOpen = FileOpen("\\192.168.0.254\public\senka1985\ipconfig.txt",1)
FileWriteLine($hOpen, "" & $nEdit & " " & $aEdit & " " & @IPAddress1 & " " & $aMac[0][2])
FileClose($hOpen)
Func _NetAdapterGetProp($sHostName = "localhost")
Local $objItem, $objWMIService = ObjGet( "winmgmts:\\"& $sHostName &"\root\CIMV2")
Local $sQuery = 'SELECT Index, Caption, MACAddress, IPAddress FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True'
Local $colItems = $objWMIService.ExecQuery($sQuery, "WQL", 0x30)
If IsObj($colItems) Then
Local $aRes[1][3], $i=0
For $colItem In $colItems
ReDim $aRes[$i+1][3]
$aRes[$i][0] = $colItem.Caption
$aRes[$i][1] = $colItem.IPAddress(0)
$aRes[$i][2] = $colItem.MACAddress
$i+=1
Next
Return $aRes
EndIf
Return SetError(1)
EndFunc
Давно искал функцию для проверки цвета, содержится ли в нём оттенок тёмного или светлого, и наконец (с небольшой (http://www.autoitscript.com/forum/index.php?s=&showtopic=63591&view=findpost&p=474561), однако значительной помощью на оф. форуме) мне удалось сделать подобную функию:
#include <GuiConstants.au3>
#include <Misc.au3>
Global $Bk_Color = 0xFFFFFF
$GUI = GUICreate("_ColorIsDarkShade Demo", 300, 200)
$Label = GUICtrlCreateLabel("Some Text", 20, 40, 55, 14)
GUICtrlSetBkColor(-1, $Bk_Color)
$ColorSet_Button = GUICtrlCreateButton("Set Color", 20, 80)
GUISetState(@SW_SHOW, $GUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $ColorSet_Button
$Bk_Color = _ChooseColor(2, $Bk_Color, 2, $GUI)
Local $sShade = _ColorIsDarkShade($Bk_Color)
GUICtrlSetBkColor($Label, $Bk_Color)
If $sShade Then
GUICtrlSetColor($Label, 0xFFFFFF)
Else
GUICtrlSetColor($Label, 0x000000)
EndIf
EndSwitch
WEnd
Func _ColorIsDarkShade($nColor)
Local $i_Red = BitAND(BitShift($nColor, 16), 0xFF)
Local $i_Green = BitAND(BitShift($nColor, 8), 0xFF)
Local $i_Blue = BitAND($nColor, 0xFF)
Local $iMidle_Color_Val = Int(765 / 2) ;765 is the total of 255 + 255 + 255
Return ($i_Red + $i_Green + $i_Blue) < $iMidle_Color_Val
EndFunc
Суть в том, что если юзер выбрал тёмный/светлый цвет, то цвет текста соответственно меняется на противоположный (и вто время видимый на фоне) цвет :).
2All
ламерский вопрос: для чего используется оператор #region ?
2Creat0R
случайно наткнулся на его цветовое обозначение - INDIGO :)
amel27,
для чего используется оператор #region ?
Обозначет блок кода, подобно комментариям для блока, только строки заключённые в этом блоке не комментируются :)
Пример:
#include <GuiConstants.au3>
$GUI = GUICreate("Test Script", 300, 200)
GUICtrlCreateButton("Button", 20, 40, 60, 20)
GUISetState(@SW_SHOW, $GUI)
#Region Main Loop
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
#EndRegion Main Loop
;
Кстати, ещё один стиль для раскарски - Т.н аббривиатуры (вольный перевод :) ), если ввести cw (эти значения выделяются красным цветом в SciTE), и нажать пробел, то оно раскроется в ConsoleWrite( & @CRLF), а курсор станет после открывающей скобки. Эти значения задаются в файле «abbrev.properties» (доступен из меню «Options - Open Abbriviations file»). Сам недавно узнал.
P.S
За эти аббривиатуры отвечает стиль №13.
случайно наткнулся на его цветовое обозначение - INDIGO
Имхо, не совсем подходит, мне кажется DarkOrchid чётче отражает #Region, по крайней мере тут на форуме.
Обозначет блок кода »чем он лучше уже имеющихся операторов?.. в смысле чем не устраивали старые?#include <GuiConstants.au3>
$GUI = GUICreate("Test Script", 300, 200)
GUICtrlCreateButton("Button", 20, 40, 60, 20)
GUISetState(@SW_SHOW, $GUI)
;Region Main Loop
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
; /==> Region Main Loop
подобно комментариям для блока »это что за зверь?... или ты имел ввиду блок комментариев?
только строки заключённые в этом блоке не комментируются »прекрасно комментируются, причем какого-либо интеллекта у этого "оператора" я не заметил, получается что все они идентичны банальному ";"... только последний гораздо короче :)#include <GuiConstants.au3>
$GUI = GUICreate("Test Script", 300, 200)
GUICtrlCreateButton("Button", 20, 40, 60, 20)
GUISetState(@SW_SHOW, $GUI)
#EndRegion Main Loop
While 1
$nMsg = GUIGetMsg()
#Region Main Loop
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
#Region Main Loop
WEnd
#Region Main Loop
мне кажется DarkOrchid чётче отражает »может огласишь весь список? ;)
amel27, чем он лучше уже имеющихся операторов?
Тем что можно свернуть (Fold) этот блок и он не будет "мешать" глазам :)
ты имел ввиду блок комментариев?
Да.
прекрасно комментируются
Я имел в виду что в отличие от #CS....#CE (кстати с этим стилем при раскраске есть проблемы, см. далее), все строки в блоке не становятся закомментированными после применения подобного комментирования.
А комментарии для отдельных строк конечно же всегда действуют :)
может огласишь весь список?
Не уверен что понял, но вот сравнение с “бумаги”:
Рисунок:
http://ipicture.ru/uploads/080204/39FUPrko93.png
Текст (DarkOrchid):
#Region Main Loop
Текст (Indigo)
#Region Main Loop
Я даже как то давно показывал (http://forum.oszone.net/thread-60616-53.html#post652376) подобное сравнение.
[hr]
По поводу раскраски, вот какие стили у меня уже имеются (до 15-ти)...
; Расстановка стилей по тексту
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_0>(.*?)</t_0>", "\1") ; текст без стиля
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_1>(.*?)</t_1>", "\1") ; комментарии
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_2>(.*?)</t_2>", "\1") ; комментарии (#CS..#CE)
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_3>(.*?)</t_3>", "\1") ; числа
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_4>(.*?)</t_4>", "\1") ; функции
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_5>(.*?)</t_5>", "\1") ; операторы управления
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_6>(.*?)</t_6>", "\1") ; макросы-подстановки
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_7>(.*?)</t_7>", "\1") ; литеры
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_8>(.*?)</t_8>", "\1") ; операторы
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_9>(.*?)</t_9>", "\1") ; имена переменных
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_10>(.*?)</t_10>", "\1") ; макросы клавиатуры
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_11>(.*?)</t_11>", "\1") ; макросы препроцессора
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_12>(.*?)</t_12>", "\1") ; Регион (#Region)
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_13>(.*?)</t_13>", "\1") ; аббривиатуры
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_14>(.*?)</t_14>", "\1") ; свойства/методы объектов
$sText = StringRegExpReplace($sText, "(?s)(?i)<t_15>(.*?)</t_15>", "\1") ; штатные UDF
Но почему-то #CS..#CE неверно раскрашиваются, #CS и содержимое нормально, а вот #CE приобретает цвет magenta :idontnow: .
Не уверен что понял »...в смысле может ты знаешь все возможные цвета?
вот какие стили у меня уже имеются »хм, в скрипте с твоего сайта нет всех этих цветов
почему-то #CS..#CE неверно раскрашиваются »посмотрел твой скрипт (тот что с сайта) - если XML подавать сразу на вход функции то все нормально - у тебя где-то по ходу подменяются стили, в частности проставляется "<t n='2'>"
amel27,
...в смысле может ты знаешь все возможные цвета? »
Нет, но подобрать не сложно - используем пипетку какого нибудь цветового пикера (Diamond написал один такой), наводим над нужным цветом и получаем Hex-значение, затем тут (http://www.w3schools.com/html/html_colornames.asp) пытаемся найти наиболее подходящее текстовое значение :)
А ещё можно используя SciteConfig получить текущие значения для подсветок.
в скрипте с твоего сайта нет всех этих цветов
Я ещё не обновлял, хотел выложить работающй вариант со всеми стилями.
Вот вариант который плохо отрабатывает: Au3ToPst_Unstable.au3 (http://creator-lab.ucoz.ru/Testing_Zone/Au3ToPst_Unstable.au3).
Просто включи ручной ввод кода, введи блок комментов:
#CS
Some comments
#CE
И выполни обработку, на выходе получается это:
#CS
Some comments
#CE
Есть идеи как поправить? :shuffle: - Возможно имеет значение порядок расстановки при замене стилей?
затем тут пытаемся найти наиболее подходящее текстовое значение»супер!.. меня именно текстовый аналог интересовал :)
Есть идеи как поправить? - Возможно имеет значение порядок расстановки при замене стилей? »посмотрел - это баг SciTE: при "ручном" формировании XML правильный, а при автоматическом стиль не тот :beta:
спасибо за помощ доделал все что хотел!!!!!!!!!!!
огромное спасибо активным участникам обсуждения!!!!!
к стати вот что вышло!!!
я добавил еще одно поле для номера крнфигурации машины!!!
MsgBox(0, "IP-Adress", @IPAddress1)
MsgBox(0, "Computer-name", @ComputerName)
$nEdit = InputBox("Input inventory ID", "Input inventory ID", "", "", -1,3,175,20)
$aEdit = InputBox("Input Everest ID", "Input Everest ID", "", "", -1,30,175,20)
$xEdit = InputBox("Введите тип конфигурации", "Введите тип конфигурации", "", "", -1,3,175,20)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$Output = "" & $objItem.MACAddress & @CRLF
next
FileWrite(FileOpen("\\192.168.0.254\public\senka1985\ipconfig.txt",1),"" &$nEdit& " "& $aEdit &" "&@IPAddress1 &" "&$Output &"тип" &$xEdit)
Endif
спс!!!
amel27,
посмотрел - это баг SciTE
Ты используешь последнюю (http://www.autoitscript.com/forum/index.php?showtopic=62692&hl=Scite) версию?
Если да, то нужно будет запостить баг репорт (я оставлю если что), думаю поправят.
Я себе пока не могу ставить ещё одну версию SciTE (или поверх), у меня паралельно стоит две версии с AutoIt'а (кстати я сделал себе удобный переключатель между версиями, если интересно, могу выложить :)), не хочу напортить текущие версии.
P.S
Я если честно не ожидал такого бесповоротного исхода :) , думал можно будет обойти эту проблему средствами скрипта...
Senka11,
Уже несколько раз говорилось, что FileOpen нужно закрывать (FileClose), если используется один раз, то не нужно вовсе его использовать, по умолчанию файл будет дописываться...
FileWrite("\\192.168.0.254\public\senka1985\ipconfig.txt","" &$nEdit& " "& $aEdit &" "&@IPAddress1 &" "&$Output &"тип" &$xEdit)
P.S
А код нужно заключать либо в теги [cоde] (#), либо разукрашивать (http://creator-lab.ucoz.ru/load/3-1-0-18) ;) - но не как не в php.
Ты используешь последнюю версию? »хм, загрузил последнюю, там все нормально!.. но супернавороченная проверка синтаксиса еще до запуска ругнулась на _GUICtrlEditSetSel() :) ...чего не было в старой версии
я сделал себе удобный переключатель между версиями, если интересно, могу выложить »думаю будет интересно не только мне
Dizelsoft
06-02-2008, 22:04
Доброе время суток, уважаемые!
Помогите решить следующие проблемы по автоматизации установки 1) Office 2003 и 2) XnView.
1) Написал код до появления этого окна (_http://img516.imageshack.us/img516/6619/74845641ze7.jpg). Как сделать MouseClick на Microsoft Office, а затем на появившееся окно (_http://img516.imageshack.us/img516/2967/70406322fz5.jpg)? Window Info не выдает никакой информации (кроме позиции мышки)
2) Как клацнуть эту менюшку? (_http://img516.imageshack.us/img516/1678/69200012in8.jpg)
Dizelsoft
1. Например так: #include <GuiTreeView.au3>
WinWait("Установка Microsoft Office 2003")
$hWin = WinGetHandle("Установка Microsoft Office 2003")
WinActivate($hWin)
WinWaitActive($hWin)
ControlFocus("Установка Microsoft Office 2003", "", "SysTreeView321")
$hSysTV = ControlGetHandle($hWin, "", "SysTreeView321")
$hItem = _GUICtrlTreeView_GetItemHandle($hSysTV, 0)
_GUICtrlTreeView_SelectItem($hSysTV, $hItem)
Send('{SPACE}')
WinWait("[CLASS:#32768]")
Send('{DOWN 2}{ENTER}')между прочим - знакомы с темой Автоматическая установка Office 2003 (http://forum.oszone.net/thread-60601.html)?
2. WinActivate("XnView")
Send("!A")
Maza Faka
07-02-2008, 08:16
Dizelsoft
Смотри (http://oszone.net/display.php?id=3663) пункт №6.
amel27, All
думаю будет интересно не только мне
AutoIt Path Switcher (http://creator-lab.ucoz.ru/load/3-1-0-38)
http://ipicture.ru/uploads/080207/thumbs/d6LnlM27WG.png (http://ipicture.ru/Gallery/Viewfull/501283.html)
Этот небольшой скрипт предназначен для переключения между разными версиями (инстанциями/путями) AutoIt'а.
Очень полезно для иследования новых фич в последней версии AutoIt'a, и в то же время вы имеете возможность дорабатывать ваши скрипты на той версии, для которой они изначально писались.
Или просто хотите паралельно вести два проэкта, один на старой версии, другой на новой.
[Зеркало в качестве вложения (http://forum.oszone.net/attachment.php?attachmentid=8691&d=1202395755) :) ]
thief_89
07-02-2008, 20:42
Maza Faka
спасибо!
Creat0R
вообщем скрипт создаёт в определёном месте папку с опредлёным названием и туда копирует файлы из заранее указаной папки. в принцыпе всё работает, файлы копируются но хотелось бы добавить строку прогресса в это скрипт. я в аутоите всего пару дней поэтому если где и "туплю" ногами не бейте )
у кого нить есть идеи по поводу моей пробелемы?
HORRIBLE
07-02-2008, 22:03
такой вопрос появился.
Создал окно, в нем поля ввода, информацию введенную в эти поля надо передать в Excel-ий файл, только вот вопрос нужно чтобы записаная информация была, в виде: Картинку прилепил. (как бы в один столбик получается все затоганить, а как вот так сделать непойму.)
И еще одно, вот если у меня есть input (Автор 1) и 2 кнопки, функция второй кнопки такая: вдруг понадобилось вписать 2-го автора, жмак на кнопку появляется еще один input, а как сделать так чтобы этих инпутов могло появиться сколько я нажму на кнопку, да и потом все это в екселевский файл все записать как на прилепленой картинке.
Спасибо.
thief_89, скрипт создаёт в определёном месте папку с опредлёным названием и туда копирует файлы из заранее указаной папки.
Какой скрипт? код скрипта можно увидеть?
HORRIBLE, как сделать так чтобы этих инпутов могло появиться сколько я нажму на кнопку
Самопальные инпуты нужны...
Примерно так:
#include <GuiConstants.au3>
#include <Array.au3>
Global $aData_Inputs[1]
Global $aClose_Buttons[1]
Global $aOK_Buttons[1]
$Main_GUI = GUICreate("Multiple Inputs", 300, 200)
$ShowInput_Button = GUICtrlCreateButton("Show Input", 20, 40, 80, 20)
GUISetState(@SW_SHOW, $Main_GUI)
While 1
$nMsg = GUIGetMsg(1)
If $nMsg[0] <> 0 Then
For $i = 1 To UBound($aClose_Buttons)-1
If $nMsg[0] = $aClose_Buttons[$i] Or $nMsg[0] = $aOK_Buttons[$i] Then
If $nMsg[0] = $aOK_Buttons[$i] Then _
ConsoleWrite(StringFormat("Data From Input [%d]: %s", $i, GUICtrlRead($aData_Inputs[$i])) & @LF)
GUIDelete($nMsg[1])
$aOK_Buttons[0] -= 1
$aClose_Buttons[0] -= 1
$aData_Inputs[0] -= 1
ExitLoop
EndIf
Next
EndIf
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
If $nMsg[1] = $Main_GUI Then Exit
GUIDelete($nMsg[1])
Case $ShowInput_Button
GUICreate("Input Data", 380, 140, Random(0, 300, 0), Random(0, 600, 0))
$aData_Inputs[0] += 1
$aOK_Buttons[0] += 1
$aClose_Buttons[0] += 1
ReDim $aData_Inputs[$aData_Inputs[0]+1]
ReDim $aOK_Buttons[$aOK_Buttons[0]+1]
ReDim $aClose_Buttons[$aClose_Buttons[0]+1]
$aData_Inputs[$aData_Inputs[0]] = GUICtrlCreateInput("", 20, 70, 340, 20)
$aOK_Buttons[$aOK_Buttons[0]] = GUICtrlCreateButton("OK", 20, 100, 60, 20)
$aClose_Buttons[$aClose_Buttons[0]] = GUICtrlCreateButton("Close", 120, 100, 60, 20)
GUISetState()
EndSwitch
WEnd
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.