PDA

Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.


Страниц : 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

Creat0R
01-02-2008, 20:26
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

Creat0R
04-02-2008, 09:05
Давно искал функцию для проверки цвета, содержится ли в нём оттенок тёмного или светлого, и наконец (с небольшой (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

Суть в том, что если юзер выбрал тёмный/светлый цвет, то цвет текста соответственно меняется на противоположный (и вто время видимый на фоне) цвет :).

amel27
04-02-2008, 09:38
2All
ламерский вопрос: для чего используется оператор #region ?

2Creat0R
случайно наткнулся на его цветовое обозначение - INDIGO :)

Creat0R
04-02-2008, 11:10
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, по крайней мере тут на форуме.

amel27
04-02-2008, 11:54
Обозначет блок кода »чем он лучше уже имеющихся операторов?.. в смысле чем не устраивали старые?#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 чётче отражает »может огласишь весь список? ;)

Creat0R
04-02-2008, 23:43
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: .

amel27
05-02-2008, 05:35
Не уверен что понял »...в смысле может ты знаешь все возможные цвета?
вот какие стили у меня уже имеются »хм, в скрипте с твоего сайта нет всех этих цветов
почему-то #CS..#CE неверно раскрашиваются »посмотрел твой скрипт (тот что с сайта) - если XML подавать сразу на вход функции то все нормально - у тебя где-то по ходу подменяются стили, в частности проставляется "<t n='2'>"

Creat0R
05-02-2008, 06:55
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: - Возможно имеет значение порядок расстановки при замене стилей?

amel27
05-02-2008, 12:25
затем тут пытаемся найти наиболее подходящее текстовое значение»супер!.. меня именно текстовый аналог интересовал :)
Есть идеи как поправить? - Возможно имеет значение порядок расстановки при замене стилей? »посмотрел - это баг SciTE: при "ручном" формировании XML правильный, а при автоматическом стиль не тот :beta:

Senka11
05-02-2008, 15:59
спасибо за помощ доделал все что хотел!!!!!!!!!!!

огромное спасибо активным участникам обсуждения!!!!!
к стати вот что вышло!!!
я добавил еще одно поле для номера крнфигурации машины!!!


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





спс!!!

Creat0R
05-02-2008, 16:01
amel27,
посмотрел - это баг SciTE
Ты используешь последнюю (http://www.autoitscript.com/forum/index.php?showtopic=62692&hl=Scite) версию?
Если да, то нужно будет запостить баг репорт (я оставлю если что), думаю поправят.

Я себе пока не могу ставить ещё одну версию SciTE (или поверх), у меня паралельно стоит две версии с AutoIt'а (кстати я сделал себе удобный переключатель между версиями, если интересно, могу выложить :)), не хочу напортить текущие версии.

P.S
Я если честно не ожидал такого бесповоротного исхода :) , думал можно будет обойти эту проблему средствами скрипта...

Creat0R
05-02-2008, 16:23
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.

amel27
06-02-2008, 04:47
Ты используешь последнюю версию? »хм, загрузил последнюю, там все нормально!.. но супернавороченная проверка синтаксиса еще до запуска ругнулась на _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)

amel27
07-02-2008, 08:04
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.

Creat0R
07-02-2008, 17:52
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, а как сделать так чтобы этих инпутов могло появиться сколько я нажму на кнопку, да и потом все это в екселевский файл все записать как на прилепленой картинке.


Спасибо.

Creat0R
07-02-2008, 23:07
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