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

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

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

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя эмуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши, управление окнами и их визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 13:07 01-06-2010 | Исправлено: Maz, 12:29 10-01-2020
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Всех с переездом!

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:53 01-06-2010
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    По поводу Ссылка
    Кроме этого, надо исправить удаление отладочных строк
    Подробнее...

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:59 01-06-2010 | Исправлено: NIKZZZZ, 16:06 01-06-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ 15:59 01-06-2010
    Цитата:
    Кроме этого, надо исправить удаление отладочных строк

    В этом случае можно не дублировать функции:
     

    Код:
    function AutoItTools:ConsoleWritePattern(with_comment)
        return self:MsgBoxPattern(with_comment)
    end    -- ConsoleWritePattern()
     
    function AutoItTools:MsgBoxPattern(with_comment)
        local nl = self:NewLineInUse()
        if with_comment then
            return nl .. "[%s]*;[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
        else
            return nl .. "[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
        end
    end    -- MsgBoxPattern()


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 16:26 01-06-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть скрипт на vbscript, меняет рабочую группу, тут нашел пример всовывания vbscript в AutoIT, но он чет вылетает на с ошибкой
    Исходный скрипт:

    Код:
     
    Const JOIN_DOMAIN = 1
    Const ACCT_CREATE = 2
    Const ACCT_DELETE = 4
    Const WIN9X_UPGRADE = 16
    Const DOMAIN_JOIN_IF_JOINED = 32
    Const JOIN_UNSECURE = 64
    Const MACHINE_PASSWORD_PASSED = 128
    Const DEFERRED_SPN_SET = 256
    Const INSTALL_INVOCATION = 262144
     
    strDomain = "NewGr"
     
    Set objNetwork = CreateObject("WScript.Network")
    strComputer = objNetwork.ComputerName
    Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
        strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
    ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain)
     

    AutoIT

    Код:
    $ProcessName = "AutoIt3.exe"
    $RetArr = _ProcessExistsVbs($ProcessName)
    If IsArray($RetArr) Then MsgBox(64, "", "Process <" & $RetArr[1] & "> exists." & @LF & @LF & _
        "The returned PID is: " & $RetArr[2] & @LF & @LF & _
        "Returned Executable Path is: " & @LF & $RetArr[3] & @LF & @LF & _
        "Command Line of executed process is: " & @LF & $RetArr[4])
     
    Func _ProcessExistsVbs($ProcName)
         Local $Code = ""
        $Code &= 'Function ProcessExists(ProcessName)' & @LF
        $Code &= 'Const JOIN_DOMAIN = 1' & @LF
        $Code &= 'Const ACCT_CREATE = 2' & @LF
        $Code &= 'Const ACCT_DELETE = 4' & @LF
        $Code &= 'Const WIN9X_UPGRADE = 16' & @LF
        $Code &= 'Const DOMAIN_JOIN_IF_JOINED = 32' & @LF
        $Code &= 'Const JOIN_UNSECURE = 64' & @LF
        $Code &= 'Const MACHINE_PASSWORD_PASSED = 128' & @LF
        $Code &= 'Const DEFERRED_SPN_SET = 256' & @LF
        $Code &= 'Const INSTALL_INVOCATION = 262144' & @LF
        $Code &= 'strDomain = "NewGr"' & @LF
        $Code &= 'Set objNetwork = CreateObject("WScript.Network")' & @LF
        $Code &= 'strComputer = objNetwork.ComputerName' & @LF
     
        $Code &= "Set objComputer = GetObject(" & """winmgmts:{impersonationLevel=Impersonate}!\\""" &     " & strComputer & " & """\root\cimv2:Win32_ComputerSystem.Name='" & " & strComputer & " & "'" & @LF
     
        $Code &= 'ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain)' & @LF
        $Code &= 'End Function'
     
        Local $VbsObj = ObjCreate("ScriptControl")
        If @error Then Return SetError(1, 0, -1)
        $VbsObj.Language = "vbscript"
    $VbsObj.AddCode($Code)
        Local $RetArr = $VbsObj.[i]Run[/i]("ProcessExists", $ProcName)
        If $RetArr = 0 Then Return SetError(0, 0, 0)
        Return $RetArr
    EndFunc

    в общем, ругается он на эту строчку:
     

    Код:
    $Code &= "Set objComputer = GetObject(" & """winmgmts:{impersonationLevel=Impersonate}!\\""" & " & strComputer & " & """\root\cimv2:Win32_ComputerSystem.Name='" & " & strComputer & " & "'" & @LF

     
    Ошибка: The requested action with this object has failed.
     
    подскажите плиз, что ему не хватает?

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 18:16 02-06-2010 | Исправлено: degid, 14:38 03-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    degid
    если внутри строки у тебя есть кавычки " то саму строку надо заключать в апострофы ' и наоборот.
     
    Зы хотел написать готовую но запутался в твоей строке

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 19:02 02-06-2010 | Исправлено: Kar1son, 19:03 02-06-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    degid 18:16 02-06-2010
    Цитата:
    Есть скрипт на vbscript, меняет рабочую группу, тут нашел пример всовывания vbscript в AutoIT, но он чет вылетает на с ошибкой

    А зачем выполнять vbs из AutoIt, это не тот случай , вот тот же скрипт но переведён на AutoIt (не тестировал):
     

    Код:
    Const $JOIN_DOMAIN = 1
    Const $ACCT_CREATE = 2
    Const $ACCT_DELETE = 4
    Const $WIN9X_UPGRADE = 16
    Const $DOMAIN_JOIN_IF_JOINED = 32
    Const $JOIN_UNSECURE = 64
    Const $MACHINE_PASSWORD_PASSED = 128
    Const $DEFERRED_SPN_SET = 256
    Const $INSTALL_INVOCATION = 262144
     
    $strDomain = "NewGr"
     
    $objNetwork = ObjCreate("WScript.Network")
    $strComputer = $objNetwork.ComputerName
    $objComputer = ObjGet("winmgmts:{impersonationLevel=Impersonate}!\\" & $strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & $strComputer & "'")
    $ReturnValue = $objComputer.JoinDomainOrWorkGroup($strDomain)


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 21:33 02-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    а откуда ты узнаешь об обектах? например в ObjCreate("WScript.Network"), ты откуда узнал что есть такой объект "WScript.Network"?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 01:12 03-06-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Kar1son 01:12 03-06-2010
    Цитата:
    откуда ты узнаешь об обектах? например в ObjCreate("WScript.Network"), ты откуда узнал что есть такой объект "WScript.Network"?

    Это из скрипта от degid
     
    А вообще есть такой инструмент как Scriptomatic, там можно много чего узнать об объектах (работа с WMI), ну и конечно же разные справки по теме WSH.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 02:09 03-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть команда Send('Kar1son{Enter}'), а если в момент выполнения язык в системе переключен на русский то получается "Лфк1ыщт". Есть способы кроме как посылать через Send ASCII коды символов?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 14:05 03-06-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son, ViSiToR
    разобрался, всё дело в кавычках... (там просто сразу " и ' используются, записал $Code в файлик и всё увидел)

    Код:
    $Code &= "Set objComputer = GetObject(" & """winmgmts:{impersonationLevel=Impersonate}!\\""" & " & _" & @LF
        $Code &= "strComputer & " & """\root\cimv2:Win32_ComputerSystem.Name='""" & " & _" & @LF
        $Code &= "strComputer & " & """'""" & ")" & @LF

    конечно, было бы прикольно его полностью переделать на AutoIt...  но отложу разбор на потом...  

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 14:21 03-06-2010 | Исправлено: degid, 14:40 03-06-2010
    NIKZZZZ



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

    Цитата:
    разобрался, всё дело в кавычках...

    В таких случаях удобно использовать одиночные кавычки, например:

    Код:
    $Code &= 'Set objComputer = GetObject(' & '"winmgmts:{impersonationLevel=Impersonate}!\\"' & ' & _' & @LF  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:29 03-06-2010
    degid



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

    Цитата:
    есть команда Send('Kar1son{Enter}'), а если в момент выполнения язык в системе переключен на русский то получается "Лфк1ыщт". Есть способы кроме как посылать через Send ASCII коды символов?

    http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=2620#15

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 14:32 03-06-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Kar1son 14:05 03-06-2010
    Цитата:
    Есть способы кроме как посылать через Send ASCII коды символов?

    Обход проблемы с кодировкой при использовании Send
     
    degid 14:21 03-06-2010
    Цитата:
    было бы прикольно его полностью переделать на AutoIt

    Я привёл пример выше.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:20 03-06-2010
    Z4masko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как автоматизировать нажатия в Internet Explorer по элементам меню, которое написано на JavaScript?  
    То есть есть выпадающее меню на Javascript и справа кнопочка Ок например (то же относится к этому скрипту). И вот как бы указать через Auto It те элементы меню ,на которые надо кликать и потом нажимать ОК ?  
    С обычными ссылками понятно - можно просто делать: _IELinkClickByText  
    А вот как кликать когда все меню на JavaScript - непонятно (
    Почитал мануал, там написано что при таких случаях надо кликать с помощью:  

    Код:
    _IEAction ($element, "click")

    Но вот какой функцией определить имя этого элемента и присвоить его к переменной $element ?  

    Всего записей: 735 | Зарегистр. 05-11-2004 | Отправлено: 16:45 03-06-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Z4masko
    Вы здесь посмотрите: Выбрать определенное значение из списка в окне, там для vkontakte есть готовое решение.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 17:25 03-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Z4masko
    я когда пытался этой функцией пользоваться, сохранял страничку и потом в коде(блокнотом открывал просто) искал имя элемента

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 18:02 03-06-2010
    degid



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

    Цитата:
    Kar1son  
    degid 14:21 03-06-2010
    Цитата:
    было бы прикольно его полностью переделать на AutoIt

    Я привёл пример выше.

    Спасибо!!! Работает )

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 18:12 03-06-2010 | Исправлено: degid, 18:24 03-06-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Маленькая задачка: Необходимо сформировать энное количество байтов, но заранее нам это количество не известно. Оно появляется в результате другой функции.
    Я сделал вот так:

    Код:
    $iBytesToAdd = 10
    $string = ""
    $stringlen = ""
    While 1
        $string &= "00"
        $stringlen = StringLen ($string)
        If $stringlen = $iBytesToAdd * 2 Then ExitLoop
    WEnd

    $bstring = "0x" & $string
    $bstring
    = Binary ($bstring)

    Но может, кто-то подскажет более элегантное решение?

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 11:45 04-06-2010
    NIKZZZZ



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

    Цитата:
    более элегантное решение?

     

    Код:
    $iBytesToAdd = 10
    $string = "0x"
    For $i= 1 To $iBytesToAdd
        $string &= "00"  
    Next
    $bstring = Binary ($string)
     
    Другой вариант, если $iBytesToAdd ограничено
     

    Код:
    $iBytesToAdd = 10  
    $bstring = BinaryMid (Binary ("0x000000000000000000000000000000000000000000000000000000000000"),1,$iBytesToAdd)

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:20 04-06-2010 | Исправлено: NIKZZZZ, 12:30 04-06-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да, первый оптимизированный вариант мне подходит. Спасибо.
    Второй нет, так как максимальное количество байт 2047
    Просто я думал, может есть совсем иные способы, значит я выбрал правильный путь.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 13:01 04-06-2010
    AZJIO



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

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 06:30 06-06-2010 | Исправлено: AZJIO, 05:51 16-10-2014
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть скрипт на vbscript (меняет IP на локальном компьютере):

    Код:
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colNetAdapters = objWMIService.ExecQuery _
        ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
    strIPAddress = Array("192.168.0.141")
    strSubnetMask = Array("255.255.255.0")
    strGateway = Array("192.168.0.100")
    strGatewayMetric = Array(1)
    For Each objNetAdapter in colNetAdapters
        errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
        errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
        If errEnable = 0 Then
            WScript.Echo "The IP address has been changed."
        Else
            WScript.Echo "The IP address could not be changed."
        End If
    Next

    в общем, при переделывании наткнулся на такую фишку, там переменным strIPAddress, strSubnetMask, strGateway значение присваивается через Array... типа Array("255.255.255.0")... Есть что-то подобное в AutoIT? или как-то ещё может можно сделать...
     
    Добавлено:
    делюсь: Скрипт меняет имя компьютера:

    Код:
    Func CompReName($strComputerNewName)
        Local $objNetwork, $objWMIService, $collComputers, $objComputer
        $objNetwork = ObjCreate("WScript.Network")
        $strComputerCurrName = $objNetwork.ComputerName
        If StringLen($strComputerNewName) <> 0 Then
            $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputerCurrName & "\root\cimv2")
            $collComputers = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem")
            For $objComputer in $collComputers
                $objComputer.Rename($strComputerNewName)
            Next
        EndIf
    EndFunc

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 18:29 08-06-2010 | Исправлено: degid, 18:30 08-06-2010
    Kar1son

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

    Цитата:
    Array("255.255.255.0")

    может имеется в виду массив символов? (string = array (Char) ) тогда просто присвоение strIPAddress = "192.168.0.141"

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 08:57 09-06-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ругается тогда:
     "TLine 11  (File "ip.au3"):
    $errEnable = $objNetAdapter.EnableStatic($strIPAddress, $strSubnetMask)
    $errEnable = $objNetAdapter.EnableStatic($strIPAddress, $strSubnetMask)^ ERROR
    Error: The requested action with this object has failed."......

    Код:
    $strComputer = "."
    $objWMIService = ObjGet("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
    $colNetAdapters = $objWMIService.ExecQuery _
        ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
    $strIPAddress = "192.168.0.141"
    $strSubnetMask = "255.255.255.0"
    $strGateway = "192.168.0.254"
    $strGatewayMetric = 1
    For $objNetAdapter in $colNetAdapters
        $errEnable = $objNetAdapter.EnableStatic($strIPAddress, $strSubnetMask)
        $errGateways = $objNetAdapter.SetGateways($strGateway, $strGatewaymetric)
        If $errEnable = 0 Then
        MsgBox(4096,"-", "The IP address has been changed.")
        Else
        MsgBox(4096,"-", "The IP address could not be changed.")
        EndIf
    Next

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 11:46 09-06-2010 | Исправлено: degid, 12:09 09-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Посмотрел в скриптоматике, не нашел метода "$objNetAdapter.EnableStatic" (WinXP 32 SP3)

    Код:
    ; Generated by AutoIt Scriptomatic
     
    $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", "WQL", _
                                              $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
     
    If IsObj($colItems) then
       For $objItem In $colItems
          $Output = $Output & "ArpAlwaysSourceRoute: " & $objItem.ArpAlwaysSourceRoute & @CRLF
          $Output = $Output & "ArpUseEtherSNAP: " & $objItem.ArpUseEtherSNAP & @CRLF
          $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
          $Output = $Output & "DatabasePath: " & $objItem.DatabasePath & @CRLF
          $Output = $Output & "DeadGWDetectEnabled: " & $objItem.DeadGWDetectEnabled & @CRLF
          $strDefaultIPGateway = $objItem.DefaultIPGateway(0)
          $Output = $Output & "DefaultIPGateway: " & $strDefaultIPGateway & @CRLF
          $Output = $Output & "DefaultTOS: " & $objItem.DefaultTOS & @CRLF
          $Output = $Output & "DefaultTTL: " & $objItem.DefaultTTL & @CRLF
          $Output = $Output & "Description: " & $objItem.Description & @CRLF
          $Output = $Output & "DHCPEnabled: " & $objItem.DHCPEnabled & @CRLF
          $Output = $Output & "DHCPLeaseExpires: " & WMIDateStringToDate($objItem.DHCPLeaseExpires) & @CRLF
          $Output = $Output & "DHCPLeaseObtained: " & WMIDateStringToDate($objItem.DHCPLeaseObtained) & @CRLF
          $Output = $Output & "DHCPServer: " & $objItem.DHCPServer & @CRLF
          $Output = $Output & "DNSDomain: " & $objItem.DNSDomain & @CRLF
          $strDNSDomainSuffixSearchOrder = $objItem.DNSDomainSuffixSearchOrder(0)
          $Output = $Output & "DNSDomainSuffixSearchOrder: " & $strDNSDomainSuffixSearchOrder & @CRLF
          $Output = $Output & "DNSEnabledForWINSResolution: " & $objItem.DNSEnabledForWINSResolution & @CRLF
          $Output = $Output & "DNSHostName: " & $objItem.DNSHostName & @CRLF
          $strDNSServerSearchOrder = $objItem.DNSServerSearchOrder(0)
          $Output = $Output & "DNSServerSearchOrder: " & $strDNSServerSearchOrder & @CRLF
          $Output = $Output & "DomainDNSRegistrationEnabled: " & $objItem.DomainDNSRegistrationEnabled & @CRLF
          $Output = $Output & "ForwardBufferMemory: " & $objItem.ForwardBufferMemory & @CRLF
          $Output = $Output & "FullDNSRegistrationEnabled: " & $objItem.FullDNSRegistrationEnabled & @CRLF
          $strGatewayCostMetric = $objItem.GatewayCostMetric(0)
          $Output = $Output & "GatewayCostMetric: " & $strGatewayCostMetric & @CRLF
          $Output = $Output & "IGMPLevel: " & $objItem.IGMPLevel & @CRLF
          $Output = $Output & "Index: " & $objItem.Index & @CRLF
          $strIPAddress = $objItem.IPAddress(0)
          $Output = $Output & "IPAddress: " & $strIPAddress & @CRLF
          $Output = $Output & "IPConnectionMetric: " & $objItem.IPConnectionMetric & @CRLF
          $Output = $Output & "IPEnabled: " & $objItem.IPEnabled & @CRLF
          $Output = $Output & "IPFilterSecurityEnabled: " & $objItem.IPFilterSecurityEnabled & @CRLF
          $Output = $Output & "IPPortSecurityEnabled: " & $objItem.IPPortSecurityEnabled & @CRLF
          $strIPSecPermitIPProtocols = $objItem.IPSecPermitIPProtocols(0)
          $Output = $Output & "IPSecPermitIPProtocols: " & $strIPSecPermitIPProtocols & @CRLF
          $strIPSecPermitTCPPorts = $objItem.IPSecPermitTCPPorts(0)
          $Output = $Output & "IPSecPermitTCPPorts: " & $strIPSecPermitTCPPorts & @CRLF
          $strIPSecPermitUDPPorts = $objItem.IPSecPermitUDPPorts(0)
          $Output = $Output & "IPSecPermitUDPPorts: " & $strIPSecPermitUDPPorts & @CRLF
          $strIPSubnet = $objItem.IPSubnet(0)
          $Output = $Output & "IPSubnet: " & $strIPSubnet & @CRLF
          $Output = $Output & "IPUseZeroBroadcast: " & $objItem.IPUseZeroBroadcast & @CRLF
          $Output = $Output & "IPXAddress: " & $objItem.IPXAddress & @CRLF
          $Output = $Output & "IPXEnabled: " & $objItem.IPXEnabled & @CRLF
          $strIPXFrameType = $objItem.IPXFrameType(0)
          $Output = $Output & "IPXFrameType: " & $strIPXFrameType & @CRLF
          $Output = $Output & "IPXMediaType: " & $objItem.IPXMediaType & @CRLF
          $strIPXNetworkNumber = $objItem.IPXNetworkNumber(0)
          $Output = $Output & "IPXNetworkNumber: " & $strIPXNetworkNumber & @CRLF
          $Output = $Output & "IPXVirtualNetNumber: " & $objItem.IPXVirtualNetNumber & @CRLF
          $Output = $Output & "KeepAliveInterval: " & $objItem.KeepAliveInterval & @CRLF
          $Output = $Output & "KeepAliveTime: " & $objItem.KeepAliveTime & @CRLF
          $Output = $Output & "MACAddress: " & $objItem.MACAddress & @CRLF
          $Output = $Output & "MTU: " & $objItem.MTU & @CRLF
          $Output = $Output & "NumForwardPackets: " & $objItem.NumForwardPackets & @CRLF
          $Output = $Output & "PMTUBHDetectEnabled: " & $objItem.PMTUBHDetectEnabled & @CRLF
          $Output = $Output & "PMTUDiscoveryEnabled: " & $objItem.PMTUDiscoveryEnabled & @CRLF
          $Output = $Output & "ServiceName: " & $objItem.ServiceName & @CRLF
          $Output = $Output & "SettingID: " & $objItem.SettingID & @CRLF
          $Output = $Output & "TcpipNetbiosOptions: " & $objItem.TcpipNetbiosOptions & @CRLF
          $Output = $Output & "TcpMaxConnectRetransmissions: " & $objItem.TcpMaxConnectRetransmissions & @CRLF
          $Output = $Output & "TcpMaxDataRetransmissions: " & $objItem.TcpMaxDataRetransmissions & @CRLF
          $Output = $Output & "TcpNumConnections: " & $objItem.TcpNumConnections & @CRLF
          $Output = $Output & "TcpUseRFC1122UrgentPointer: " & $objItem.TcpUseRFC1122UrgentPointer & @CRLF
          $Output = $Output & "TcpWindowSize: " & $objItem.TcpWindowSize & @CRLF
          $Output = $Output & "WINSEnableLMHostsLookup: " & $objItem.WINSEnableLMHostsLookup & @CRLF
          $Output = $Output & "WINSHostLookupFile: " & $objItem.WINSHostLookupFile & @CRLF
          $Output = $Output & "WINSPrimaryServer: " & $objItem.WINSPrimaryServer & @CRLF
          $Output = $Output & "WINSScopeID: " & $objItem.WINSScopeID & @CRLF
          $Output = $Output & "WINSSecondaryServer: " & $objItem.WINSSecondaryServer & @CRLF
          if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
          $Output=""
       Next
    Else
       Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_NetworkAdapterConfiguration" )
    Endif
     
     
    Func WMIDateStringToDate($dtmDate)
     
        Return (StringMid($dtmDate, 5, 2) & "/" & _
        StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
        & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 12:27 09-06-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    тупо всунул скрипт в AutoIT, работает...........

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 13:04 09-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    degid
    ты же только что говорил что ошибка?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 14:00 09-06-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    он ругается если его переделать полностью на AutoIT, сам vbs скрипт рабочий... Всунул его вот так:

    Код:
    $ProcessName = "AutoIt3.exe"
    $RetArr = _ProcessExistsVbs($ProcessName, "192.168.0.14")
    If IsArray($RetArr) Then MsgBox(64, "", "Process <" & $RetArr[1] & "> exists." & @LF & @LF & _
        "The returned PID is: " & $RetArr[2] & @LF & @LF & _
        "Returned Executable Path is: " & @LF & $RetArr[3] & @LF & @LF & _
        "Command Line of executed process is: " & @LF & $RetArr[4])
     
    Func _ProcessExistsVbs($ProcName, $ip)
         Local $Code = ""
        $Code &= 'Function ProcessExists(ProcessName)' & @LF
        $Code &= 'On Error Resume Next' & @LF
        $Code &= 'strComputer = "."' & @LF
        $Code &= 'Set objWMIService = GetObject("winmgmts:" _' & @LF
        $Code &= '& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")' & @LF
        $Code &= 'Set colNetAdapters = objWMIService.ExecQuery _' & @LF
        $Code &= '("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")' & @LF
        $Code &= 'strIPAddress = Array("' & $ip & '")' & @LF
        $Code &= 'strSubnetMask = Array("255.255.255.0")' & @LF
        $Code &= 'strGateway = Array("192.168.0.254")' & @LF
        $Code &=  'strGatewayMetric = Array(1)' & @LF
        $Code &=  'For Each objNetAdapter in colNetAdapters' & @LF
        $Code &=  'errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)' & @LF
        $Code &=  'errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)' & @LF
        $Code &=  'Next' & @LF
        $Code &= 'End Function'
     
        Local $VbsObj = ObjCreate("ScriptControl")
        If @error Then Return SetError(1, 0, -1)
        $VbsObj.Language = "vbscript"
    $VbsObj.AddCode($Code)
        Local $RetArr = $VbsObj.[i]Run[/i]("ProcessExists", $ProcName)
        If $RetArr = 0 Then Return SetError(0, 0, 0)
        Return $RetArr
    EndFunc

    в общем, пока так оставлю
     
    Добавлено:
    Ура!!! Оказывается существует файл Array.au3! там есть _ArrayCreate.

    Код:
    #include <Array.au3>
    $strIPAddress = _ArrayCreate("192.168.0.141")

    и всё ок

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 14:21 09-06-2010 | Исправлено: degid, 14:24 09-06-2010
    XpycTMD

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    degid
    Цитата:
    Ура!!! Оказывается существует файл Array.au3! там есть _ArrayCreate.

    Попробуй заменить
    Код:
    #include <Array.au3>
    $strIPAddress = _ArrayCreate("192.168.0.141")
     

    вот на это
    Код:
    Dim $strIPAddress[1] = ["192.168.0.141"]

    Всего записей: 120 | Зарегистр. 17-01-2006 | Отправлено: 17:40 09-06-2010 | Исправлено: XpycTMD, 17:44 09-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Немного пример упрощённой записи

    Цитата:
    $Output = "ArpAlwaysSourceRoute: " & $objItem.ArpAlwaysSourceRoute & @CRLF & _
    "ArpUseEtherSNAP: " & $objItem.ArpUseEtherSNAP & @CRLF & _
    "Caption: " & $objItem.Caption & @CRLF & _
    "DatabasePath: " & $objItem.DatabasePath & @CRLF & _
    "DeadGWDetectEnabled: " & $objItem.DeadGWDetectEnabled & @CRLF & _

     
    смысл в том, что любые многостроковые данные можно указать одной строкой, переходы строк в данном случае выплняют @CRLF. Но так как запись в одну строку неудобно читается, то выполняем перенос кода с помощью символа нижнего подчёркивания. В итоге вместо многократного объединения данных происходит просто один раз вставка данных в переменную $Output.
    Способ добавления точно также

    Цитата:
    $Output &= "ArpAlwaysSourceRoute: " & $objItem.ArpAlwaysSourceRoute & @CRLF & _
    "ArpUseEtherSNAP: " & $objItem.ArpUseEtherSNAP & @CRLF & _
    "Caption: " & $objItem.Caption & @CRLF & _
    "DatabasePath: " & $objItem.DatabasePath & @CRLF & _
    "DeadGWDetectEnabled: " & $objItem.DeadGWDetectEnabled & @CRLF & _

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 12:31 10-06-2010 | Исправлено: AZJIO, 12:37 10-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    я знаю) тот код не я писал, это скриптоматик выдал "; Generated by AutoIt Scriptomatic"

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 12:40 10-06-2010
    drmodjo84

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно чтобы скрипт с эмулировал нажатие правой мыши на файле,затем в свойства и установил галки на совместимости  правах доступа и операционки.Но при этом нужна конкретность,без использования координатов и названий типа "Свойства".Файл будет использоваться на разных машинах с операционкой "Семерка".
    Я новичек и не могу заставить скрипт попасть на файл правой клавой.Объясните подробно плиз.

    Всего записей: 3 | Зарегистр. 11-06-2010 | Отправлено: 21:59 11-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    drmodjo84
    Попробуй лучше клавишами используя Send
    Alt+Enter - открываем окно свойств exe-файла
    Ctrl+Tab - перемещение по вкладкам 2 раза
    space - пробел - ставим галочку
    Tab - переход к элементу списка
    стрелка вниз - выбор совместимой системы
    Enter - применить
     
    скрипт можно прописать в реестр для файлов exe или использовать горячую клавишу, но тогда он будет всегда висеть в процессах.
     
    ________________________________  
     
    Есть у кого нибудь пример автоматического скролинга строк текста нужен для диалога "О программе". Случайно скачал утилиту (370кб), понравилась плавное движение текста.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 06:39 12-06-2010 | Исправлено: AZJIO, 08:28 12-06-2010
    drmodjo84

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можете привести пример скрипта .Как начать?Как правильно указать на файл который должен использоваться скриптом send?

    Всего записей: 3 | Зарегистр. 11-06-2010 | Отправлено: 07:25 12-06-2010
    AZJIO



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

    Цитата:
    ;Регистрация в контекстное меню
    RegRead("HKCR\exefile\shell\Совместимость\command", '')
    If @error=1 Then
        ;регистрация в реестре и копирование в системную папку, при первом запуске
    RegWrite("HKCR\exefile\shell\Совместимость\command","","REG_SZ",@AutoItExe&' "'&@SystemDir&'\Compatibility.au3" "%1"')
    If Not FileExists(@SystemDir&'\Compatibility.au3') Then FileCopy(@ScriptDir&'\Compatibility.au3', @SystemDir,1)
    EndIf
     
    ; выход если нет параметра
    If $CmdLine[0]=0 Then Exit
    ;выделяем файл в окне
    Run('Explorer.exe /select,"'&$CmdLine[1]&'"')
    ; посылаем команду для открытия окна Свойства
    Send("!{ENTER}")
    Sleep(30)
    $win=WinGetHandle(WinList("[REGEXPTITLE:Свойства:*]"))
    ; ожидаем открытие окна
    WinWaitActive($win)
    Sleep(30)
    ;посылаем команду окну горячими клавишами Windows... {TAB 2} - повторить TAB два раза
    Send("^{TAB 2}")
    Send("{SPACE}")
    Send("{TAB}")
    Send("{DOWN 3}")
    Send("{ENTER}")

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 08:14 12-06-2010 | Исправлено: AZJIO, 08:22 12-06-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Цитата:
    понравилась плавное движение текста.

    Посмотрите здесь: Au3ToPost ( ...\Includes\AboutBox.au3) и здесь: Прокрутка текста без мерцаний.
     
    С праздником всех!

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 09:57 12-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Попробовал используя UDF Table.au3 в скрипте Check_md5.au3 сделать диалог вывода, смотрится красиво, хотя много лишнего кода, а информация о хеш в принципе не нужна.
     

     
    madmasles
    Да, я знаю, но не много есть мерцание. А в той утилите практически нет, если только всматриваться. И процессор она на 30% меньше напрягает.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 13:31 12-06-2010 | Исправлено: AZJIO, 13:39 12-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сделал полный портабельный дистрибутив AutoIt3 v3.3.6.1 (20Мб), но при полных тестах столкнулся с проблемой, не работают директивы:

    Цитата:
    #AutoIt3Wrapper_Run_After="%autoitdir%\SciTE\ResHacker\ResHacker.exe" -add "%out%", "%out%", %scriptdir%\TextCorrection1.ico, IconGroup, 1, 0
    #AutoIt3Wrapper_Run_After="%autoitdir%\SciTE\ResHacker\ResHacker.exe" -delete "%out%", "%out%", DIALOG, 1000,
    #AutoIt3Wrapper_Run_After="%autoitdir%\SciTE\ResHacker\ResHacker.exe" -delete "%out%", "%out%", ICON, 161,
    #AutoIt3Wrapper_Run_After="%autoitdir%\SciTE\upx\upx.exe" -7 --compress-icons=0 "%out%"

    Проблема в пробелах пути папки "Program Files", если извлекаю дистрибутив в корень, то работает нормально.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 20:41 14-06-2010 | Исправлено: AZJIO, 21:25 14-06-2010
    Cegpuk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. Объясните, как работает функция. Не могу понять каким образом происходит переключение состояния не в паузе/в паузе.

    Код:
    Global $Paused
    HotKeySet("{PAUSE}", "TogglePause")
     
    Func TogglePause()
        $Paused = NOT $Paused
        While $Paused
            sleep(100)
        WEnd
    EndFunc

     
    2. Умеет ли AutoIT работать с памятью: чтение и запись.

    Всего записей: 287 | Зарегистр. 24-01-2007 | Отправлено: 21:04 14-06-2010 | Исправлено: Cegpuk, 21:17 14-06-2010
    vicbox777



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cegpuk 21:04 14-06-2010
    Цитата:
    1. Объясните, как работает функция. Не могу понять каким образом происходит переключение состояния не в паузе/в паузе.

    Поставь после $Paused = NOT $Paused, например msgbox и посмотри, какое значение будет в переменной - $Paused - сам догадаешся. Значение меняется так, ибо НЕ Истина=ложь, ибо НЕ Ложь=истина. Цикл работает пока Истина.

    Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 21:29 14-06-2010
    madmasles

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

    Цитата:
     Умеет ли AutoIT работать с памятью

    Умеет. Посмотрите эту UDF NomadMemory.
    И в англ. справке раздел Memory Management.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:46 14-06-2010
    Cegpuk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vicbox777,
    Я понимаю, как работает $Paused = NOT $Paused. Мне не понятно следующее: при первом же заходе в функцию $Paused получает NOT и следовательно While уже не должен работать. Но оно работает.
    Вот такое вариант мне полностью понятен:
    Код:
    Func Pause()
        $Paused = NOT $Paused
        While $Paused=True
           Sleep(100)
        WEnd
    EndFunc

    upd. Кажется дошло: $Paused по умолчанию имеет 0 и после NOT получается единицу? А While по умолчанию имеет единицу? Как-то так.
    upd2. MsgBox всё разъяснил, спасибо
     
    madmasles,
    Спасибо. Пользовался русской устаревшей справкой.

    Всего записей: 287 | Зарегистр. 24-01-2007 | Отправлено: 22:34 14-06-2010 | Исправлено: Cegpuk, 22:44 14-06-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Cegpuk 22:34 14-06-2010
    Цитата:
    MsgBox всё разъяснил

    Угу, это (или ToolTip в некоторых ситуациях) надёжный и простой метод отладки кода. У меня самая частоиспользуемая аббревиатура это mb (MsgBox(64, 'Title', |)).

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:16 14-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил скрипт list_var_funk.au3 - поиск переменных и функций, добавил возможность передавать путь в ком-строке, а значит использовать по горячей клавише в Scite, Notepad++. Добавил подсчёт переменных и кнопку "Open" для Include
     
    для Scite
     
    для Notepad++

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 09:24 15-06-2010 | Исправлено: AZJIO, 21:08 13-04-2011
    Kar1son

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

    Цитата:
    mb (MsgBox(64, 'Title', |))

    а что это? mb в справке не нашел, а на | ругается как не допустимый символ...

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:43 15-06-2010
    afanasy_spb_ru

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день, уважаемые!
    Написал в AutoIt утилиту-текстовый обработчик и откомпилировал её под DOS консоль. Хотелось бы добавить небольшой текст-описание, который бы был виден при старте утилиты в DOS консоли...
    Подскажите, пожалуйста, как писать строки в DOS консоль...
     
    (Изиняюсь, если тема уже поднималась... Утилита будет использоваться также на ПК под Linux, так что решения для записи строк в консоль Windows не катят...)

    Всего записей: 3 | Зарегистр. 28-05-2010 | Отправлено: 13:18 15-06-2010
    Cegpuk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son, Просто MsgBox(64, 'Title', |), вместо | интересующее значение. Я так понял.

    Всего записей: 287 | Зарегистр. 24-01-2007 | Отправлено: 13:49 15-06-2010
    vicbox777



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son 08:43 15-06-2010
    Цитата:
    а что это? mb в справке не нашел, а на | ругается как не допустимый символ...

    Это аббревиатуры для SciTE. Вот здесь есть описание для русской сборки SciTE. Вобщем смысл в том, что вводиш, например, mb, нажимаеш пробел и из mb получается уже то, что было написано ранее - Msgbox(64,"Title",|), например. Курсор будет стоять в месте символа - |, что удобно. Аббревиатур может быть много, и каждая может иметь свой фрагмент нужного кода, который таким образом очень быстро можно вставить в нужное место SciTE. Вобщем, кто раз попробовал пользоваться - будет пользоваться всю жизнь.

    Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 17:07 15-06-2010 | Исправлено: vicbox777, 17:18 15-06-2010
    kosjachok



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

    Цитата:
    Вот здесь есть описание для русской сборки SciTE.  

    Неплохо было бы добавить это в шапку... Странно что ещё нету ...

    Всего записей: 690 | Зарегистр. 18-08-2004 | Отправлено: 00:25 16-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    пример использования GUICtrlCreateGraphic, обновил 1 раз.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 04:36 16-06-2010 | Исправлено: AZJIO, 09:23 16-06-2010
    Kar1son

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

    Тложно объяснить словами, поэтому скриншот. Ищу красный цвет поочереди на всем поле(на скрине виден один квадрат, на самом деле их тут 6 на 6, просто на одном отрабатываю пока), поиск идет по каждому квадратику, на скрине поиск по квадрату ПОД тем на котором есть совпадение. Маленькая кнопочка показывает где проверка нашла совпадение по цвету, но видно же что его там нет! кусок проги которая это делает виден на скрине. если проверяемый квадрат начинается ниже предыдущего на 17 точек то все норм, если меньше то будет совпадение, причем в разных точках(если ниже на 1 пиксель то в одной, если на 2 пикселя то в другой).  Чертовщина какая-то...
    хотябы в каком направлении копать?  

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 15:25 16-06-2010 | Исправлено: Kar1son, 16:41 16-06-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Скачал Вашу картинку, поместил ее в окно, посмотрел цвет AutoIt v3 Window Info.
    У меня так все работает:
    Код:
    #include <GUIConstantsEx.au3>
     
    Opt("MouseCoordMode", 2)
    Opt("PixelCoordMode", 2)
     
    $Form1 = GUICreate("Form1", 650, 450, -1, -1)
    $Pic1 = GUICtrlCreatePic("1.jpg", 80, 104, 60, 60)
    $Button = GUICtrlCreateButton("Button", 500, 400,80, 30)
    GUISetState()
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Button
                $cord = PixelSearch( 0, 0, 650, 450, 0xF70B17, -1, 0, $Form1)
                If Not @error Then
                    MouseMove($cord[0], $cord[1], 20)
                Else
                    MsgBox(0, '', "Нет такого цвета")
                EndIf
        EndSwitch
    WEnd

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:07 16-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    оно и у меня так работает, но после того как находит точку(как в вашем примере), находит еще одну(левую)... вот как оно работает, если не сложно, посмотрте пожалуйста. Спасибо!
    _http://ifolder.ru/18197786

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:16 17-06-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Я поменял в Вашем скрипте (_http://ifolder.ru/18197786) Opt("PixelCoordMode", 0) на Opt("PixelCoordMode", 2) и кнопки создаются только там, где найден цвет, а лишние кнопки у меня не создаются.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 10:14 17-06-2010 | Исправлено: madmasles, 10:20 17-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    я кажется понял.я промахнулся с координатами квадратов, и плюс к этому PixelSearch давал координаты от угла окна, а GUICtrlCreateButton координаты от клиентского окна... Спасибо что помогли разобраться!

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 10:35 17-06-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XpycTMD
    Цитата:
    degid
    Цитата:
    Ура!!! Оказывается существует файл Array.au3! там есть _ArrayCreate.

    Попробуй заменить
    Код:
    #include <Array.au3>
    $strIPAddress = _ArrayCreate("192.168.0.141")
     

    вот на это
    Код:
    Dim $strIPAddress[1] = ["192.168.0.141"]

     

    Спасибо! Работает

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 15:28 17-06-2010
    Orion_76



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Никто незнает способа, как получить права доступа пользователя к файлу-папке?
    (которые в свойствах файла на вкладке Безопасность..)

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 00:12 20-06-2010
    AZJIO



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

    Цитата:
    Func _cacls()
        $accfncombo0 = GUICtrlRead($accfncombo)
        $access00 = GUICtrlRead($access)
        Switch $access00
            Case $access00 = "запрет"
                $access0 = "N"
            Case $access00 = "чтение"
                $access0 = "R"
            Case $access00 = "запись"
                $access0 = "W"
            Case $access00 = "изменение"
                $access0 = "C"
            Case $access00 = "полный"
                $access0 = "F"
            Case Else
                $access0 = "F"
        EndSwitch
        ShellExecute(@SystemDir & '\cacls.exe', '"' & $sTarget & '" /t /e /p "' & $accfncombo0 & '":' & $access0, '', '', @SW_HIDE)
    EndFunc   ;==>_cacls

     
    $sTarget - путь
    $accfncombo0 - пользователь (Administrator, Все)
    $access0 - буква, к примеру F - полный доступ.
     
    Или посмотри полный пример для контекстного меню

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 01:03 20-06-2010 | Исправлено: AZJIO, 01:11 20-06-2010
    Orion_76



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Наверное я не корректно поставил вопрос...-))
    В скрипте , перед операцией с файлом (копирование, перемещение, запись, чтение), хотелось бы проверить права текущего пользователя на эти операции.
    Что-бы потом не удивляться, почему операция не удалась..-)))
    Надо просто функцию, которая возвратила бы TRUE, если опрерация с файлом доступна пользователю, от имени которого выполняется скрипт.
     
     
     
     

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 01:16 20-06-2010 | Исправлено: Orion_76, 02:10 20-06-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может кому-то будет интересен один из кирпичиков полной автоматизации развертывания системы из образа. Знаюи что тема давно раскрыта, однако методы/способы/требования у меня свои, следовательно и инструменты тоже. Решения этого вопроса не нашел, поэтому набросал сам. В процессе написания использовал DeviceAPI.au3. Проверено на двух системах.
     

    Цитата:
    #include "DeviceAPI.au3"
     
    ;Смысл программы в том, чтобы закрывая окна Мастера Нового Оборудования,
    ; она считала количество таких закрытых окон и сравнивала это кол-во
    ; с текущим количеством неизвестных устройств, а когда кол-во последних
    ; будет равно количеству закрытых окон (система установит все что может
    ; установить), мы запустим установку неизвестных устройств.
    ;
    ;Можно конечно из окна Мастера нового оборудования из WindowText брать
    ; наименование конкретного неизвестного устройства, затем находить его в
    ; текущем массиве и выбивать из "обоймы", но это уже лишнее, хотя и точнее.
     
    $wcount = 0
     
    ;Перебирая окна, закрываем паразитные и ведем статистику
    Do
        $var = WinList()
        For $i = 1 to $var[0][0]
            If $var[$i][0] <> "" AND BitAnd( WinGetState($var[$i][1]), 2 ) Then
                Select
                    Case $var[$i][0] = "Изменение параметров системы"
                        WinClose("Изменение параметров системы")
                    Case $var[$i][0] = "Мастер нового оборудования"
                        WinClose("Мастер нового оборудования")
                        $wcount+=1
                EndSelect
            EndIf
        Next
    Until $wcount=GetCurrentUnknownDevicesCount()
     
    ;Если все сходится, то завершаем работу
    MsgBox(64,"","Неизвестных устройств: " & $wcount)
     
    ;=======================================================================
    ; Функция подсчета неизвестных устройств в данный момент
    ;=======================================================================
    Func GetCurrentUnknownDevicesCount()
     
        $i=0
     
        ;Строим список классов устройств
        _DeviceAPI_GetAllDevices()
     
        ;Просматривая устройства, считаем количество устройств с пустымы класом и идентификатором
        While _DeviceAPI_EnumDevices()
            $classname = _DeviceAPI_GetClassName(_DeviceAPI_GetDeviceRegistryProperty($SPDRP_CLASSGUID))
            $classGUID = _DeviceAPI_GetDeviceRegistryProperty($SPDRP_CLASSGUID)
            If $classname="" AND $classGUID="" Then $i+=1
        WEnd
     
        ;Очищаем за собой
        _DeviceAPI_DestroyDeviceInfoList()
     
        Return $i
     
    EndFunc

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 02:30 20-06-2010 | Исправлено: KiLL, 02:37 20-06-2010
    Orion_76



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот вроде нашел что надо,
    ТОлько не пойму, что она возвращает..
     

    Код:
    Func _GetFileSecurityDACL($sFile)
       
    If Not IsDeclared("DACL_SECURITY_INFORMATION") Then
    Const $DACL_SECURITY_INFORMATION  = 0x4
       
    Local $return
       
    Local $hAdvapi32 =
    DllOpen("advapi32.dll")
       
    If Not FileExists($sFile) Then Return SetError(1,0,0)
       
    $return =
    DllCall($hAdvapi32,"long","GetFileSecurity", _
                       
    "str",$sFile, _
                       
    "dword", $DACL_SECURITY_INFORMATION, _
                       
    "ptr",0, _  
                       
    "dword",0, _
                       
    "dword*",0)
       
    If Not $return[5] Then Return SetError(1,0,0)
       
    Local $strucSD =
    DllStructCreate("byte[" & $return[5] & "]")
       
    $return =
    DllCall($hAdvapi32,"long","GetFileSecurity", _
                       
    "str",$sFile, _
                       
    "dword", $DACL_SECURITY_INFORMATION, _
                       
    "ptr",
    DllStructGetPtr($strucSD), _  
                       
    "dword",
    DllStructGetSize($strucSD), _
                       
    "dword*",0)
       
    If Not $return[0] Then Return SetError(1,0,0)
       
    DllClose($hAdvapi32)
       
    Return
    DllStructGetData($strucSD,1)
    EndFunc
     ?  Код создан и опубликован с помощью SciTE-Ru[/more][no][/no]

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 14:05 20-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Orion_76
    так то что написал AZJIO как раз подходит  

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:04 21-06-2010
    Orion_76



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

    Код:
     
    Func _cacls()
        $accfncombo0 = GUICtrlRead($accfncombo)
        $access00 = GUICtrlRead($access)
        Switch $access00
            Case $access00 = "запрет"
                $access0 = "N"
            Case $access00 = "чтение"
                $access0 = "R"
            Case $access00 = "запись"
                $access0 = "W"
            Case $access00 = "изменение"
                $access0 = "C"
            Case $access00 = "полный"
                $access0 = "F"
            Case Else
                $access0 = "F"
        EndSwitch
        ShellExecute(@SystemDir & '\cacls.exe', '"' & $sTarget & '" /t /e /p "' & $accfncombo0 & '":' & $access0, '', '', @SW_HIDE)
    EndFunc   ;==>_cacls
     

     

    Цитата:
    Надо просто функцию, которая возвратила бы TRUE, если опрерация с файлом доступна пользователю, от имени которого выполняется скрипт.  

     
    И где она возвращает?

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 11:33 21-06-2010
    Kar1son

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

    Цитата:
    Func _cacls()  
        $accfncombo0 = GUICtrlRead($accfncombo)  
        $access00 = GUICtrlRead($access)  
        Switch $access00  
            Case $access00 = "запрет"  
                $access0 = "N"  
            Case $access00 = "чтение"  
                $access0 = "R"  
            Case $access00 = "запись"  
                $access0 = "W"  
            Case $access00 = "изменение"  
                $access0 = "C"  
            Case $access00 = "полный"  
                $access0 = "F"  
            Case Else  
                $access0 = "F"  
        EndSwitch  
        ShellExecute(@SystemDir & '\cacls.exe', '"' & $sTarget & '" /t /e /p "' & $accfncombo0 & '":' & $access0, '', '', @SW_HIDE)  
    if  $access0 = "C" then  
    return True
    else
    return False
    endif

    EndFunc   ;==>_cacls

     
    а голова на что? принцип полностью показан, тут три строки дописать

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 12:14 21-06-2010
    Orion_76



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

    Цитата:
    а голова на что? принцип полностью показан, тут три строки дописать

     
    Прочтите внимательней код..
     
    $access0 - читается из ГУЯ
    Эта функция для УСТАНОВКИ разрешений
    А надо для ПРОВЕРКИ
     
    т.е что-то типа:
     
    $res=ФункцияПроверкиРазрешений($ИмяФайла,$ИмяПользователя)
    If $res==1 Then
    ...
    else
    ...
    EnfIF
     
    В принципе вроде нужную функцию нашел(в посте выше-Func _GetFileSecurityDACL($sFile)
    )
    Она возвращает какой-то секъюрити дескриптор (в WinApi не силен), т.е. шестнадцатиричную строку.
    Осталось только догадаться, как из него нужную инфу выдернуть.
     
     
     

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 12:45 21-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Orion_76 ладно убедил слепой дятел это все таки я

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 13:01 21-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Решил занятся переводом справки UDF - UDFs3.chm

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 14:20 21-06-2010 | Исправлено: AZJIO, 18:25 21-06-2010
    vicbox777



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Orion_76 11:45 21-06-2010
    Цитата:
    Она возвращает какой-то секъюрити дескриптор (в WinApi не силен), т.е. шестнадцатиричную строку.  
     Осталось только догадаться, как из него нужную инфу выдернуть.


    Код:
    Func _CheckSecurityDescriptor($Descriptor)
       
    Local $strucSD =
    DllStructCreate("byte[" & (StringLen($Descriptor)/2)-1 & "]")
       
    DllStructSetData($strucSD,1,$Descriptor)
       
    Local $hAdvapi32 =
    DllOpen("advapi32.dll")
       
    Local $return =
    DllCall($hAdvapi32,"int","IsValidSecurityDescriptor", _
                               
    "ptr",
    DllStructGetPtr($strucSD))
       
    DllClose($hAdvapi32)
       
    If $return[0] = 0 Then Return SetError(1,0,0)
       
    Return 1
    EndFunc

    Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 14:29 21-06-2010
    Orion_76



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

    Цитата:
    IsValidSecurityDescriptor

    Вроде просто определяет валидность структуры дескриптора?

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 17:09 21-06-2010
    vicbox777



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

    Цитата:
    Вроде просто определяет валидность структуры дескриптора?

    Извиняюсь.

    Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 17:51 21-06-2010
    Orion_76



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vicbox777
    Бывает-))
     
    Блин...весь инет перерыл...
    Неужели это не актуально....?
    Есть примеры на  С и на VB...
    но там кода строк на 150...
    Можно конечно вывод cacls распарсить...или WMI
    Но это ненадежно или через Ж...

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 00:56 22-06-2010
    Cegpuk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как этот же скрипт можно написать лучше (в самом прямом смысле)?

    Код:
    HotKeySet("{numpaddot}", "Terminate")
    HotKeySet("{numpad1}", "LeftToggle")
    HotKeySet("{numpad3}", "RightToggle")
     
    Global $StartLeft
    Global $StartRight
     
    While 1=1
        While $StartLeft = True
            Left()
        WEnd
        While $StartRight = True
            Right()
        WEnd
        Sleep(10)
    WEnd
     
    Func Right()
        Send("{left down}")
        Sleep(150)
        Send("{left up}")
        Send("{right down}")
        Sleep(600)
        Send("{right up}")
        Send("{up down}")
        Sleep(50)
        Send("{up up}")
        Sleep(50)
    EndFunc
     
    Func Left()
        Send("{right down}")
        Sleep(150)
        Send("{right up}")
        Send("{left down}")
        Sleep(600)
        Send("{left up}")
        Send("{up down}")
        Sleep(50)
        Send("{up up}")
        Sleep(50)
    EndFunc
     
    Func LeftToggle()
        $StartLeft = NOT $StartLeft
    EndFunc
     
    Func RightToggle()
        $StartRight = Not $StartRight
    EndFunc
     
    Func Terminate()
        Exit 0
    EndFunc

    Всего записей: 287 | Зарегистр. 24-01-2007 | Отправлено: 02:39 22-06-2010
    degid



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

    Цитата:
    Kar1son
     

    Цитата:
    а голова на что? принцип полностью показан, тут три строки дописать

     
    Прочтите внимательней код..
     
    $access0 - читается из ГУЯ
    Эта функция для УСТАНОВКИ разрешений
    А надо для ПРОВЕРКИ
     

    ну, как бы через XCACLS.vbs можно и узнать разрешения...  
     
    http://support.microsoft.com/kb/318754/ - там так и написано - "Использование программы Xcacls.exe для просмотра разрешений"

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 17:58 22-06-2010 | Исправлено: degid, 18:00 22-06-2010
    ringer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    сделал скрипт(ехе) задача которого нажимать кнопки в окне приложения, и выбирать в списке(по типу списка диспетчера задач) указанные строки, сохранять инфу из окна в файл
    что делать при запуск определяется параметрами запуска
     
    сам запуск этого скрипта(ехе) производится через веб-панель т.е. через  PHP exec
    на локальной системе, где и апач и приложение запущены от одного юзера все работает без проблем
     
    на системе где апач запущен от SYSTEM, а приложение от моего юзера, этот скрипт(ехе) запускается, но не выдает инфы  видимо из-за того что он запускается от имени SYSTEM и просто не видит окно приложения
     
    сделал еще один скрипт(ехе), который запускает первый от того же юзера, от которого запущено приложение
    судя по диспетчеру задач он действительно стал запускаться от того же юзера что и приложение, но взять инфу из окна, или нажать кнопку так и не смог
     
    п.с. сделал тоже самое, только вместо своего скрипта подставил calc.exe
    в диспетчере задач calc.exe появился от моего имени, но самого окна на рабочем столе не появилось, может в этом проблема
    хотя в моем скрипте(ехе) нет гуи

    Всего записей: 108 | Зарегистр. 12-02-2004 | Отправлено: 20:22 22-06-2010 | Исправлено: ringer, 16:33 23-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    degid
    а почему XCACLS? Я попробовал cacls, который уже есть в системе, с ним тоже выдаёт инфу, вот тест:

    Цитата:
    cacls C:\WINDOWS
    PAUSE
    с консоли прочитать и отдетектить регулярным выражением вроде не проблема.
     
     
    ringer
    А можно пример, хотя бы того же диспетчера задач, чтоб пытался нажать на нём кнопки, я бы у себя проверил.
    А почему не видно ожидание активного окна? Ведь скрипт явно не успеет его открыть, как все клики уже отработают...

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 23:50 22-06-2010 | Исправлено: AZJIO, 23:57 22-06-2010
    ringer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    пробовал запускать скрипт вручную - т.е. даблклик по ехе шнику
    проблем с не успеванием не было

    Всего записей: 108 | Зарегистр. 12-02-2004 | Отправлено: 00:02 23-06-2010
    Orion_76



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Оно все понятно-))
    можно и через cacls.exe, можно и через WMI(что мне кажется проще и надежнее)...
    Но...как гриться...хоть совершенству нет предела...  но хочется через WinApi..-)))
    Вообще..ИМХО...должна БЫ быть udf-функция-)) с подобным функционалом...
     
    В принципе основная задумка такая:
    Есть отличный фриварный файл-менеджер  FreeCommander
    В нем можно настроить менюшки или хоткеии на запуск прог с передачей параметров (типа- путь к текущей папке, путь к выделенному файлу и т.д.)
    т.е. нам больше ничего и не надо.. передал скрипту(Autoit) имя нужного файла-папки... и делай с ним че хочешь (если права у тебя есть-))
    Вот сдесь и начинается самое интересно...
    Скрипт делает (hardlink,жесткая ссылка и т.д.)Символьную ссылку на выделенную папку или файл в нужном каталоге. Но функция , делающая этот линк возвращает только ПОЛУЧИЛОСЬ или НЕПОЛУЧИЛОСЬ, а почему не получилось -(( Х\З...
    толи к исходному файлу-папке доступ запрещен(занят, или прав нет) ,толи в конечную папку запись запрещена (занята. прав нет)...

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 01:31 23-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ringer
    Так поставь мессагу, типа если найдено окно то выдать "Доступно", если не найдено, то "Недоступно", и далее заняться соответствующей проблемой. Заголовок и текст в окне обязательно с использованием Au3Info.exe, иногда там могуть быть символ &-амперсанд, который скрыт на кнопке, но из-за этого она не видна.
     

    Цитата:
    If WinExists($title) Then
        MsgBox(0, '+++++', 'Доступно '&$title)
    Else
        MsgBox(0, '--------', 'Не доступно '&$title)
    EndIf

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 10:22 23-06-2010 | Исправлено: AZJIO, 10:39 23-06-2010
    ringer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    проблема именно из-за запуска приложения и скрипта от разных юзеров
    решил разбив на два скрипта
    апач дергает скрипт1, скрипт1 сохранят параметр запуска в файл
    скрипт2 висит процессах(запущен тем же пользователем что и приложение), и ждет когда появится процесс скрипта1
    как появился он читает файл и отрабатывает в зависимости от команды указанной в файле
     
    update
    поспешил я, видимо проблема вообще в другом крылась
    пока я слежу за скриптом через удаленный рабочий стол - все работает
    но как только выключаю удаленку, сркипт перестает работать
     
    т.е. если я не залоген, винда не рисует гуи, и окна просто нет
    полагаю можно не пробовать запустить и скрипт и приложение от  system т.к. там точно никакого гуи нет

    Всего записей: 108 | Зарегистр. 12-02-2004 | Отправлено: 16:33 23-06-2010 | Исправлено: ringer, 17:52 23-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Интересует способы смены языка и формат языкового файла программы...
     
    1. Формат, где номер строки является номером переменной.
    Цитата:
    Сохранить всё
    Вырезать
    Копировать
    Вставить
    Недостаток - нет смысловых названий переменных в теле скрипта.
     
    2. Формат записи в виде ini, возможно здесь не обязательно читается как ini, а например создание переменной до знака "=" со значением после знака равно, т.е. построчно разделение в массив и далее разделение строки знаком "=" для генерации переменных.
    Цитата:
    strYesToAll=Да для всех
    strNoToAll=Нет для всех
    strYes=Да
    strNo=Нет
    strIgnore=Пропустить
    strAbort=Прервать
    strCancel=Отмена
    strOk=ОК
    Плюсы такого формата - обработка в цикле и имена переменных имеют смысловое значение.
     
    3. Привязка к цифре.
    Цитата:
    2=Включена
    8=Выключить
    5=Включить
    Такой метод попробовал, но опять же не смысловые имена переменных.
     
    4. Пример с элементом и всплавыющей подсказкой
    Цитата:
    btErase=|Ластик|Стереть часть рисунка
    btFlood=|Заливка|Залить область

     
    5. Чтение с разделителем TAB
    Цитата:
    List1                &Список
    ListUp                &Вверх
    ListDown            &Вниз

     
    6. Смешанный формат.
     
    Некоторые переменные можно просто изменить, а для интерфейса нужно ещё использовать GUICtrlSetData. Получается, что лучший вариант - 2.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 20:36 23-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Название: Русский справочник по Win 32 API
    Автор: Тарас Сорока
    (chm)
     
    Название: Справочник по Win32 API
    Автор: Мерзляков Николай
    (одним файлом exe)
     
    страничка
    или
    wasm.ru
    _________________
    Регулярные выражения (на русском)
    shtogrin.com
    shop.piter.com
    Html-версия (Дж.Фридл.) с сайта издательства, 375K ба, редакция 1.01, страничка
    wiki.linuxformat.ru

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 02:27 26-06-2010 | Исправлено: AZJIO, 06:02 29-06-2010
    Pleshner



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, у кого есть: можете кинуть несколько примеров работы через сабж с Firefox? Как я понял, сАмо просто работать через готовую либу FF.au3.  
     
    Кто-нить может кинуть в меня примерами работы - просто рабочие скрипты чего угодно через FF.au3, нужно очень быстро написать свой скрипт, и что-то с ходу никак не могу въехать что да как там... Спасибо!

    Всего записей: 122 | Зарегистр. 09-11-2005 | Отправлено: 21:25 27-06-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pleshner
    На офсайте работает поиск, но для этого нужно зарегистрироваться.
    Вобщем прописать её #include <FF.au3>, а функции есть с переводом на русский
    Вот тема. И обязательно проверить совместимость версий AutoIt3 и FF.au3, последняя 0.6 работает с v3.3.0.0.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 04:19 28-06-2010 | Исправлено: AZJIO, 04:35 28-06-2010
    Dmitri_Andreev

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Друзья помогите пожалуйста.
     
    Имеется строка
    GUICtrlCreateLabel ("Строка с текстом", 20, 30, 0x0000)
    длинна которой увеличивается по мере ее заполнения, можно ли, в процессе выполнения скрипта, получить размер этой строки в пикселях?

    Всего записей: 38 | Зарегистр. 14-07-2009 | Отправлено: 15:37 30-06-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Dmitri_Andreev 15:37 30-06-2010
    Цитата:
    можно ли, в процессе выполнения скрипта, получить размер этой строки в пикселях?

    Можно. В шапке есть ссылка на библиотеку «_GUICtrlCreateTFLabel» (в разделе GUI), а в ней есть функция получения длины строки.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:56 30-06-2010
    djuuj

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Вот такая проблемка, мне нужно отправиться на сайт, кликнуть на картинку, вследствие чего откроется НОВОЕ ОКНО браузера, и продолжать работу уже в новом окне. Вот до нового окна всё понятно, а вот как получить доступ к новому окну не имею представления.. Кто знает, подскажите пожалуйста.
    Искал ответ добросовестно, был почти уверен, что это распространённая и уже давно решённая проблема, но пока только нашёл точно такие же вопросы без ответов, или ответы с попытками обойтись старым окном..

    Всего записей: 1 | Зарегистр. 30-06-2010 | Отправлено: 21:50 30-06-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    djuuj
    _IEAttach поможет если вы знаете заголовок окна, урл, текст в теле документа, дескриптор и т.п. В случае с текстовыми элементами совпадение требуется не полное. А еще функция может подключиться к конкретной инстанции открытого браузера по номеру. Вы наверное плохо искали.

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 23:47 30-06-2010
    Dmitri_Andreev

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR Спасибо... разобрался.

    Всего записей: 38 | Зарегистр. 14-07-2009 | Отправлено: 16:12 01-07-2010 | Исправлено: Dmitri_Andreev, 16:37 01-07-2010
    AZJIO



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

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 05:19 03-07-2010 | Исправлено: AZJIO, 17:17 09-07-2010
    DSWQ

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Подскажите, пожалуйста, пример кода для GUI с маленькими(минимизированными) кнопками управления.  
    Знаю, нужно в сторону стилей копать, но разобраться с ними не могу(

    Всего записей: 11 | Зарегистр. 20-11-2009 | Отправлено: 18:36 05-07-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DSWQ 18:36 05-07-2010
    Цитата:
     нужно в сторону стилей копать

    Зачем, просто укажите размеры элементов:
     

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
     
    FileChangeDir(@DesktopDir)
     
    $hGUI = GUICreate("Test Script", 300, 200)
     
    $nMiniButton = GUICtrlCreateButton("", 20, 40, 12, 12)
    $nMiniCheckBox = GUICtrlCreateCheckbox("", 20, 80, 12, 12)
     
    GUISetState(@SW_SHOW, $hGUI)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 19:29 05-07-2010 | Исправлено: ViSiToR, 19:39 05-07-2010
    DSWQ

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR, спасибо, но я, видимо, некорректно задал вопрос - речь о стандартных кнопках управления: "Закрыть", "Развернуть", "Свернуть".
    Просто есть скрипт-приложение с очень маленьким GUI, стандартные кнопки смотрятся некрасиво.
     
     

    Всего записей: 11 | Зарегистр. 20-11-2009 | Отправлено: 20:39 05-07-2010
    DiaBlo90

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем доброго времени суток.
    МБ кто знает как можно сделать окно lineage без рамки?
    Пробовал так

    Код:
    #include <WindowsConstants.au3>
    ;Global Const $L2_WinClass = "[TITLE:Lineage II;Class:l2UnrealWWindowsViewportWindow]";
    $hWindow = WinGetHandle($L2_WinClass)
    WinActivate ($L2_WinClass);
    sleep(1000)
    _WinSetStyle($hWindow)
    Func _WinSetStyle($hWnd)
        DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", "GWL_STYLE", "int", 0x14000000)
        DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", "GWL_EXSTYLE", "int", 0x0004000)
        DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", 0, "int", 0, "int", 800, "int", 600, "int", "SWP_NOZORDER | SWP_FRAMECHANGED")
    EndFunc

     
    На любых окнах работает, но не на ла2(((

    Всего записей: 8 | Зарегистр. 31-05-2010 | Отправлено: 22:02 05-07-2010 | Исправлено: DiaBlo90, 22:03 05-07-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DSWQ 20:39 05-07-2010
    Цитата:
    речь о стандартных кнопках управления: "Закрыть", "Развернуть", "Свернуть"

    Тогда только так:
     

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
     
    $iWidth = 200
    $iHeight = 150
     
    $hGUI = GUICreate("Tiny GUI", $iWidth, $iHeight, -1, -1, BitOR($WS_POPUP, $WS_BORDER))
     
    $nMinimize_Button = GUICtrlCreateButton("—", $iWidth - 35, 3, 16, 16)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetBkColor(-1, 0x0000FF)
     
    $nClose_Button = GUICtrlCreateButton("X", $iWidth - 19, 3, 16, 16)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetBkColor(-1, 0xFF0000)
     
    GUICtrlCreateLabel("", 0, 0, $iWidth, 22, $WS_CLIPSIBLINGS, BitOR($WS_EX_DLGMODALFRAME, $GUI_WS_EX_PARENTDRAG))
    GUICtrlSetBkColor(-1, 0x9D9DFF)
     
    GUISetState(@SW_SHOW, $hGUI)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $nClose_Button
                Exit
            Case $nMinimize_Button
                GUISetState(@SW_MINIMIZE, $hGUI)
        EndSwitch
    WEnd

     
    DiaBlo90 22:02 05-07-2010
    Цитата:
    На любых окнах работает

    Странно, не должно у меня этот пример закрывает окно подставленное в $L2_WinClass.
     
    Вот пример использования WinSetStyle.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:02 06-07-2010
    DiaBlo90

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

    Цитата:
    Странно, не должно  у меня этот пример закрывает окно подставленное в $L2_WinClass.  
     
    Вот пример использования WinSetStyle [?].

     
    Аналогично, на окне ла2 никак не пашет(((

    Всего записей: 8 | Зарегистр. 31-05-2010 | Отправлено: 00:12 06-07-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DiaBlo90 00:12 06-07-2010
    Цитата:
    на окне ла2 никак не пашет

    Ну, я не знаю что это за окно, поэтому всё что могу посоветовать, так это посмотреть стили этого окна, и на основе этого уже задавать новые.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 17:07 06-07-2010
    AZJIO



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

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:55 06-07-2010 | Исправлено: AZJIO, 20:39 06-07-2010
    DiaBlo90

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

    Цитата:
    Ну, я не знаю что это за окно, поэтому всё что могу посоветовать, так это посмотреть стили этого окна, и на основе этого уже задавать новые.

     
    А поподробнее можно или ссылочку какую-нить?

    Всего записей: 8 | Зарегистр. 31-05-2010 | Отправлено: 20:01 06-07-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DiaBlo90 20:01 06-07-2010
    Цитата:
    поподробнее можно

    С помощью «Au3Info Tool» (поставляется вместе с AutoIt) нужно посмотреть стили:

    и проверить:
     

    Код:
    If BitAND($nStyle, $WS_BORDER) = $WS_BORDER Then _WinSetStyle("Title", $WS_POPUPWINDOW)

     
    ну или вообще не проверять, а сразу задать стиль без рамки.
     
    P.S
    Некоторые окна требуют обновления интерфейса, т.ч можно также в конце попробовать обновить окно:
     

    Код:
    _WinAPI_RedrawWindow($hWnd)


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:33 06-07-2010 | Исправлено: ViSiToR, 23:34 06-07-2010
    DSWQ

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Спасибо, то что нужно
     

    Всего записей: 11 | Зарегистр. 20-11-2009 | Отправлено: 00:44 07-07-2010 | Исправлено: DSWQ, 00:45 07-07-2010
    Trrrbit



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет!  
     
    В двух словах почему сюда обратился:
    Устанавливаю людям виндовсы из tib-архива (acronis true image). т.е. гружу лайв-cd, запускаю акронис и говорю ему ставить на диск С: заранее подготовленную винду из tib-архива.
    так вот:
    после успешной распаковки перегружаю комп и распакованная винда начинает ставить драйвера на новое оборудование. в итоге находит устройство и мастер установки оборудования предлагает нажать далее (а потом готово).
    НО! Если клавиатура и мышь USBшные, то они (обычно) ставятся в последнюю очередь. В итоге - нажать кнопку далее(готово) не получается ни с клавы ни мышью. Если мышь или клава PS\2 то проблем не возникает. Они сразу работают
    ТЕПЕРЬ ПРОСЬБА (ВОПРОС):
    Напишите мне пожалуйста скрипт для autoit, который будет находить окно мастера установки нового оборудования и, скажем, будет нажимать ENTER, тем самым активируя кнопку ДАЛЕЕ или ГОТОВО. И так пока не перестанут появляться окна мастера установки нового оборудования (или например раз 30 нажать ENTER с интервалом в 10-15 сек).
     
    Если не сложно - можно сразу готовый EXE-файл.
    Если будет вышеуказанная ситуация - положу его в автозагрузку с-под лайв-cd и перезагружу комп. винда скажет "найдено новое оборудование, нажмите далее", а autoit ей сам нажмет ENTER (или ДАЛЕЕ/ГОТОВО) и установит драйвер. Подождет следующего вопроса об установке драйвера и снова нажмет далее.
     
    ЗАРАНЕЕ БЛАГОДАРЕН...

    Всего записей: 143 | Зарегистр. 18-09-2009 | Отправлено: 01:14 07-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Постмотрите перевод частичный UDFs3 (2.1Мб), 34 функции перевёл, ну и шаблонные тексты переведены по всем страничкам.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 08:35 07-07-2010 | Исправлено: AZJIO, 12:50 07-07-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Trrrbit, вы тему читали? На четвертой странице, в начале мой пост маленькой програмки закрывающей окна мастера установки оборудования. Именно закрывает, ибо просто нажать в этом окне Enter не прокатит. Это один из кирпичиков.
     
    Я делаю то же что и вы, вот в таком порядке.
    1. Загружаясь с WinPE диска акронис разворачивает готовый настроенный образ.
    2. Система стартует и пытается установить драйвера. В системе никаких драйверов нету, поэтому она устанавливает только то что может, а на все остальное открывает одно за одним окошки мастера установки оборудования. Вся беда в том, что если у вас не установлена сетевая карта и система спрашивает на нее драйвера, то пока вы не дадите системе драйвера на карту или не пошлете систему нафиг, она не продолжит установку известных ей устройств и не поставит ваши USB клавомыши.
    3. Поэтому моя программа просто закрывает эти окошки, ведет подсчет закрытых окошек мастера. Когда количество закрытых окон мастера сходится с количество неизвестных устройств в диспечере задач, то программа перестает следить за окошками мастера оборудования и передает управление установщику оборудования.
    4. Установка драйверов происходит с внешнего носителя, не привязана к буквам диска и использует обычные ДрайверПаки типа Driverpacks.net или DriverPacks Solution.
    5. Далее ребут и смотрим чтобы все установилось, далее еще раз ребут, чтобы разрешение экрана и размерность элеметнов выровнялась.
     
    Вся работа в развернутой системе происходит автоматом. Основной упор на установку именно неизвестных (желтых) устройств, т.е. если система установила пусть даже старый драйвер устройства, я его не обновляю, для меня важно общее время выполнения. Пока еще сыровато и есть глюки, но исправляю потиху.

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 11:48 07-07-2010
    DiaBlo90

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Спс оромное)))
    Разобрался в чем косяк был))))
    Тестил на висте, забыл добавить права админа
    Терь все норм))))

    Всего записей: 8 | Зарегистр. 31-05-2010 | Отправлено: 12:39 07-07-2010
    Trrrbit



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KiLL
    Спасибо за ответ. Но для меня это темный лес... Можно сразу ЕХЕ-файлик. Мне даже на принципиально как он работатет. Мне нужно чтобы клавомыши работали....  
    БУДУ ОЧЕНЬ БЛАГОДАРЕН.

    Всего записей: 143 | Зарегистр. 18-09-2009 | Отправлено: 14:11 07-07-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Trrrbit, если бы ты скомпилировал выложенный ранее код, то уже имел бы EXE.
     
    http://rapidshare.com/files/405565063/BypassHardwareWizard.exe
     

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 23:31 07-07-2010
    Trrrbit



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KiLL
    Спасибо большое. При первой возможности опробую

    Всего записей: 143 | Зарегистр. 18-09-2009 | Отправлено: 02:02 08-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Секундомер, навеяло идеей от Kaster и решил сделать по уму.  
    Обновлено 2 раз.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 07:00 10-07-2010 | Исправлено: AZJIO, 23:38 02-09-2010
    guardberc

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, как отправить письмо с вложением средствами autoit?
     
    PS поиск юзал. если пропустил что-то, то ткните носом.
    Пробую этот пример http://www.autoitscript.com/forum/index.php?showtopic=23860&st=320

    Код:
    #Include <file.au3>
    ;##################################
    ; INI
    ;##################################
    $var1 = IniRead("H:\Bureaublad\config.ini", "config", "SMTP", "")
    $var2 = IniRead("H:\Bureaublad\config.ini", "opmaak", "NAAM", "")
    $var3 = IniRead("H:\Bureaublad\config.ini", "config", "VAN-EMAIL", "")
    $var4 = IniRead("H:\Bureaublad\config.ini", "opmaak", "NAAR-EMAIL", "")
    $var5 = IniRead("H:\Bureaublad\config.ini", "opmaak", "ONDERWERP", "")
    $var6 = IniRead("H:\Bureaublad\config.ini", "opmaak", "BODY", "")
    $var7 = IniRead("H:\Bureaublad\config.ini", "opmaak", "ATTACHMENT", "")
    $var8 = IniRead("H:\Bureaublad\config.ini", "opmaak", "CC", "")
    $var9 = IniRead("H:\Bureaublad\config.ini", "opmaak", "BCC", "")
    $var10 = IniRead("H:\Bureaublad\config.ini", "config", "PRIORITY", "Normal")
    $var11 = IniRead("H:\Bureaublad\config.ini", "config", "USERNAME", "")
    $var12 = IniRead("H:\Bureaublad\config.ini", "config", "PASSWORD", "")
    $var13 = IniRead("H:\Bureaublad\config.ini", "config", "IPPORT", "25")
     
    ;##################################
    ; Variables
    ;##################################
    $SmtpServer = $var1                     ; address for the smtp-server to use - REQUIRED
    $FromName = $var2                       ; name from who the email was sent
    $FromAddress = $var3                    ; address from where the mail should come
    $ToAddress = $var4                      ; destination address of the email - REQUIRED
    $Subject = $var5                        ; subject from the email - can be anything you want it to be
    $Body = $var6                           ; the messagebody from the mail - can be left blank but then you get a blank mail
    $AttachFiles = $var7                    ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
    $CcAddress = $var8                      ; address for cc - leave blank if not needed
    $BccAddress = $var9                     ; address for bcc - leave blank if not needed
    $Importance = $var10                    ; Send message priority: "High", "Normal", "Low"
    $Username = $var11                      ; username for the account used from where the mail gets sent - REQUIRED
    $Password = $var12                      ; password for the account used from where the mail gets sent - REQUIRED
    $IPPort = $var13                        ; port used for sending the mail
    $ssl = 0                                ; enables/disables secure socket layer sending - put to 1 if using httpS
     
    ;##################################
    ; Script
    ;##################################
    Global $oMyRet[2]
    Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    $rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
    If @error Then
        MsgBox(0, "Error sending message", "Error code:" & @error & "  Description:" & $rc)
    EndIf
    ;
    ; The UDF
    Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
        Local $objEmail = ObjCreate("CDO.Message")
        $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
        $objEmail.To = $s_ToAddress
        Local $i_Error = 0
        Local $i_Error_desciption = ""
        If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
        If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
        $objEmail.Subject = $s_Subject
        If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
            $objEmail.HTMLBody = $as_Body
        Else
            $objEmail.Textbody = $as_Body & @CRLF
        EndIf
        If $s_AttachFiles <> "" Then
            Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
            For $x = 1 To $S_Files2Attach[0]
                $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
             ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
                If FileExists ($S_Files2Attach[$x]) Then
                    ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
                    .AddAttachment($S_Files2Attach[$x])
                Else
                    ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                    SetError(1)
                    Return 0
                EndIf
            Next
        EndIf
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
        If Number($IPPort) = 0 then $IPPort = 25
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
        ;Authenticated SMTP
        If $s_Username <> "" Then
            $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
            $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
            $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
        EndIf
        If $ssl Then
            $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        EndIf
        ;Update settings
        $objEmail.Configuration.Fields.Update
        ; Set Email Importance
        Switch $s_Importance
            Case "High"
                $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
            Case "Normal"
                $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
            Case "Low"
                $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
        EndSwitch
        $objEmail.Fields.Update
        ; Sent the Message
        $objEmail.Send
        If @error Then
            SetError(2)
            Return $oMyRet[1]
        EndIf
        $objEmail=""
    EndFunc   ;==>_INetSmtpMailCom
    ;
    ;
    ; Com Error Handler
    Func MyErrFunc()
        $HexNumber = Hex($oMyError.number, 8)
        $oMyRet[0] = $HexNumber
        $oMyRet[1] = StringStripWS($oMyError.description, 3)
        ConsoleWrite("### COM Error !  Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description:" & $oMyRet[1] & @LF)
        SetError(1); something to check for when this function returns
        Return
    EndFunc   ;==>MyErrFunc

    но при отправке выскакивает сообщение

    Код:
    Error code:2 Description: Транспорту не удалось подключиться к серверу.

    ОС win 7

    Всего записей: 11 | Зарегистр. 19-04-2010 | Отправлено: 01:22 11-07-2010 | Исправлено: guardberc, 08:55 11-07-2010
    Orion_76



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

    Цитата:
    но при отправке выскакивает сообщение  

    скрипт один в один похож на этот с оф.форума
    http://www.autoitscript.com/forum/index.php?showtopic=116815&st=0&p=814757&hl=mail&fromsearch=1&#entry814757
     
    Там же решается похожая с вашей проблема(как раз c gmail.com)
    Пост №3...

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 19:32 11-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пятнашки. Поддерживается резайз окна (изменение размеров), пермещение по 2-3 фишки.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 16:36 12-07-2010 | Исправлено: AZJIO, 23:43 02-09-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Друзья, подскажите, а реально ли такое на AutoIt написать вообще?
     
    Есть объект InternetExplorer или WebBrowser, у него есть событие FileDownload, которое срабатывает в случае скачивания какого-либо файла (появляется окно).
     
    Проблем скачать файл нету, когда известен линк. А когда линка нету? Например как при скачивании аттачей на gmail, вроде имя файла в аттаче одно. А при клике на Scan and Download выпадает совсем другое.
     
    Именно в этом случае хотелось бы отработать FileDownload, отменить само окно (событие позволяет), перехватить ссылку и скачать файл. Примерно так работают плагины менеджеров закачек. Участие пользователя или клики по контролам для меня не подходят, я делаю полную автоматизацию.
     
    На VB это выглядит примерно так:
     
    Global IE As InternetExplorer
    '---------------------------------
    Sub Download()
    ...
       IE.Navigate(...)
    ...
    End Sub
    '---------------------------------
    Sub FileDownloadEvent() Handles IE.FileDownload
    ...
    End Sub
     
    Попытки сделать что-то вроде IE.Silent ни к чему не приводят.
     
    Итого встал вопрос, а реально ли написать такую обработку события на AutoIt?
     
    Параллельно здесь.

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 23:42 12-07-2010 | Исправлено: KiLL, 23:45 12-07-2010
    Trrrbit



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

    Цитата:
    Программа просто закрывает эти окошки, ведет подсчет закрытых окошек мастера. Когда количество закрытых окон мастера сходится с количество неизвестных устройств в диспетчере задач

     
    Проверял один раз но наткнулся на следующее:
    Когда появляется мастер установки нового оборудования, то просит нажать ДАЛЕЕ для автоматического поиска драйвера. С этим скрипт справляется без проблем. (ЗА ЭТО СПАСИБО), но:
    когда система сама находит, скажем, CMOS и часы она предлагает нажать ГОТОВО, а не ДАЛЕЕЕ. Вот тут я и получил из динамика системного блока ругательства, типа запала какая-нить клавиша. Благо клавиатура таки работала.... Завершил скрипт.  
    Это баг? или единичный случай? Или может скрипт реагирует только на активное окно и начал ругаться из-за нажатого сочетания Alt+Tab? Можно ли его заставить нажимать еще и кнопку ГОТОВО, когода это нужно?

    Всего записей: 143 | Зарегистр. 18-09-2009 | Отправлено: 03:45 13-07-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Trrrbit, странно....
     
    У меня система тоже находит и CMOS и часы, и описанной ситуации не происходит. Но я не использую сборки (Zver, WPI, Xtreme и т.п.). Для установки драйверов без шума и пыли они должны быть подписаны (сертификатами). Для пущей стабильности у меня в системе нету сторонних драйверов вообще. Только Windows XP SP3. А у вам похоже что-то где-то изменено.
     
    По теме ветки. Я делаю полную автоматизацию, направленную на максимально быстрое развертывание. Т.е. тестирование написанного проходит за чашкой кофе и втыкание в монитор, никакого внешнего воздействия не оказываю.

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 10:54 13-07-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KiLL
    Попробуйте так:
    Код:
    #include <IE.au3>
     
    $sUrlDownload = ''
    $sFileName = ''
    $iByte = 0
    $oIE = _IECreate('http://rghost.ru/2059767/private/457a05107272aea8e6ed3025e3f57ea3', 0, 0)
    $oLinks = _IELinkGetCollection($oIE)
    For $oLink In $oLinks
        If StringInStr($oLink.title, 'Скачать') <> 0 Then
            $sUrlDownload = $oLink.href
            $sFileName = StringStripWS(StringReplace($oLink.title, 'Скачать', ''), 8)
            _IEQuit($oIE)
            ExitLoop
        EndIf
    Next
    $iByte = InetGetSize($sUrlDownload)
    MsgBox(0, '', $sUrlDownload & @CRLF & $sFileName & @CRLF & $iByte & ' b.')
    $timeout = TimerInit()
    ProgressOn('Progress Download', 'Download: ' & $sFileName, '0 b.')
    $hDownload = InetGet($sUrlDownload, @ScriptDir & "\" & $sFileName, 1, 1)
    Do
        Sleep(20)
        $aData = InetGetInfo($hDownload, -1)
        If $aData[1] > 0 Then
            ProgressSet($aData[0] / $aData[1] * 100, $aData[0] & ' b.')
        EndIf
    Until InetGetInfo($hDownload, 2)
    If $aData[0] = $aData[1] And $aData[1] = $iByte Then
        ProgressSet(100, 'Success!')
        Sleep(3000)
        ProgressOff()
    Else
        ProgressSet(100, 'Error!')
        Sleep(3000)
        ProgressOff()
    EndIf

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:16 13-07-2010 | Исправлено: madmasles, 12:33 13-07-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles, пробовал InetGet - не получается, отдает html-страницу.  
     
    Вообще у меня пишется попытка получить прайс из личного кабинета одной конторы. И если в вашем примере под кнопкой есть ссылка, которую можно скачать, то у меня есть ссылка, которая через InetGet отдает html. Я попробовал обработку событий в IE. Но как-то пока не получается, всеравно окошко выскакивает. Чего-то я не понимаю.
     
    ;here goes download IE event handling
    $oEvents = ObjEvent($oIE,"IEEvent_","DWebBrowserEvents2")
    _IENavigate($oIE,$sURL,0)
     
    Sleep(20000)
     
    Exit
     
    Func IEEvent_FileDownload ($ActiveDocument ,$Cancel)
        $Cancel = True
        InetGet($sPriceURL,"D:\1.zip",0,1)
    EndFunc
     
    Func IEEvent_BeforeNavigate($pDisp,$NavigateURL,$Flags,$TargetFrameName,$PostData,$Headers,$Cancel)
        $Cancel = True
        $sPriceURL = $NavigateURL
    EndFunc

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 13:26 13-07-2010 | Исправлено: KiLL, 13:30 13-07-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KiLL
    Вы бы тогда пример страницы привели. Не личный кабинет конторы, а что-нибудь похожее в открытом доступе.
     
    Попробуйте открыть Вашу страницу в IE и посмотреть все ссылки так:
    Код:
    #include <IE.au3>
     
    $i = 0
    $oIE = _IEAttach('[Class:IEFrame]', 'embedded')
    $oLinks = _IELinkGetCollection($oIE)
    $iNumLinks = @extended
    MsgBox(0, 'Link Info', $iNumLinks & ' links found')
    For $oLink In $oLinks
        $i += 1
        MsgBox(0, 'Link № ' & $i, $oLink.title & @CRLF & $oLink.innertext & @CRLF & $oLink.href)
    Next

    Какая-то ссылка, наверное, должна быть на скачивание. Я так проверил в своем ящике на mail.ru - и ссылку нашел, и скачал. Может быть, в Вашем случае надо сначала перейти на другую страницу через
    Код:
    _IENavigate()
    а потом там найти ссылку на скачивание.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 13:33 13-07-2010 | Исправлено: madmasles, 14:30 13-07-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles, думаю с Gmail будет что-то подобное. Вечером проверю.

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 16:49 13-07-2010
    DiaBlo90

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, подскажите в чем косяк, почему при нажатии esc скрипт закрывается? И как от этого можно избавиться
     
    Хот кеи на esc не ставил.

    Всего записей: 8 | Зарегистр. 31-05-2010 | Отправлено: 19:46 13-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил справку UDFs3.chm (2Мб), ещё 36 страниц, всего 70. Всё теже функции _GUICtrlListView_. Или только переведённые страницы (30кб)

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 21:51 13-07-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DiaBlo90 19:46 13-07-2010
    Цитата:
    почему при нажатии esc скрипт закрывается?

    Это задаётся опцией «GUICloseOnESC».
     

    Код:
    Opt("GUICloseOnESC", 0)

     
    по умолчанию оно выставлено на 1.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:29 13-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Калькулятор, ввод данных и все операции можно выполнять с клавиатуры. Добавлена расширенная память и автосохранение. Добавлен алгорит повтора операции при повторном нажатии "Вычислить".

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 01:28 15-07-2010 | Исправлено: AZJIO, 23:39 02-09-2010
    emauzzo



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста наваять простенький скрипт. Что нужно:
    мне часто приходится копипастить из word в autocad, но чтобы не сохранялось форматирование word. Раньше я делал это через стандартный блокнот, но это немного напрягает - много лишних движений. Вот и хотелось бы чтобы скопировал текст по ctrl+с нажал скрипт и он уже "очищен" от форматирования. Можно hotkey конечно сделать.  
    Сам я новичок вообще в программировании.
     

    Код:
    Run ("notepad.exe")
    WinWaitActive ("Безымянный - Блокнот")
    WinMenuSelectItem("Безымянный - Блокнот","","&Правка","Вст&авить    Ctrl+V")
    WinMenuSelectItem("Безымянный - Блокнот","","&Правка","Выделить в&се    Ctrl+A")
    WinMenuSelectItem("Безымянный - Блокнот","","&Правка","&Копировать    Ctrl+C")
    WinClose("Безымянный - Блокнот")
    ControlClick("Блокнот","Текст в файле Безымянный был и","Button2")


    Всего записей: 152 | Зарегистр. 27-10-2008 | Отправлено: 07:11 15-07-2010 | Исправлено: emauzzo, 07:32 15-07-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    emauzzo, что-то типа этого?

    Код:
    HotKeySet ( "{HOME}", "_text"); горячая клавиша HOME
     
    While 1 ; бесконечный цикл
        sleep(100)
    WEnd
     
    Func
    _text() ; функция, выполняется при нажатии на кнопку HOME
        $wordtext = ClipGet ( ) ; читаем текст из буфера обмена
        If $wordtext = "" Then Return ; если в буфере пусто, то возвращаемся из функции
        $wordtext = String ($wordtext) ; переобразовываем в строку
        ClipPut ($wordtext); вставляем в буфер обмена
    EndFunc


    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 11:09 15-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обнаружил, что в скрипте "Калькулятор" использование стиля для кнопок цифр тормозит реакцию на событие нажатия. Другими словами двойной клик не вводит две цифры. Если отключить стили, то реакция увеличивается и двойной клик успевает ввести две цифры.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 14:23 15-07-2010 | Исправлено: AZJIO, 14:46 15-07-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 14:23 15-07-2010
    Цитата:
    в скрипте "Калькулятор" использование стиля для кнопок цифр тормозит реакцию на событие нажатия

    Какой конкретно стиль?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:01 15-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    GUICtrlSetBkColor (-1, 0 )
    GUICtrlSetColor (-1, 0xffffff)
     
    чёрная кнопка с белым текстом.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 15:13 15-07-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 15:13 15-07-2010
    Цитата:
    чёрная кнопка с белым текстом

    Это известная проблема, в этом случае кнопка обрабатывается почти как Label (у него таже проблема), и двойной клик организовать не так просто.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:25 15-07-2010
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Написал UDF'ку, аналог FileFindFirstFile() и  FileFindNextFile() с поиском по подкаталогам.
    Подробнее...

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 02:21 19-07-2010 | Исправлено: NIKZZZZ, 20:06 19-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    А может добавить параметры для функции.
    Я к предыдущей версии этой функции прикрутил поиск типов файлов, поиск каталогов, глубину вложенности поиска.
    Подробнее...

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:18 19-07-2010
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Ну, все прикручивать излишне, а вот отдельный поиск файлов и каталогов я добавил, предыдущий пост исправил.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 21:08 19-07-2010
    Dmitri_Andreev

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем.
    Может кто-нибудь знает более удобный способ получения списка сетевых подключений, кроме как анализировать текст ipconfig?

    Всего записей: 38 | Зарегистр. 14-07-2009 | Отправлено: 17:25 21-07-2010 | Исправлено: Dmitri_Andreev, 17:29 21-07-2010
    Orion_76



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

    Код:
    ; Generated by AutoIt Scriptomatic
     
    $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", "WQL", _
                                              $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
     
    If IsObj($colItems) then
       For $objItem In $colItems
          $Output = $Output & "ArpAlwaysSourceRoute: " & $objItem.ArpAlwaysSourceRoute & @CRLF
          $Output = $Output & "ArpUseEtherSNAP: " & $objItem.ArpUseEtherSNAP & @CRLF
          $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
          $Output = $Output & "DatabasePath: " & $objItem.DatabasePath & @CRLF
          $Output = $Output & "DeadGWDetectEnabled: " & $objItem.DeadGWDetectEnabled & @CRLF
          $strDefaultIPGateway = $objItem.DefaultIPGateway(0)
          $Output = $Output & "DefaultIPGateway: " & $strDefaultIPGateway & @CRLF
          $Output = $Output & "DefaultTOS: " & $objItem.DefaultTOS & @CRLF
          $Output = $Output & "DefaultTTL: " & $objItem.DefaultTTL & @CRLF
          $Output = $Output & "Description: " & $objItem.Description & @CRLF
          $Output = $Output & "DHCPEnabled: " & $objItem.DHCPEnabled & @CRLF
          $Output = $Output & "DHCPLeaseExpires: " & WMIDateStringToDate($objItem.DHCPLeaseExpires) & @CRLF
          $Output = $Output & "DHCPLeaseObtained: " & WMIDateStringToDate($objItem.DHCPLeaseObtained) & @CRLF
          $Output = $Output & "DHCPServer: " & $objItem.DHCPServer & @CRLF
          $Output = $Output & "DNSDomain: " & $objItem.DNSDomain & @CRLF
          $strDNSDomainSuffixSearchOrder = $objItem.DNSDomainSuffixSearchOrder(0)
          $Output = $Output & "DNSDomainSuffixSearchOrder: " & $strDNSDomainSuffixSearchOrder & @CRLF
          $Output = $Output & "DNSEnabledForWINSResolution: " & $objItem.DNSEnabledForWINSResolution & @CRLF
          $Output = $Output & "DNSHostName: " & $objItem.DNSHostName & @CRLF
          $strDNSServerSearchOrder = $objItem.DNSServerSearchOrder(0)
          $Output = $Output & "DNSServerSearchOrder: " & $strDNSServerSearchOrder & @CRLF
          $Output = $Output & "DomainDNSRegistrationEnabled: " & $objItem.DomainDNSRegistrationEnabled & @CRLF
          $Output = $Output & "ForwardBufferMemory: " & $objItem.ForwardBufferMemory & @CRLF
          $Output = $Output & "FullDNSRegistrationEnabled: " & $objItem.FullDNSRegistrationEnabled & @CRLF
          $strGatewayCostMetric = $objItem.GatewayCostMetric(0)
          $Output = $Output & "GatewayCostMetric: " & $strGatewayCostMetric & @CRLF
          $Output = $Output & "IGMPLevel: " & $objItem.IGMPLevel & @CRLF
          $Output = $Output & "Index: " & $objItem.Index & @CRLF
          $strIPAddress = $objItem.IPAddress(0)
          $Output = $Output & "IPAddress: " & $strIPAddress & @CRLF
          $Output = $Output & "IPConnectionMetric: " & $objItem.IPConnectionMetric & @CRLF
          $Output = $Output & "IPEnabled: " & $objItem.IPEnabled & @CRLF
          $Output = $Output & "IPFilterSecurityEnabled: " & $objItem.IPFilterSecurityEnabled & @CRLF
          $Output = $Output & "IPPortSecurityEnabled: " & $objItem.IPPortSecurityEnabled & @CRLF
          $strIPSecPermitIPProtocols = $objItem.IPSecPermitIPProtocols(0)
          $Output = $Output & "IPSecPermitIPProtocols: " & $strIPSecPermitIPProtocols & @CRLF
          $strIPSecPermitTCPPorts = $objItem.IPSecPermitTCPPorts(0)
          $Output = $Output & "IPSecPermitTCPPorts: " & $strIPSecPermitTCPPorts & @CRLF
          $strIPSecPermitUDPPorts = $objItem.IPSecPermitUDPPorts(0)
          $Output = $Output & "IPSecPermitUDPPorts: " & $strIPSecPermitUDPPorts & @CRLF
          $strIPSubnet = $objItem.IPSubnet(0)
          $Output = $Output & "IPSubnet: " & $strIPSubnet & @CRLF
          $Output = $Output & "IPUseZeroBroadcast: " & $objItem.IPUseZeroBroadcast & @CRLF
          $Output = $Output & "IPXAddress: " & $objItem.IPXAddress & @CRLF
          $Output = $Output & "IPXEnabled: " & $objItem.IPXEnabled & @CRLF
          $strIPXFrameType = $objItem.IPXFrameType(0)
          $Output = $Output & "IPXFrameType: " & $strIPXFrameType & @CRLF
          $Output = $Output & "IPXMediaType: " & $objItem.IPXMediaType & @CRLF
          $strIPXNetworkNumber = $objItem.IPXNetworkNumber(0)
          $Output = $Output & "IPXNetworkNumber: " & $strIPXNetworkNumber & @CRLF
          $Output = $Output & "IPXVirtualNetNumber: " & $objItem.IPXVirtualNetNumber & @CRLF
          $Output = $Output & "KeepAliveInterval: " & $objItem.KeepAliveInterval & @CRLF
          $Output = $Output & "KeepAliveTime: " & $objItem.KeepAliveTime & @CRLF
          $Output = $Output & "MACAddress: " & $objItem.MACAddress & @CRLF
          $Output = $Output & "MTU: " & $objItem.MTU & @CRLF
          $Output = $Output & "NumForwardPackets: " & $objItem.NumForwardPackets & @CRLF
          $Output = $Output & "PMTUBHDetectEnabled: " & $objItem.PMTUBHDetectEnabled & @CRLF
          $Output = $Output & "PMTUDiscoveryEnabled: " & $objItem.PMTUDiscoveryEnabled & @CRLF
          $Output = $Output & "ServiceName: " & $objItem.ServiceName & @CRLF
          $Output = $Output & "SettingID: " & $objItem.SettingID & @CRLF
          $Output = $Output & "TcpipNetbiosOptions: " & $objItem.TcpipNetbiosOptions & @CRLF
          $Output = $Output & "TcpMaxConnectRetransmissions: " & $objItem.TcpMaxConnectRetransmissions & @CRLF
          $Output = $Output & "TcpMaxDataRetransmissions: " & $objItem.TcpMaxDataRetransmissions & @CRLF
          $Output = $Output & "TcpNumConnections: " & $objItem.TcpNumConnections & @CRLF
          $Output = $Output & "TcpUseRFC1122UrgentPointer: " & $objItem.TcpUseRFC1122UrgentPointer & @CRLF
          $Output = $Output & "TcpWindowSize: " & $objItem.TcpWindowSize & @CRLF
          $Output = $Output & "WINSEnableLMHostsLookup: " & $objItem.WINSEnableLMHostsLookup & @CRLF
          $Output = $Output & "WINSHostLookupFile: " & $objItem.WINSHostLookupFile & @CRLF
          $Output = $Output & "WINSPrimaryServer: " & $objItem.WINSPrimaryServer & @CRLF
          $Output = $Output & "WINSScopeID: " & $objItem.WINSScopeID & @CRLF
          $Output = $Output & "WINSSecondaryServer: " & $objItem.WINSSecondaryServer & @CRLF
          if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
          $Output=""
       Next
    Else
       Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_NetworkAdapterConfiguration" )
    Endif
     
     
    Func WMIDateStringToDate($dtmDate)
     
        Return (StringMid($dtmDate, 5, 2) & "/" & _
        StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
        & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc


    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 22:44 21-07-2010
    Dmitri_Andreev

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Orion_76
    Огромное спасибо за ответ, этот пример мне пригодится в будущим, но я имел ввиду немного другое,   наверно неудачно мысль изложил. Нужно получить имена сетевых подключений (Подключение по локальной сети, Подключение по локальной сети 2, имена PPP, PPPoE, VPN соединений).

    Всего записей: 38 | Зарегистр. 14-07-2009 | Отправлено: 14:20 22-07-2010
    Senza

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

    Всего записей: 4 | Зарегистр. 22-07-2010 | Отправлено: 14:23 22-07-2010
    Orion_76



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

    Цитата:
    Подключение по локальной сети, Подключение по локальной сети 2, имена PPP, PPPoE, VPN соединений

    т.е. Имена ярлыков папки Сетевые подключения?

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 19:04 22-07-2010
    kpuk



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

    ----------
    Мой дед говорил ''делай добро и бросай его в воду,
    Оно не пропадёт, добром к тебе вернётся...''

    Дружественный хостинг. Мой выбор!

    Всего записей: 1099 | Зарегистр. 07-03-2004 | Отправлено: 21:58 22-07-2010 | Исправлено: kpuk, 22:00 22-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил калькулятор (третий пост сверху), добавлена расширенная память (9 ячеек) и автосохранение памяти и позиции окна. Все операции доступны с клавиатуры. Добавил алгоритм повтора последней операции, т.е. если вы делите на 2, то повторное нажатие "Вычислить" опять делит число на 2.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 02:13 23-07-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Dmitri_Andreev,
    Так у меня показывает все ярлыки папки "Сетевые подключения" (Windows XP SP3):
    Код:
    #include <GuiListView.au3>
    #include <Array.au3>
     
    Opt("WinWaitDelay", 0)
     
    Local $sTitle = "Сетевые подключения", $hListView, $iNumber, $sName
     
    Run("control ncpa.cpl")
    ;ShellExecute("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}")
    WinWait($sTitle)
    If Not WinActive($sTitle) Then WinActivate($sTitle)
    WinWaitActive($sTitle)
    WinSetState($sTitle, "", @SW_MINIMIZE)
    $hListView = ControlGetHandle($sTitle, "", "[CLASS:SysListView32; INSTANCE:1]")
    $iNumber = _GUICtrlListView_GetItemCount($hListView)
    Dim $aNetwork[$iNumber + 1]
    For $i = 0 To $iNumber - 1
        $sName = _GUICtrlListView_GetItemText($hListView, $i)
        $aNetwork[$i + 1] = $sName
    Next
    $aNetwork[0] = UBound($aNetwork) - 1
    WinClose($sTitle)
    _ArrayDisplay($aNetwork)


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 09:01 23-07-2010 | Исправлено: madmasles, 09:04 23-07-2010
    Orion_76



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

    Цитата:
    Подключение по локальной сети, Подключение по локальной сети 2, имена PPP, PPPoE, VPN соединений  

     на офф.форуме нашел только через ipconfig...
    хотя что-то мне подсказывает, можно и из реестра выдернуть...
     

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 11:19 23-07-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Dmitri_Andreev
    Вот ссылка на ScriptOmatic.au3.
    Там много интересного.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:42 23-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил генератор мелодий в двух вариантах, особенно для MIDI.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 20:02 24-07-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли решить такую задачу:  
    1) сделать копию ветки реестра со всеми значениями
    2) через некоторое время сделать повторную копию этой ветки
    3) сравнить их на предмет изменения  записей (добавление, удаление, изменение)

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 20:38 24-07-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    $s= 'text = "text1(text2)";'
     
    Как вырезать в этом примере то, что находиться в кавычках, т.е. text1(text2) ?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 23:10 24-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    $s = StringSplit('text = "text1(text2)";', '"')
    MsgBox(0, 'Сообщение', $s[2])

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 06:28 25-07-2010 | Исправлено: AZJIO, 06:36 25-07-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Можно еще так попробовать:
    Код:
    $sString = 'text = "text1(text2)";'
    ; 1-ый вариант:
    $sResult = StringRegExpReplace($sString, '(?s).*?\Q"\E(.*?)\Q"\E.*', '\1')
    MsgBox(0, '1-Найдено:', $sResult)
    ; 2-ой вариант:
    $aResult = StringRegExp($sString, '"(.*?)"', 3)
    If IsArray($aResult) Then
        MsgBox(0, '2-Найдено:', $aResult[0])
    Else
        MsgBox(0, 'NO', 'NO')
    EndIf
    ; 3-ий вариант:
    $sRes = StringMid($sString, StringInStr($sString, '"', 0, 1) + 1, StringInStr($sString, '"', 0, 2) - _
    StringInStr($sString, '"', 0, 1) - 1)
    MsgBox(0, '3-Найдено:', $sRes)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 07:52 25-07-2010 | Исправлено: madmasles, 08:14 25-07-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    A не подскажите еще как заменить определенные слова в строке на другие?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 09:33 25-07-2010
    madmasles

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

    Код:
    $sString = 'text = "text1(text2)";'
    $sWordOld = 'text'
    $sWordNew = 'click'
    $sResult = StringReplace($sString, $sWordOld, $sWordNew)
    MsgBox(0, '', 'Old: ' & $sString & @CRLF & 'New: ' & $sResult)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 10:33 25-07-2010 | Исправлено: madmasles, 10:39 25-07-2010
    AZJIO



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

    Цитата:
    Возможно ли решить такую задачу:

    Слишком объёмный вопрос, решить можно, а можно взять готовую бесплатную программу regshot (с исходниками).

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 11:11 25-07-2010
    Kiev78

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

    Цитата:
    Возможно ли решить такую задачу:

    Для этого не нужен АвтоИТ - есть специализированные программы, которые успешно делают подобные операции.
    Если же нужно сделать это из АвтоИТа - то можно вызывать regedit с ключами командной строки.

    Всего записей: 244 | Зарегистр. 17-06-2006 | Отправлено: 12:19 25-07-2010
    assch11

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.Не подскажете
    Можно ли средствами Autoit из формата - PNG - сделать формат - ICO
    Я понимаю что для этого есть другие программы  
    Просто нужно именно на Autoit.
    Если можно пример как это делается.

    Всего записей: 1 | Зарегистр. 08-05-2010 | Отправлено: 23:49 25-07-2010 | Исправлено: assch11, 23:59 25-07-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Возможно я плохо объяснил тогда, но мне нужно немного другое..

    Код:
    $sKeywords = 'function,if,and,or,then,while,repeat,end,until,else,elseif,local,in,do,for'
    $aKeywords = StringSplit($sKeywords, ",")
    $sText = 'for i, strPageName in pairs(tPages) do'

    Необходимо заменить слова в строке $sText, которые имеются в массиве $aKeywords, т.е. только слова for, in, do, а не части слов, в которых присутствуют for, in, do.
    Также, например, в строке 'strVar = var_for_table;' - слово 'for' заменять не надо, т.к. оно является частью слова 'var_for_table'.
    А в строке 'XXX=function()', слово 'function' заменить надо и т.п.


    Kiev78

    Цитата:
    [...]есть специализированные программы[...]

    Я знаю, что они есть, но желательно средствами AutoIt.

    Цитата:
    [...] regedit с ключами командной строки.

    Если ты про команду reg, то она не имеет таких параметров, которые сравнят две копии ветки реестра. Или я плохо смотрел?


    AZJIO
    RegShot - программа дельная, и я всегда ее раньше использовал для подобных нужд, но сейчас появилась необходимость автоматизировать процесс сравнения копий веток реестра.
    P.S. RegShot ведь не поддерживает параметры командной строки?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 11:39 26-07-2010
    Kiev78

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

    Цитата:
    Если ты про команду reg, то она не имеет таких параметров, которые сравнят две копии ветки реестра. Или я плохо смотрел?  

    Она сделает тебе снимки - а сравнивать ты можешь уже средствами АвтоИТа (ты ведь в нём хочешь всё делать), или использовать другой софт (чисто для сравнения).

    Всего записей: 244 | Зарегистр. 17-06-2006 | Отправлено: 12:19 26-07-2010 | Исправлено: Kiev78, 12:21 26-07-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    1. Заменить на что?
    2. Я бы рекомендовал выделить в отдельные переменные ключевые слова, которые отделяются от других пробелами (do, while, for) и те, которые отделяются знаками "=", "(" и ")" (function). Думаю, что можно всю эту конструкция и в один регвыр засунуть, но логика выражения заметно усложниться, так же как и понимание. Лучше составить по регвыру для каждой группы ключевых слов и пройтись отдельными StringRegExpReplace'ами по каждому из них.
     
    Добавлено:
    К примеру вот так можно

    Код:
    $sKeywords = 'function,if,and,or,then,while,repeat,end,until,else,elseif,local,in,do,for'
    $sKeywords = StringReplace($sKeywords, ',', '|'); Ключевые слова разделять лучше "|", т.к. этот символ является оператором условия в регвырах
    $sChange = "*magic_word*"; Слово на которое нужно заменить каждое из найденных ключевых слов
    Dim $sText[3]
    $sText[0] = 'for i, strPageName in pairs(tPages) for do while'
    $sText[1] = 'strVar = var_for_table; but this for else while '
    $sText[2] = 'function() XXX=function() but for do while _not_change_function function'
     
    $sPattern1 = "^(" & $sKeywords & ")([\s\(])"; Шаблон поиска ключевых слов в начале строки
    $sPattern2 = "([\s\=])(" & $sKeywords & ")([\s\(])"; Шаблон поиска ключевых слов в середине строки
    $sPattern3 = "([\s\=])(" & $sKeywords & ")$"; Шаблон поиска ключевых слов в конце строки
    For $i = 0 to 2
            Do
                $sText[$i] = StringRegExpReplace($sText[$i], $sPattern1, $sChange & "\2")
            Until Not @extended
            Do
                $sText[$i] = StringRegExpReplace($sText[$i], $sPattern2, "\1" & $sChange & "\3")
            Until Not @extended
            Do
                $sText[$i] = StringRegExpReplace($sText[$i], $sPattern3, "\1" & $sChange)
            Until Not @extended
            ; Все циклы проводятся пока все ключевые слова не будут заменены
        ConsoleWrite($sText[$i] & @CRLF)
    Next

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 12:51 26-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    reg поддерживает сравнение из ком строки
    Код:
    reg compare имя_раздела_1 имя_раздела_2 /v имя_записи | ve| oa|od|os|on |s
    почитай в справке ключи вариантов вывода данных.
     
    На счёт реестра начни читать этой ссылки несколько страниц до момента создания скрипта.
     
    Сохрани предыдущую тему как "Версия для печати" и используй поиск по страничке.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 14:49 26-07-2010
    Zloy_Gelud



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

    Код:
    $sSimv = '\.|\=|\/|\*|\-|\+|\<|\>|\~|\,|\[|\]|\{|\}'
    $sKeywords = 'function|if|and|or|then|while|repeat|end|until|else|elseif|local|in|do|for'
    $s = 'OnJump = function() do'
     
    $s = StringRegExpReplace($s, '^('&$sKeywords&')[\s\(\)\;'&$sSimv&']', '##bC##$1##C## ')
    $s = StringRegExpReplace($s, '[\s'&$sSimv&']('&$sKeywords&')[\s\(\)\;'&$sSimv&']', ' ##bC##$1##C## ')
    $s = StringRegExpReplace($s, '[\s\(\)\;'& $sSimv &'](' & $sKeywords & ')$', ' ##bC##$1##C##')  
     
    MsgBox(0,"",$s)

    Почему в скрипте обрезается открывающаяся круглая скобка ( ? Возможно это как=то пофиксить? [разобрался*]


    AZJIO

    Цитата:
    reg поддерживает сравнение из ком строки

    Я знаю. Поддерживает сравнение двух разделов реестра. Но не сравнит 2 REG или HIVE файла.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 19:44 26-07-2010 | Исправлено: Zloy_Gelud, 21:37 26-07-2010
    AZJIO



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

    Цитата:
    Но не сравнит 2 REG или HIVE файла.
    копируй раздел в другой раздел и сравнивай последующие изменения. Команда копирования у reg тоже есть.
     
    Обновил калькулятор, добавил поддержку языковых файлов lng, возможность открывать файлы расширенной памяти, соответственно иметь их сколько угодно. Добавил защиту-индикатор, для действий "на 0 делить нельзя" и "корень отрицательного числа". Исправил ошибку на двух кнопках, когда переменные с числами воспринимаются как текстовые.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 21:52 26-07-2010 | Исправлено: AZJIO, 05:57 27-07-2010
    opt_step



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

    Цитата:
    RegDelete('HKEY_CURRENT_USER\Software\Microsoft\DrWatson')

    как сделать, чтобы он повторялся в цикле каждые 10 мин и при нажатии клавиши выгружался из процессов?

    Всего записей: 11230 | Зарегистр. 10-09-2008 | Отправлено: 11:00 27-07-2010
    Kastermight



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

    Код:
    HotKeySet("^{DEL}", "_Exit"); Ctrl+Del
     
    While 1
        RegDelete('HKEY_CURRENT_USER\Software\Microsoft\DrWatson')
        Sleep(1000*60*10); 10 min
    WEnd
     
    Func _Exit()
        Exit
    EndFunc

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 11:37 27-07-2010 | Исправлено: Kastermight, 11:39 27-07-2010
    opt_step



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

    Цитата:
    HKEY_CURRENT_USER\Software\Microsoft\DrWatson

    а как выставить атрибуты (разрешения) у ветки ...\DrWatson?

    Всего записей: 11230 | Зарегистр. 10-09-2008 | Отправлено: 12:34 27-07-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    opt_step
    могу посоветовать использовать утилиту командной строки - SetACL.

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 12:56 27-07-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    opt_step
    тут пример проверки/изменения прав на VBS... Можно переделать в AutoIT

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 15:56 27-07-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    degid
    Да, переделывается легко. Получается примерно следующее

    Код:
    ;Этот скрипт проверяет наличие прав.
    ;Если делать не Check, а Set то будет менять

     
    Const $KEY_QUERY_VALUE = 0x0001
    Const $KEY_SET_VALUE = 0x0002
    Const $KEY_CREATE_SUB_KEY = 0x0004
    Const $DELETE = 0x00010000
    Const $HKEY_LOCAL_MACHINE = 0x80000002
    $strComputer = "."
    $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & _
            $strComputer & "\root\default:StdRegProv")
    $strKeyPath = "SYSTEM\CurrentControlSet"
     
    Local $bHasAccessRight
    $oReg
    .CheckAccess($HKEY_LOCAL_MACHINE, $strKeyPath, $KEY_QUERY_VALUE, $bHasAccessRight)
    If $bHasAccessRight = True Then
        ConsoleWrite("Have Query Value Access Rights on Key" & @CRLF)
    Else
        ConsoleWrite("Do Not Have Query Value Access Rights on Key" & @CRLF)
    EndIf
     
    $oReg.CheckAccess($HKEY_LOCAL_MACHINE, $strKeyPath, $KEY_SET_VALUE, $bHasAccessRight)
    If $bHasAccessRight = True Then
        ConsoleWrite("Have Set Value Access Rights on Key" & @CRLF)
    Else
        ConsoleWrite("Do Not Have Set Value Access Rights on Key" & @CRLF)
    EndIf
     
    $oReg.CheckAccess($HKEY_LOCAL_MACHINE, $strKeyPath, $KEY_CREATE_SUB_KEY, $bHasAccessRight)
    If $bHasAccessRight = True Then
        ConsoleWrite("Have Create SubKey Access Rights on Key" & @CRLF)
    Else
        ConsoleWrite("Do Not Have Create SubKey Access Rights on Key" & @CRLF)
    EndIf
     
    $oReg.CheckAccess($HKEY_LOCAL_MACHINE, $strKeyPath, $DELETE, $bHasAccessRight)
    If $bHasAccessRight = True Then
        ConsoleWrite("Have Delete Access Rights on Key" & @CRLF)
    Else
        ConsoleWrite("Do Not Have Delete Access Rights on Key" & @CRLF)
    EndIf

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 18:10 27-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил калькулятор, и при тесте столкнулся с проблемой больших чисел (вскользь на офсайте читал)

    Код:
    MsgBox(0, 'Message',7450580596923828125*5)
    результат умножения выдаёт меньший результат.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 03:56 28-07-2010 | Исправлено: AZJIO, 04:00 28-07-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO,
    BigNum UDF - Библиотека для работы с большими числами.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 09:29 28-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Уже лучше но запинается на следующем порядке  
    MsgBox(0, 'Message',_BigNum_Mul(37252902984619140625, 5))  
     
    Использовал числа как строковые переменные, тогда правильно считает...

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 09:48 28-07-2010 | Исправлено: AZJIO, 11:54 28-07-2010
    Xecutioner



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Есть такая программка CheckXML для проверки налоговой отчетности и отчетности в ПФР, у нее есть своя динамическая библиотека CPSNXML.dll к которой существует описание.
    При выполнении функции "cpsnValidate" autoit просто вылетает не говоря ни слова (появляется только окно отправить ошибку в мелкософт). Может быть я что-то неправильно делаю?
     
    Вот как в описании обозначаются переменные этой функции на Visual Basic:  
     

    Код:
    Declare Function cpsnValidate Lib "CPSNXML" (ByVal sXmlFileName As String, ByRef nError As Long, ByRef nWarning As Long) As Long

     
    Вот что я пишу на AutoIT:

    Код:
    ;Назначение переменных для вывода в них результата функции dll
    Global $iErrors, $iPredup
    ;Открываем библиотеку
    $dll = DllOpen(@ScriptDir & "\CheckXml\CPSNXML.dll")
    ;Выполняем функцию инициализации в библиотеке, назначаем путь к проверяемому файлу
    DllCall($dll,"long","cpsnInitLib2","long",0,"str",@ScriptDir & "\CheckXml","str",@ScriptDir & "\CheckXml\kladr")
    $path = "C:\123.xml"
    ;Выполняем функцию проверки и выводим результат ошибок в $iErrors, предупреждений в $iPredup
    DllCall($dll,"long","cpsnValidate","str",$sPath,"long",$iErrors,"long",$iPredup)
    ;Закрываем библиотеку
    DllClose($dll)

     
    Если же я выполняю обрезанную функцию "cpsnValidateZ" вместо "cpsnValidate", которая не выводит информацию об ошибках, то все проходит успешно. Может быть я неправильно использую вывод значений об ошибках в переменную?

    Всего записей: 6 | Зарегистр. 28-02-2008 | Отправлено: 09:57 28-07-2010 | Исправлено: Xecutioner, 10:00 28-07-2010
    Loopback



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Xecutioner
    По-видимому, в качестве второго-третьего параметра требуется указатель на целое (в VB "ByRef"). Попробуй записать так:

    Код:
     
    DllCall($dll,"long","cpsnValidate","str",$sPath,"long*",$iErrors,"long*",$iPredup)
     

     
    Кстати, Autoit не вернет число ошибок в $iErrors, это значение надо будет брать из массива, который возвращает DllCall.

    Всего записей: 174 | Зарегистр. 08-03-2002 | Отправлено: 11:50 28-07-2010 | Исправлено: Loopback, 11:53 28-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    теперь вопрос встал как получить результат с мантисой и экспонентой, а не полной строкой, которая не влазиет в инпут.  
       
    Попробовал сделать вывод числа с мантисой, с двумя функциями обратной конвертации
     

    Код:
    If StringLen($rech)>20 And Not(StringInStr($rech, 'e+') Or StringInStr($rech, 'e-')) Then
        If StringLen(Int($rech))>20 Then
            $r1 = StringMid($rech, 1, 1)
            $exp=StringLen(Int($rech))-1
            If StringLen($exp)<3 Then $exp='0'&$exp
            If StringLen($exp)<3 Then $exp='0'&$exp
            $rech=$r1&'.'&StringTrimLeft(StringTrimRight(Int($rech),5),1)&'e+'$exp
        Else
            If StringMid($rech, 1, 1)<>0 Then
                $Npt = StringInStr($rech, '.')
                $rech= Round($rech, 20-$Npt)
            Else
                $aRech1=StringRegExp($rech, '(0\.)(0*)(\d+)',3)
                $exp=StringLen($aRech1[1])+1
                $r1 = StringMid($aRech1[2], 1, 1)
                $rech=$r1&'.'&StringTrimLeft($aRech1[2],1)
                $rech= Round($rech, 15)&'e-'&$exp
            EndIf
        EndIf
    EndIf
     
    Func _ConvNumP($num)
        $exp='1'
            $aRech1=StringSplit($num, '+')
            For $i = 1 to Execute($aRech1[2])
                $exp&='0'
            Next
            $num = _BigNum_Mul(StringTrimRight($aRech1[1],1), $exp)
        Return $num
    EndFunc
     
    Func _ConvNumM($num)
        $exp='1'
            $aRech1=StringSplit($num, '-')
            For $i = 1 to $aRech1[2]
                $exp&='0'
            Next
            $num = _BigNum_Div(StringTrimRight($aRech1[1],1), $exp,'200')
        Return $num
    EndFunc

    BigNum.au3 не воспринимает запись с мантисой и экспонентой, пришлось делать обратную конвертацию.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 12:12 28-07-2010 | Исправлено: AZJIO, 16:59 29-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Строки деления требуют указать величину разрядности, например 200
     MsgBox(0, 'Message',_BigNum_Div('0.0001', '41','200'))
     MsgBox(0, 'Message',_BigNum_Div(0.0001, 41,200)

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 14:19 28-07-2010 | Исправлено: AZJIO, 17:02 29-07-2010
    Xecutioner



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Loopback
    Спасибо! все замечательно работает.
    Раз DllCall сам по себе является массивом с результатом выполненных функций, а не записывает их в переменные, то $iErrors и $iPredup в моем примере не нужны.

    Цитата:
    По-видимому, в качестве второго-третьего параметра требуется указатель на целое (в VB "ByRef"). Попробуй записать так:
     
    Код:
     
    DllCall($dll,"long","cpsnValidate","str",$sPath,"long*",$iErrors,"long*",$iPredup)
     
     
     
    Кстати, Autoit не вернет число ошибок в $iErrors, это значение надо будет брать из массива, который возвращает DllCall.


    Всего записей: 6 | Зарегистр. 28-02-2008 | Отправлено: 15:19 28-07-2010 | Исправлено: Xecutioner, 15:23 28-07-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    иногда подвисает iexplorer.exe, те окна не  видно, а процесс висит. как бы определить такой процесс и убить? можно сравнить количество процессов со списком окон, но как потом выбрать какой из процессов убить а какой живой?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 16:21 28-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил секундомер, избавил индикатор от мерцания, добавлены горячие клавиши, авторестарт времени при выборе сигнала, возможность остановить сигнал.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 03:43 29-07-2010 | Исправлено: AZJIO, 05:40 30-07-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ!
    Третий час сижу туплю, не могу понять почему DllCall не ищет простейший Блокнот....
     

    Код:
    $a = DllCall("User32.dll", "hwnd", "FindWindowA", _
    "str", "", _
    "str", "Безымянный - Блокнот")
     
    MsgBox (0, '', $a[0])

     
    Блокнот естественно запущен....

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 00:42 02-08-2010 | Исправлено: Lovec, 00:43 02-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 00:42 02-08-2010
    Цитата:
    почему DllCall не ищет простейший Блокнот

    Потому что функции нужны оба параметра, как заголовок окна, так и его класс:
     

    Код:
    $a = DllCall("User32.dll", "hwnd", "FindWindow", _
        "str", "Notepad", _ ;Class
        "str", "Безымянный - Блокнот")
     
    MsgBox (0, '', $a[0])

     
    а вообще в WinAPI.au3 уже есть такая функция:

    Код:
    _WinAPI_FindWindow()


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:12 02-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Спасибо, уважаемый. Так действительно работает
     
    Но вот вопрос. смотрим MSDN:

    Код:
    HWND WINAPI FindWindow(
      __in_opt  LPCTSTR lpClassName,
      __in_opt  LPCTSTR lpWindowName
    );

     
    Не означает ли надпись "__in_opt", что этот параметр входящий и необязательный?
    Читаем ниже. Про первый параметр написано:

    Цитата:
    If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter.
    - т.е. допускается его пустое (NULL) значение.
    Тоже самое видим и про второй параметр.
     
    Вот я, веря MSDN и пытался использовать только один параметр....

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 11:50 02-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 11:50 02-08-2010
    Цитата:
    Вот я, веря MSDN и пытался использовать только один параметр

    Нет, пустая строка ("") совсем не означает Null , нужно указать там «"int", 0».

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 12:18 02-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    И снова ты прав Сенкс.
     
    Может подскажешь еще... Вот есть API-функция GetDiskFreeSpace.
    Вот откуда простой человек, не работающий в Microsoft, может знать что она возвращает массив данных и что именно в каком элементе массива хранится?? Ведь в MSDN об этом ни слова Все справочники по API что я видел - лишь жалкая копия MSDN и от них толку не более.
    Откуда же люди берут эту инфу???

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 16:18 02-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли как-то в локалке получить имена машин, зная ИП адреса? на всех машинах есть права админа

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 16:31 02-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 16:18 02-08-2010
    Цитата:
     откуда простой человек, не работающий в Microsoft, может знать что она возвращает массив данных и что именно в каком элементе массива хранится?

    Она возвращает не массив, а число > 0 (при удачной обработке). А данные хранятся в структурах чий указатели должны быть переданы функции в качестве параметров.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 17:17 02-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
     
     
    Вод код примера работы этой функции:

    Код:
     
    Local $SectorsPerCluster
    Local $BytesPerSector
    Local $NumberOfFreeClusters
    Local $TotalNumberOfClusters
     
    $calldata=DllCall("Kernel32.dll","int","GetDiskFreeSpaceW", _
    "wstr", "C:\", _
    "dword*", $SectorsPerCluster, _
    "dword*", $BytesPerSector, _
    "dword*", $NumberOfFreeClusters, _
    "dword*", $TotalNumberOfClusters)
     
    ; Данные возвращаются в виде массива, не изменяя значения передаваемых в функцию переменных
    $SectorsPerCluster = $calldata[2]
    $BytesPerSector = $calldata[3]
    $NumberOfFreeClusters = $calldata[4]
    $TotalNumberOfClusters = $calldata[5]
     
    MsgBox (0, "", "Всего кластеров: " & $TotalNumberOfClusters & @CR & _
    "Количество свободных кластеров: " & $NumberOfFreeClusters & @CR & _
    "Количество байт в одном секторе: " & $BytesPerSector & @CR & _
    "Количество секторов в одном кластере: " & $SectorsPerCluster & @CR & @CR & _
    "Итого: " & @CR & @CR & _
    "Количество байт в одном кластере: " & $BytesPerSector * $SectorsPerCluster & @CR & _
    "Всего байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $TotalNumberOfClusters & @CR & _
    "Свободно байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $NumberOfFreeClusters)
     

     
    Здесь видно что переменные используются только для вызова функции и после окончания ее работы их значения не изменяются. А возвращается масив $calldata, а не просто число >0. Вот про него то я и говрю, как я могу догадаться что в его четвертом элементе ($calldata[4]) возвращается количество свободных кластеров?!
     
    Kar1son
    1) Подключиться к реестру удаленного компьютера и прочитать данные оттуда:
     
    Ключ "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName"
    Параметр "ComputerName"
    или
    Ключ "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
    Параметр "Hostname"
     
    2) С помощью WMI:

    Код:
     
    $CompName = "192.168.3.4"             ; IP компьютера к которому подключаемся
    $UserName = "domain\Administrator"     ; имя пользователя от чьего имени подключаемся
    $Pass = "*****"                     ; пароль пользователя $UserName
     
    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")    ; Устанавливаем перехватчик COM-ошибок
     
    $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
    $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0)
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
     
    If IsObj($colItems) Then
        For $objComputer In $colItems
            MsgBox (0, '', $objComputer.Name)
        Next
    EndIf
     
    Func MyErrFunc()
            Msgbox(0,"COM error","Возникла ошибка при работе с COM объектом !"      & @CRLF  & @CRLF & _
                 "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _
                 "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _
                 "err.number is: "         & @TAB & hex($oMyError.number,8)  & @CRLF & _
                 "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _
                 "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _
                 "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _
                 "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _
                 "err.helpcontext is: "    & @TAB & $oMyError.helpcontext _
                )
    Endfunc
     

     
    3) Читать и разбирать регулярно STDOUT:

    Код:
     
    #include <Constants.au3>
     
    Local $foo = Run(@ComSpec & " /c nslookup 192.168.3.4", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
        $line = StdoutRead($foo)
        If @error Then ExitLoop
        MsgBox(0, "STDOUT read:", $line)
    Wend
     
    While 1
        $line = StderrRead($foo)
        If @error Then ExitLoop
        MsgBox(0, "STDERR read:", $line)
    Wend
     
    MsgBox(0, "Debug", "Exiting...")
     

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:00 02-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 18:00 02-08-2010
    Цитата:
    возвращается масив $calldata

    Ну об этом написано в справке по AutoIt:
     

    Цитата:
    If the function call fails then @error is set to 1. Otherwise an array is returned that contains the function return value and a copy of all the parameters (including parameters that the function may have modified when passed by reference).
     

     
    И вообще это не совсем правильное использование функции:
     

    Код:
    #Include <WinAPI.au3>
     
    $tSectorsPerCluster = DllStructCreate("int64")
    $tBytesPerSector = DllStructCreate("int64")
    $tNumberOfFreeClusters = DllStructCreate("int64")
    $tTotalNumberOfClusters = DllStructCreate("int64")
     
    $calldata = DllCall("Kernel32.dll", "int", "GetDiskFreeSpaceW", _
            "wstr", "C:\", _
            "ptr", DllStructGetPtr($tSectorsPerCluster), _
            "ptr", DllStructGetPtr($tBytesPerSector), _
            "ptr", DllStructGetPtr($tNumberOfFreeClusters), _
            "ptr", DllStructGetPtr($tTotalNumberOfClusters))
     
    If Not $calldata[0] Then
        MsgBox(48, 'Error', 'Failed: ' & _WinAPI_GetLastErrorMessage())
        Exit
    EndIf
     
    $SectorsPerCluster = DllStructGetData($tSectorsPerCluster, 1)
    $BytesPerSector = DllStructGetData($tBytesPerSector, 1)
    $NumberOfFreeClusters = DllStructGetData($tNumberOfFreeClusters, 1)
    $TotalNumberOfClusters = DllStructGetData($tTotalNumberOfClusters, 1)
     
    MsgBox(0, "", "Всего кластеров: " & $TotalNumberOfClusters & @CR & _
            "Количество свободных кластеров: " & $NumberOfFreeClusters & @CR & _
            "Количество байт в одном секторе: " & $BytesPerSector & @CR & _
            "Количество секторов в одном кластере: " & $SectorsPerCluster & @CR & @CR & _
            "Итого: " & @CR & @CR & _
            "Количество байт в одном кластере: " & $BytesPerSector * $SectorsPerCluster & @CR & _
            "Всего байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $TotalNumberOfClusters & @CR & _
            "Свободно байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $NumberOfFreeClusters)

     
    Добавлено:
    Lovec 18:00 02-08-2010
    Цитата:
    возвращается масив $calldata, а не просто число >0.

    В $calldata[0] возвращается именно это (результат успешности).
     
    Добавлено:
    Кстати, эта функция не справится со значениями больше 2 gb, нужно использовать GetDiskFreeSpaceEx:
     

    Код:
    Func _WinAPI_GetDiskFreeSpaceEx($sDrive)
        Local $tFreeBytesAvailable = DllStructCreate('int64')
        Local $tTotalNumberOfBytes = DllStructCreate('int64')
        Local $tTotalNumberOfFreeBytes = DllStructCreate('int64')
        Local $Ret = DllCall('kernel32.dll', 'int', 'GetDiskFreeSpaceEx', 'str', $sDrive, 'ptr', DllStructGetPtr($tFreeBytesAvailable), 'ptr', DllStructGetPtr($tTotalNumberOfBytes), 'ptr', DllStructGetPtr($tTotalNumberOfFreeBytes))
     
        If (@error) Or (Not $Ret[0]) Then
            Return SetError(1, 0, 0)
        EndIf
     
        Local $Result[3]
     
        $Result[0] = DllStructGetData($tFreeBytesAvailable, 1)
        $Result[1] = DllStructGetData($tTotalNumberOfBytes, 1)
        $Result[2] = DllStructGetData($tTotalNumberOfFreeBytes, 1)
     
        Return $Result
    EndFunc

     
    это функция взята из библиотеки WinAPIEx.au3.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:29 02-08-2010 | Исправлено: ViSiToR, 18:33 02-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Ок. Спасибо.

    Цитата:
    Кстати, эта функция не справится со значениями больше 2 gb, нужно использовать GetDiskFreeSpaceEx

    С этим не согласен. Ведь на своем компе пробовал прежде чем писать. И на диске С:\ места поболее 2ГБ (в том числе и свободного).

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:45 02-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 18:45 02-08-2010
    Цитата:
    С этим не согласен

    Это не я придумал , так утверждает MSDN:
     

    Цитата:
    The GetDiskFreeSpace function cannot report volume sizes that are greater than 2 gigabytes (GB). To ensure that your application works with large capacity hard drives, use the GetDiskFreeSpaceEx function.


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:57 02-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Можно как нибудь в функцию поиска файлов добавить тригер - "поиск файлов только в корневом каталоге"? Как разновидность функции. Чтобы всю конструкцию обработаки файлов между While - WEnd не переписывать ещё в отдельную функцию.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 20:00 02-08-2010
    Sergey_Demchuk



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как правильно присвоить переменной строку
    sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values("'+'fff'+'","'+'fffffff'+'","'+'eer'+'","'+'eerr'+'")')
     
    Надо наверное по коду вводить символы кавычек?

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 02:22 03-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    Спасибо! я для себя уже сделал по третьему примеру но с использованием утилитки psexec(удаленный запуск команд) :
    Run('psexec \\'& $IP &' hostname', '', @SW_HIDE, $STDOUT_CHILD)
     
    nslookup не подходит потому что в ДНС на один ИП адрес несколько имен хостов и он возвращает их по очереди(первый запуск - имя1, второй запуск - имя2, потом снова имя 1 и тд)

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:11 03-08-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    Зависит от того, в какие кавычки заключаешь строку.  
    Если в одинарные, то все двойные содержащиеся в самой строке можешь смело оставлять так как есть, а все одинарные дублировать. Аналогично с двойными кавычками. Если строку обрамляют двойные кавычки, то все одинарные в самое строке оставляешь как есть, а все двойные дублируешь.

    Код:
    $str = 'sldb.ExecSQL(''insert into test2 (domain,subdomain,key,value) values("''+''fff''+''","''+''fffffff''+''","''+''eer''+''","''+''eerr''+''")'')'
    $str = "sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values(""'+'fff'+'"",""'+'fffffff'+'"",""'+'eer'+'"",""'+'eerr'+'"")')"

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 11:16 03-08-2010 | Исправлено: Kastermight, 22:51 04-08-2010
    Kar1son

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

    Код:
    $CompName = "192.168.3.4"             ; IP компьютера к которому подключаемся  
    $UserName = "domain\Administrator"     ; имя пользователя от чьего имени подключаемся  
    $Pass = "*****"                     ; пароль пользователя $UserName  
     
    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")    ; Устанавливаем перехватчик COM-ошибок  
     
    $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")  
    $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0)  
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")  
     
    If IsObj($colItems) Then  
        For $objComputer In $colItems  
            MsgBox (0, '', $objComputer.Name)  
        Next  
    EndIf  
     
    Func MyErrFunc()  
            Msgbox(0,"COM error","Возникла ошибка при работе с COM объектом !"      & @CRLF  & @CRLF & _  
                 "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _  
                 "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _  
                 "err.number is: "         & @TAB & hex($oMyError.number,8)  & @CRLF & _  
                 "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _  
                 "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _  
                 "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _  
                 "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _  
                 "err.helpcontext is: "    & @TAB & $oMyError.helpcontext _  
                )  
    Endfunc

     
     
    этот способ попробовал - работает, но... я проверяю всю свою подсеть, там оказывается пара серверов на которых у меня нет прав и скрипт останавливается с ошибкойв этом месте

    Код:
    $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0)  

    что действие с этим обектом не возможно(Failed), можно как-то это побороть?
     
     
    Добавлено позднее...
    похоже проблема не в этом, я этот код в цикл запихнул, при втором проходе выходит ошибка...

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 12:10 03-08-2010 | Исправлено: Kar1son, 12:49 03-08-2010
    Lovec



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

    Цитата:
    там оказывается пара серверов на которых у меня нет прав

    Без прав доступа через WMI не получится. Ищи другие варианты.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 12:51 03-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    не в этом вопрос, пусть бы те машины на которых нет прав просто пропустились а остальные бы отработали, но скрипт их не пропускает а с ошибкой падает...

    Код:
    $UserName = "Dom\User" ; имя пользователя от чьего имени подключаемся
        $Pass = "pass" ; пароль пользователя $UserName
     
        $oMyError=ObjEvent("AutoIt.Error", "MyErrFunc") ; Устанавливаем перехватчик COM-ошибок
     
    For $i = 0 To UBound($arr) - 1
        $CompName = $arr[$i] ; IP компьютера к которому подключаемся
        ConsoleWrite($arr[$i] & @CRLF)
     
        $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
        $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0)
        If IsObj($oMyError) And StringInStr($oMyError.description,'Отказано') Then ContinueLoop
           $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
     
        If IsObj($colItems) Then
            For $objComputer In $colItems
                MsgBox(0, '', $objComputer.Name)
            Next
        EndIf
    Next
     
    Func MyErrFunc()
    EndFunc   ;==>MyErrFunc

     
    $arr - массив IP адресов
     
    падает в строке:
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
    Error in Expression

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 12:58 03-08-2010 | Исправлено: Kar1son, 13:02 03-08-2010
    Lovec



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

    Цитата:
    падает в строке:
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")  

    Это значит что скрипт доходит до этой строки при ошибке, а не должен. Значит твое условие

    Код:
    If IsObj($oMyError) And StringInStr($oMyError.description,'Отказано') Then ContinueLoop

    не отлавливает ошибку, значит меняй его. Например, на более простое

    Код:
    If @error Then ContinueLoop

    И тогда все работает

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 14:16 03-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TextReplace - поиск и замена текста. Добавлено замена по сценарию, ресайз окна.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 15:19 03-08-2010 | Исправлено: AZJIO, 23:45 02-09-2010
    Sergey_Demchuk



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

    Цитата:
    [/q]Kastermight
    [q]Зависит от того, в какие кавычки заключаешь строку.  
    Если в одинарные, то все двойные содержащиеся в самой строке можешь смело оставлять так как есть, а все одинарные дублировать. Аналогично с двойными кавычками. Если строку обрамляют двойные кавычки, то все одинарные в самое строке оставляешь как есть, а все двойные дублируешь.  
     
    Код:$str = 'sldb.ExecSQL(''insert into test2 (domain,subdomain,key,value) values("''+''fff''+'","'+''fffffff''+''","''+''eer''+''","''+''eerr''+''")'')'  
    $str = "sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values(""'+'fff'+'"",""'+'fffffff'+'","'+'eer'+'"",""'+'eerr'+'"")')"

     
     
    Видимо не все так, ибо при компиляции выдает ошибку
    ERROR: syntax error
    $str = "sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values(""'+'fff'+'"",""'+'fffffff'+'",
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    I:\INSTALL\Delphi\Sqlite\SQLite_files\Example\filds.au3 - 1 error(s), 0 warning(s)
     
    Хотя вообщем то разобрался дальше, идея правильная оказалась

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 15:32 03-08-2010 | Исправлено: Sergey_Demchuk, 15:59 03-08-2010
    Kar1son

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

    Вариант с WMI почему-то в цикле не всегда дает результат... тоесть я запускаю этот цикл и вижу что некоторые адреса не определяются, беру вариант без цикла, с опросом одной машины(которая только что не ответила) и результат есть... не могу понять в чем дело...
     
    Попробовал вернуться к варианту с просмотром результата работы утилитки которая определяет имя. и опять ерунда какая-то... так же ответов иногда нет от машин, а тут же в ручную проверяю - отвечает. И вообще еще ни разу не доработала до конца, проходит от 5 до 80 циклов и все замирает насмерть

    Код:
    #include <Constants.au3>
    ;~ Sleep(1000 * 60 * 60 * 8)
    $hFile = FileOpen('Who.txt', 2)
    Dim $Names[256][2]
    For $i = 0 To 255
        If Ping('150.18.50.' & $i) Then
            $Names[$i][0] = '150.18.50.' & $i
            FileWrite($hFile, '150.18.50.' & $i)
            ConsoleWrite('150.18.50.' & $i )
            $sLog = ''
            $hRun = Run(@ScriptDir & '\psexec.exe \\150.18.50.' & $i & ' hostname', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
            While 1
                $sLog &= StdoutRead($hRun)
                If @error Then ExitLoop
            WEnd
            If $sLog <> '' Then
                FileWrite($hFile, ' - ' & $sLog )
                ConsoleWrite(' - ' & $sLog )
            Else
                FileWrite($hFile, ' - нет ответа' & @CRLF)
                ConsoleWrite(' - нет ответа' & @CRLF)
            EndIf
            If ProcessExists($hRun) Then ProcessWaitClose ($hRun)
        EndIf
    Next
    FileClose($hFile)


    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 16:27 03-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Да х.з. ... Ту же от настройки и работы сети многое зависит, так что возможны и траблы из за этого...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 16:43 03-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    дело не в сети оказалось, скрипт виснет, а когда откомпилировал, запустил екзкшник и все отработало на ура

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 17:28 03-08-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    да. ошибся чуток. уж очень много кавычек просто
    исправил. но ты верно подметил - это правило действительно работает

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 20:26 03-08-2010 | Исправлено: Kastermight, 17:59 04-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Создаю окно IE через _IECreate. Убираю через свойства все что для меня лишнее. Получаю окно такого вида:
       
     
    Как бы мне убить еще правый скролл?...
     
    Добавлено:
    В свойствах нет такого... Окном дочерним скрол тоже вроде не является....

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 15:52 05-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в принципе нашел способ через написание определенного HTML кода данного окна... Но все же хотелось бы другим способом, не создавая никаких файлов html.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 19:08 05-08-2010
    AZJIO



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

    Код:
    ; НАЧАЛО
     
     #Include <ie.au3>
     
     $GUI=GUICreate("",200,200)
     
    ; Создание элемента "Браузер"
     
     $oIE=_IECreateEmbedded()
     GUICtrlCreateObj($oIE,10,10,180,180)
     _IENavigate($oIE,'about:blank')
     $oBody=_IETagNameGetCollection($oIE,"body",0)
     $DESCRIPTION="<h1>Привет!</h1>"
     _IEBodyWriteHTML($oBody,$DESCRIPTION)
     
     GUISetState()
     
    ; Цикл обработки сообщений
     
     While True
      $MSG=GUIGetMsg()
      Switch $MSG
       Case -3
        ExitLoop
      EndSwitch
     WEnd
     
    ; КОНЕЦ

     
    или с полными тегами

    Код:
    ; НАЧАЛО
     
     #Include <ie.au3>
     
     $GUI=GUICreate("",200,200)
     
    ; Создание элемента "Браузер"
     
     $oIE=_IECreateEmbedded()
     GUICtrlCreateObj($oIE,10,10,180,180)
     _IENavigate($oIE,'about:blank')
     $DESCRIPTION="<html><body><h1>Привет!</h1></body></html>"
     _IEDocWriteHTML($oIE,$DESCRIPTION)
     
     GUISetState()
     
    ; Цикл обработки сообщений
     
     While True
      $MSG=GUIGetMsg()
      Switch $MSG
       Case -3
        ExitLoop
      EndSwitch
     WEnd
     
    ; КОНЕЦ

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 22:25 05-08-2010 | Исправлено: AZJIO, 22:28 05-08-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    мне кажется, или в этих примерах скроллбар все равно остался?

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 11:33 06-08-2010 | Исправлено: Kastermight, 14:18 06-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kastermight
    Пример не создания html-файлов.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 14:07 06-08-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    [off]
    AZJIO
    точно. проглядел то сообщение. [/off]

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 14:18 06-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, код интересный.
    Но Kastermight был прав. Прежде всего интересует вопрос как убить правый скрол в окне IE (см. мой пост на пред. странице).
     
     
    Добавлено:
    Выражусь точнее.
     
    Я запускаю IE - обратите внимание НЕ внедренный объект в GUI AutoIt.
    В этом открывшемся окне IE мне надо убить правый скролл. Так вот я могу это сделать, если создам заранее специальный html-файл, а потом открою его.
     
    Мне же хочется найти способ сделать это без создания каких-либо файлов. Например, послал в окно IE какое-то сообщение Windows и правый скролбар убрался...
     
    Добавлено:
    Уп-с, сори Ступил
    Ведь пример, приведенный AZJIO я могу использовать и не для внедренного объекта IE!
     
    Все получилось Спасибо!
     
    Добавлено:
    Еще дополнение...
    Кто-нибудь может сказать, почему не завершается этот скрипт?
     

    Код:
    #Include <ie.au3>
     
    $o_IE = _IECreate ("", 0, 1, 1)
    _IEPropertySet($o_IE, "addressbar", False)
    _IEPropertySet($o_IE, "menubar", False)
    _IEPropertySet($o_IE, "resizable", False)
    _IEPropertySet($o_IE, "statusbar", False)
    _IEPropertySet($o_IE, "toolbar", False)
    _IEPropertySet($o_IE, "height", 150)
    _IEPropertySet($o_IE, "width", 300)
     
    $DESCRIPTION='<html><style type="text/css">BODY {overflow: hidden;}</style><body><h1>Привет!</h1></body></html>'
    _IEDocWriteHTML($o_IE, $DESCRIPTION)

     
     
    Интерпретатор останавливается на последней строке и алес... Дальше ни-ни.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:27 07-08-2010 | Исправлено: Lovec, 20:21 07-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И второй вопрос. Вот есть код, позволяющий перетаскивать форму за любую ее часть.

    Код:
    ; Скрипт создает форму, которую можно перетаскивать за любую ее часть
     
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
     
    Opt ("MustDeclareVars", 1)
     
    Global $MouseCoordsOld[2]    ; "старые" координаты мыши, т.е. ее координаты в момент нажатия ее левой кнопки
    Global $MouseCoordsNew[2]    ; "новые" координаты мыши, т.е. ее координаты в момент отпускания ее левой кнопки
    Global $WinPos[4]            ; текущие координаты окна
    Dim $fDragging = False        ; флаг, показывающий, что форму тянут мышью
    Dim $nMsg, $h_HWND
     
     
    $h_HWND = GUICreate("", 268, 91, -1, -1, BitOR($WS_POPUP,$WS_CLIPSIBLINGS), $WS_EX_TOPMOST)
    GUISetBkColor(0x0A246A)
    GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 0)
    GUISetCursor (0)
    GUISetState(@SW_SHOW)
     
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $GUI_EVENT_MOUSEMOVE
                if $fDragging Then    ; начинаем перетаскивать форму
                    $MouseCoordsNew = MouseGetPos()
                    $WinPos = WinGetPos ($h_HWND)
                    WinMove($h_HWND, "", $WinPos[0] + $MouseCoordsNew[0] - $MouseCoordsOld[0], $WinPos[1] + $MouseCoordsNew[1] - $MouseCoordsOld[1])
                    $MouseCoordsOld[0] = $MouseCoordsNew[0]
                    $MouseCoordsOld[1] = $MouseCoordsNew[1]
                EndIf
            Case $GUI_EVENT_PRIMARYDOWN
                $fDragging = True
                $MouseCoordsOld = MouseGetPos()
            Case $GUI_EVENT_PRIMARYUP    ; отпустили левую кнопку мыши - закончили перетаскивание формы
                $fDragging = False
        EndSwitch
    WEnd

     
    Вопрос. Нельзя ли сделать так, чтобы форма так не дергалась при перетаскивании? Чтобы как то плавнее все это было ...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 20:48 07-08-2010
    madmasles

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

    Цитата:
    Нельзя ли сделать так, чтобы форма так не дергалась при перетаскивании?

    Попробуйте так:
    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
     
    $h_HWND = GUICreate("", 268, 91, -1, -1, BitOR($WS_POPUP, $WS_CLIPSIBLINGS), $WS_EX_TOPMOST)
    GUISetBkColor(0x0A246A)
    GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
    GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170, 40, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
     
        EndSwitch
    WEnd
     
    Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
        Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', _
                $Msg, 'wparam', $wParam, 'lparam', $lParam)
        If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NCHITTEST


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:03 07-08-2010
    AZJIO



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

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <SendMessage.au3>
     
    $SC_DRAGMOVE = 0xF012
     
    $HWND = GUICreate("", 268, 91, -1, -1, $WS_POPUP)
    GUISetBkColor(0x0A246A)
    $label = GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170, 40, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor(-1, 0)
     
    ; контекстное меню
    $contextMenu = GUICtrlCreateContextMenu($label)
    $closeitem = GUICtrlCreateMenuItem("Закрыть", $contextMenu)
     
    GUISetState()
     
    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $GUI_EVENT_PRIMARYDOWN
                $a
    = GUIGetCursorInfo()
                If $a[4] = $label Then _SendMessage($HWND, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) ; для перемещения окна за само окно
            Case $closeitem
                Exit
        EndSwitch
    WEnd

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 00:05 08-08-2010 | Исправлено: AZJIO, 06:37 24-02-2012
    madmasles

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

    Цитата:
    Или так, но много include

    Вместо <WinAPI.au3> (372 кб) можно вставить  <SendMessage.au3> (5 кб). И, мне кажется, что инклюды не сильно влияют на конечный размер и скорость работы.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 11:46 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    AZJIO
    Спасибо Интересные примеры.
    Может так и сделаю - перетаскивание без отображения содержимого. Конечно хочется чтобы содержимое отображалось, но кажется плавности при перетаскивании на AutoIt не добиться...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 12:17 08-08-2010
    madmasles

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

    Цитата:
    без отображения содержимого

    У меня в обоих примерах при перетаскивании все содержимое отображается. (AutoIt 3.3.6.1 Windows XP SP3)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:48 08-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Без WinAPI.au3 - скомпилированный 300кб, с WinAPI.au3 - 350кб, если ещё GDIP.au3, то 420 кб, со всеми Include 630 кб. А если скрипт без наворотов, то на версии 3.2.12.1 получается 250кб. По возможности использую компактный вариант 250кб.
     
    Lovec
    Содержимое отображается у меня.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 13:14 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ой, народ... Нельзя было столько вчера пить Это же в свойствах Рабочего стола ставится галка
    Поставил и все отображается
    Еще раз спасибо за примеры. Действительно окно в этих примерах перетаскивается так как должно. Пока не разобрался как они работают, ну это не так страшно.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 13:18 08-08-2010
    madmasles

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

    Цитата:
    По возможности использую компактный вариант 250кб.

    Это смотря какая конечная цель использования. Иногда и за 10 кб борешься, иногда +- 10 Мб не играют роли.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 13:47 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Кстати, вот этот переделанный из вашего минималистичный код тоже вполне жизнеспособен:

    Код:
    #include <WindowsConstants.au3>
    #include <MenuConstants.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
     
    $Gui = GUICreate("", 268, 91, -1, -1, $WS_POPUP)
    GUISetBkColor(0x0A246A)
    GUISetCursor (0)
    $label=GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170, 40)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor(-1, 0)
     
    GuiSetState()
    Do
        _SendMessage($GUI, $WM_SYSCOMMAND, BitOR($SC_MOVE, $HTCAPTION), 0) ; для перемещения окна за само окно
    Until GUIGetMsg() = -3

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 13:58 08-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сделал пример поддержки мультиязычности в скрипте с использованием внешних раздельных языковых файлов. Пример уже применяется в TextReplace и CalculatorMR
     
    поддержка мультиязычности

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:39 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как можно получить время с удаленного сервера времени в Интернет, чтобы потом его синхронизировать с локальным на компе?

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 20:51 08-08-2010
    timsky



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

    Цитата:
    Как можно получить время с удаленного сервера времени в Интернет, чтобы потом его синхронизировать с локальным на компе?

    Вот здесь 3 рабочих примера: http://www.autoitscript.com/forum/index.php?showtopic=43079&view=findpost&p=765481

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 21:35 08-08-2010
    madmasles

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

    Цитата:
    Как можно получить время с удаленного сервера времени в Интернет, чтобы потом его синхронизировать с локальным на компе?

    У меня так работает:
    Код:
    #include <Constants.au3>
    #include <Encoding.au3>
     
    $sTimeServer_1 = 'time.windows.com'
    $sTimeServer_2 = 'time.nist.gov'
    $sTimeServer = ''
    If Ping($sTimeServer_1, 1000) Then
        $sTimeServer = $sTimeServer_1
    ElseIf Ping($sTimeServer_2, 1000) Then
        $sTimeServer = $sTimeServer_2
    Else
        MsgBox(0, '', 'Оба сервера недоступны.')
        Exit
    EndIf
     
    $sLogUpdateServer = ''
    $hTimeUpdateServer = Run('w32tm /config /syncfromflags:manual /manualpeerlist:' & $sTimeServer, '', @SW_HIDE, $STDOUT_CHILD)
    While 1
        $sLogUpdateServer &= StdoutRead($hTimeUpdateServer)
        If @error Then ExitLoop
        Sleep(10)
    WEnd
    $sLogUpdateServer = _Encoding_866To1251($sLogUpdateServer)
    ;MsgBox(0, '', $sLogUpdateServer)
    If Not StringInStr($sLogUpdateServer, 'Команда выполнена успешно.') Then
        MsgBox(0, '', 'Ошибка.')
        Exit
    EndIf
    $sLogUpdateLocal = ''
    $hTimeUpdateLocal = Run('w32tm /config /update', '', @SW_HIDE, $STDOUT_CHILD)
    While 1
        $sLogUpdateLocal &= StdoutRead($hTimeUpdateLocal)
        If @error Then ExitLoop
        Sleep(10)
    WEnd
    $sLogUpdateLocal = _Encoding_866To1251($sLogUpdateLocal)
    ;MsgBox(0, '', $sLogUpdateLocal)
    If StringInStr($sLogUpdateLocal, 'Команда выполнена успешно.') Then
        MsgBox(0, '', 'Время успешно синхронизировано с сервером ' & $sTimeServer)
    Else
        MsgBox(0, '', 'Ошибка.')
    EndIf

    Encoding UDF
    Синхронизация времени

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:08 08-08-2010 | Исправлено: madmasles, 23:19 08-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    timsky
    Спасибо за примеры. Все получилось
     
    Такой вопрос.
    Вот простой пример получения списка файлов с размером и датой их изменения с FTP сервера.

    Код:
    #Include <FTPEx.au3>
    #Include <Array.au3>
     
    Dim $s_Server = 'ftp.mandriva.ru'
    Dim $s_UserNname = ''
    Dim $s_Pass = ''
     
    $Open = _FTP_Open('MyFTP Control')
    $I_FTPSession = _FTP_Connect($Open, $s_Server, $s_UserNname, $s_Pass)
    If $I_FTPSession = 0 Then Exit 99 + 0 * MsgBox(0, '', 'Ошибка открытия FTP-сессии!', 10)
    If _FTP_DirSetCurrent($I_FTPSession, "/mandriva/official/2008.0/i586/") = 0 Then Exit 99 + 0 * MsgBox (0, '', "Ошибка смены FTP-директории!")
    $a = _FTP_ListToArrayEx($I_FTPSession, 2)
    If $a = 0 Then Exit 99 + 0 * MsgBox (0, '', "Ошибка чтения файлов в каталоге!")
    _ArrayDisplay ($a)

     
    Все отлично работает.
    Теперь применяю к нему утилиту Au3PP. Она отрабатывает без ошибок, но после нее код перестает быть работоспособным. В частности не может выполниться строка  

    Код:
    $a = _FTP_ListToArrayEx($I_FTPSession, 2)

     
    Кто знаком с этой замечательной тулзой, может подкинет мысль куда копать?... Уж больно не хочется писать функцию _FTP_ListToArrayEx вручную...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 10:53 10-08-2010
    AZJIO



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

    Цитата:
    Кто знаком с этой замечательной тулзой, может подкинет мысль куда копать?...  

    Вытащить функцию из UDF, проверить в ней существование других функций и существование их в скрипте.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 11:46 10-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Или совпадающих имен переменных, да? Хорошая идея. Щас займусь.
    А у вас мой кусок скрипта после обработки Au3PP работает?
    Если да - значит не в этом дело...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 12:38 10-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди, а почему во всей справке перепутан формат дат?
    Взять к примеру функцию _FTP_FileTimeLoHiToStr. Если последний параметр 1, то она возвращает дату в виде "yyyy/mm/dd hh:mm:ss". Это же "год/месяц/день"?
    Так что же она возвращает на самом деле "год/день/месяц"?? И так во многих (если не во всех) функциях работы с датой...
    Может у меня региональные настройки косят в винде? Так с предыдущей версией AutoIt такого не замечал....
    Щас юзаю v3.3.6.1.
     
    Добавлено:
    И еще. Я нашел почему у меня не работает файл, обработанный Au3PP.
    В файле StructureConstants.au3 присутствует строка

    Код:
    Global Const $tagWIN32_FIND_DATA = "dword dwFileAttributes; dword ftCreationTime[2]; dword ftLastAccessTime[2]; dword ftLastWriteTime[2]; dword nFileSizeHigh; dword nFileSizeLow; dword dwReserved0; dword dwReserved1; wchar cFileName[260]; wchar cAlternateFileName[14]"

     
    Программа Au3PP неверно ее обрабатывает и приводит к виду

    Код:
    Global Const $tagWIN32_FIND_DATA = "dword dwFileAttributes; dword ftCreationTime [2 ]; dword ftLastAccessTime [2 ]; dword ftLastWriteTime [2 ]; dword nFileSizeHigh; dword nFileSizeLow; dword dwReserved0; dword dwReserved1; wchar cFileName [260 ]; wchar cAlternateFileName [14 ]"

     
    Лишние пробелы делают эту константу непригодной для использования.
    Как избежать этого трабла? Добавить эту константу вручную в нормальном виде в своем скрипте?..
     
    Добавлено:
    Попробовал. AutoIt ругается что константа определена ранее. Логично. Вопрос открыт.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 21:55 10-08-2010
    franzykman



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прикольная прога, думал будет сложно разобраться, а на самом деле пока все ОК )

    Всего записей: 2344 | Зарегистр. 16-05-2010 | Отправлено: 23:55 10-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как сделать "утилиту командной строки" чтобы когда из под CMD ее запускаешь она бы могла что-то писать в это самое окошко CMD? типа как работают всякие dir, type и тд.

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 14:32 13-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Kar1son 14:32 13-08-2010
    Цитата:
    как сделать "утилиту командной строки" чтобы когда из под CMD ее запускаешь она бы могла что-то писать в это самое окошко CMD?

    Нужно скомпилировать с опцией Console и использовать ConsoleWrite для записи в Std поток (ConsoleWriteError для записи в StdErr).
     
    Пример калькулятора:
     

    Код:
    ;CalcIt Program by G.Sandler.
     
    $sCopyRight_Str =     StringFormat("=================================================\n" & _
                        "CalcIt Program.\n\n" & _
                        "Copyright (C) 2008 G.Sandler. All rights reserved.\n" & _
                        "=================================================\n\n" & _
                        "Usage Example:\n" & _
                        "CalcIt 2 + 3 -> Will output 5 \n\n")
     
    If $CmdLine[0] = 0 Or $CmdLineRaw = "?" Then
        ConsoleWrite($sCopyRight_Str)
        Sleep(5000)
        Exit
    EndIf
     
    $sCalculate = Execute($CmdLineRaw)
    ConsoleWrite($CmdLineRaw & " = " & $sCalculate & @CRLF)

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:29 13-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Интересует вопрос как этот код VBS переделать на AutoIt (код запуска процесса на удаленной машине):

    Код:
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    CompName = "CompName" 'имя компьютера
    UserName = "Domain\User" 'имя пользователя
    Pass = "Pass" 'пароль пользователя
    Set objServices = objSWbemLocator.ConnectServer(CompName, "root\CIMV2", UserName, Pass, Null, Null, 0)
    If Err.Number <> 0 Then
        WScript.Echo Err.Number & ": " & Err.Description
        WScript.Quit
    End If
    Set objClass = objServices.Get("Win32_Process")
    Res = objClass.Create("notepad.exe", Null, Null, PID)
    If Res <> 0 Then
        WScript.Echo "Код ошибки: " & Res
    End If

     
    Вот что у меня получается

    Код:
    $strComputerName = "CompName"
    $strAdminName = "Domain\User"
    $strAdminPass = "Pass"
    $strProcessName = "notepad.exe"
    Dim $PID
     
    $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
    $objWMIService = $objSWbemLocator.ConnectServer($strComputerName, "root\cimv2", $strAdminName, $strAdminPass, "", "", 0)
     
    $objClass = $objWMIService.Get("Win32_Process")
    $objStartup = $objWMIService.Get("Win32_ProcessStartup")
    $objConfig = $objStartup.SpawnInstance_
    $objConfig.ShowWindow = 3
     
    $Res = $objClass.Create($strProcessName, "", "", $PID)
    If $Res <> 0 Then
        MsgBox (0, '', "Ошибка запуска процесса. Код ошибки: " & $Res)
    Else
        MsgBox (0, '', 'PID запущенного процесса: ' & $PID)
    EndIf

     
    Но процесс не запускается, а все время ругается на строку

    Код:
    $Res = $objClass.Create($strProcessName, "", "", $PID)

    То неверный тип. То Invalid Parameter. Что в принципе одно и тоже...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 15:56 13-08-2010 | Исправлено: Lovec, 15:58 13-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 15:56 13-08-2010
    Цитата:
     все время ругается на строку

    Значит есть где то ошибка, вот так её нужно выявлять:
     

    Код:
    $oErr = ObjEvent("AutoIt.Error", "_COM_Errors")
     
    $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
    $CompName = "CompName" ;имя компьютера
    $UserName = "Domain\User" ;имя пользователя
    $Pass = "Pass" ;пароль пользователя
    $objServices = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, Chr(0), Chr(0), 0)
     
    If @error Then
        Exit
    EndIf
     
    $PID = 0
    $objClass = $objServices.Get("Win32_Process")
    $Res = $objClass.Create("notepad.exe", Chr(0), Chr(0), $PID)
     
    If $Res <> 0 Then
        MsgBox(0, '', "Код ошибки: " & $Res)
    EndIf
     
    Func _COM_Errors()
        MsgBox(48, 'Ошибка', 'Код: ' & $oErr.Number & @CRLF & 'Описание: ' & $oErr.Description)
    EndFunc

     
    Добавлено:
    Вот вроде рабочий код:
     

    Код:
    $oErr = ObjEvent("AutoIt.Error", "_COM_Errors")
     
    $SW_NORMAL = 1
    $s_Machine = @ComputerName
    $s_Command = "notepad.exe"
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate,(Shutdown)}!\\" & $s_Machine & "\root\cimv2")
     
    $objStartup = $objWMIService.Get("Win32_ProcessStartup")
    $objConfig = $objStartup.SpawnInstance_
    $objConfig.ShowWindow = $SW_NORMAL
     
    $objProcess = $objWMIService.Get("Win32_Process")
    $intReturn = $objProcess.Create($s_Command)
     
    Func _COM_Errors()
        MsgBox(48, 'Ошибка', 'Код: ' & $oErr.Number & @CRLF & 'Описание: ' & $oErr.Description)
    EndFunc


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 17:12 13-08-2010 | Исправлено: ViSiToR, 17:18 13-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Я знаю как отлавливать ошибки COM-объектов, спасибо
    Если вставить обработчик, то пишет "Несовпадение типов" в строке

    Код:
    $Res = $objClass.Create($strProcessName, "", "", $PID)

    И хоть ты там вторым и третьим параметром ставь Chr(0), хоть просто "" - таже ошибка.
    Но вы правы, если вообще убрать все последние три параметра и оставить только сам запускаемый процесс

    Код:
    $Res = $objClass.Create("notepad.exe")

    то все работает как надо.
    Ночется получить обратно PID запущенного процесса, в качестве хоть какой то гарантии что процесс запустился.
     
    Добавлено:
    Если оставить вот такой кусок кода

    Код:
    $objConfig = $objStartup.SpawnInstance_
    $objConfig.ShowWindow = 3
    $Res = $objClass.Create($strProcessName, "", $objConfig)

    то перестает ругаться на "Несовпадение типов" (это было из-за 3-го параметра) и начинает ругаться на "Invalid Parameter" - это про второй параметр как видно. Использование вместо "" функции CHR(0) дает туже ошибку.
     
    Добавлено:
    Фу... Победил я его Еще раз перечитал что пишет MSDN про этот метод. Там на месте это параметра должна быть строка, представляющая из себя путь. И если сделать, например, так

    Код:
    $Res = $objClass.Create($strProcessName, "C:\", $objConfig, $PID)

    то все работает и PID возвращает.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:39 13-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec
    А через RunAs нельзя так запустить процесс на удалённой машине? типа:
     

    Код:
    $iPID = RunAs("Domain\User", "CompName", "pass", 0, "Notepad.exe", @SystemDir)
    MsgBox(64, 'Title', $iPID)


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 19:22 13-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    У RunAs отсутствует возможность запуска наудаленном компьютере. Там даже параметра нет, задающего имя компа на котором выполнится команда. Все локально.
     
    Вообще я хочу запустить удаленно визуальное окно (notepad или Internet Explorer) и вывести информацию на нем. Не знаю способа зная PID процесса notepad.exe на удаленном компьютере вывести в его окно информацию. Поэтому предполагаю что будет зараннее приготовленный текстовый (или html) файл который просто будет передан в качестве параметра и откроется Нотепадом.
     
    Я знаю 2 способа открыть удаленно окно Notepad, чтобы пользователь мог с ним взаимодействовать.
    Первый через планировщик задач - нежелательный способ, т.к. на большинстве компьютеров данная служба в целях безопасности отключена.
    Второй - через программу PsExec.exe.
    Программа при своей работе пишет в DOS окно удачно ли был запущен процесс и какой он получил PID. Только вот я пока не могу перенаправить этот вывод в какую-нибудь переменную для дальнейшего анализа....
     
    Вот с этим и прошу помощи.
     
    Добавлено:
    Если делаю так

    Код:
    #include <Constants.au3>
    Dim $a = ""
     
    $iPID = Run ("PsExec.exe -i notepad.exe", @SystemDir, @SW_MINIMIZE, $STDOUT_CHILD)
     
    While ProcessExists($iPID)
        $sStdOutRead = StdoutRead($iPID)
        If @error Then ExitLoop
        If $a <> "" Then $a = $a & $sStdOutRead & @CRLF
    Wend
     
    MsgBox (0, '', $a)

    то видно, что запустившееся черное DOS окно программы PsExec пусто и соответственно StdOut'a никакого.
    Если же запустить так

    Код:
    ShellExecute ("PsExec.exe", "-i notepad.exe")

    то видно вывод есть в DOS-окне, но мы не знаем PID процесса и прочитать этот вывод не можем...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 19:38 13-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 19:38 13-08-2010
    Цитата:
    У RunAs отсутствует возможность запуска наудаленном компьютере. Там даже параметра нет, задающего имя компа на котором выполнится команда.

    А как же параметр domain?
     

    Цитата:
    делаю так

    А если так:
     

    Код:
    #include <Constants.au3>
    Dim $a = ""
    $iPID = Run("PsExec.exe -i notepad.exe", @SystemDir, @SW_HIDE, $STDOUT_CHILD)
     
    While 1
        $sStdOutRead = StdoutRead($iPID)
        If @error <> 0 Then ExitLoop
     
        $a &= $sStdOutRead & @CRLF
    Wend
     
    MsgBox(0, '', $a)


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 20:19 13-08-2010
    Lovec



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

    Цитата:
    А как же параметр domain?  

    Ну параметр domain и user это для идентификации пользователя в домене... Еще раз глянул - нет, удаленный запуск и RunAs никак не связаны. Это просто вопрос привилегий.
     

    Цитата:
    А если так:

    А этот вариант чем то принципиально отличается от предложенного мной?
    По моему нет. И результат такой же - ZERO на выходе.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 15:52 14-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Иногда "Koda" не воспринимает готовые скрипты, а хочется по лёгкому нарастить/изменить интерфейс. Для этого случая сделал CreationGui удобно создающий элементы. Сделать окно прозрачным, переместить над окном скрипта, выбрать элемент, настроить, получить данные в буфер, вставить в скрипт.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 16:07 14-08-2010 | Исправлено: AZJIO, 21:24 13-04-2011
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Интересно Возьмем в заначку.
     
    All
    Ну никак не могу поймать поток StdOut от утилиты PsExec! Вот так

    Код:
    $comm = "PsExec.exe"
    $PID = Run('"' & @ComSpec & '" /c ' & $comm, "" , @SW_SHOW, 2)
    $txt = ""
     
    While 1
        $txt &= StdoutRead($PID)
        If @error Then ExitLoop
    WEnd
    MsgBox(0, '', $txt)

    все выводится. Утилита шлет в поток свою справку. Но стоит запустить например Блокнот

    Код:
    $comm = "PsExec.exe -i notepad.exe"
    $PID = Run('"' & @ComSpec & '" /c ' & $comm, "" , @SW_SHOW, 2)
    $txt = ""
     
    While 1
        $txt &= StdoutRead($PID)
        If @error Then ExitLoop
    WEnd
    MsgBox(0, '', $txt)

    как поток куда-то девается!
     
    А ведь если просто вызвать командную строку и набрать там "PsExec.exe -i notepad.exe", то видно что там поток идет! Утилита пишет инфу о себе и в конце "notepad.exe exited with error code 0"
     
    Как же мне эти строки прочесть то??

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:50 14-08-2010
    AZJIO



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

     
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Скрипт раскраски кода AutoIt для публикации в форумах

  • Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 07:58 15-08-2010 | Исправлено: AZJIO, 12:26 18-05-2011
    ALEXSOVA83

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго всем времени суток.  
    Такая ситуация: Написал скрипт, конвертировал его в *.exe, запускаю "ручками" все работает! Делаю назначенное задание с ссылкой на этот файл - не работает. Назначенное задание срабатывает по расписанию мой файл запускается, находит прогу (которую нужно запустить), запускает, но при включенном скринсейвере видимо не может сделать окно активным соответственно не нажимает в нем кнопки. Скринсейвер отключать нельзя из соображений безопасности.  
    Вопрос: как сделать так чтобы скрипт работал при включенном скринсейвере?

    Всего записей: 3 | Зарегистр. 16-08-2010 | Отправлено: 07:48 16-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ALEXSOVA83
    у меня было такое, там проблема в том что скрипт по заданию запускается не от того пользователя который в этот момент залогинен в системе, поэтому визуально ничего не отображается. Запускай задачу от имени этого пользователя.

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:33 16-08-2010
    Orion_76



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ALEXSOVA83
     
    Способ из шапки : Способ, позволяющий посылать нажатие клавиши в неактивное окно (не путать со свёрнутым)  
    неа?
     
    кстати... можно попробовать скринсейфер скриптом сделать..
    Я когдато делал такую шутку...
    Экран затягивается зловещим красным туманом, сквозь который проглядываются очертания открытых окон и ядовитыми зелеными буквами бегут надписи:
    --------------------------------------------------------------
    Система не смогла идентифицировать пользователя.
    Система готовиться к самоуничтожению.
    ....................................................................................
    ....................|
    --------------------------------------------------------------
     
    На самом деле это просто полупрозрачное, развернутое на весь экран окно с отключенными рамками и заголовками-))))
     

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 09:33 16-08-2010 | Исправлено: Orion_76, 09:58 16-08-2010
    ALEXSOVA83

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Orion_76
     
    Не получается даже при нормальном фокусе послать текст в поле, может я что не так делаю?
    Вот код:
    #Include <WinAPI.au3>  
    Run("C:\Documents and Settings\alex\Application Data\Guru-Soft\GS-Vedomosti\sadmin.exe")
    $hWnd=WinGetHandle("Загрузка модуля администрирования",'Список баз данных (кликните два раза, чтобы выбрать базу для загрузки)')
    ControlSend($hWnd,'Список баз данных (кликните два раза, чтобы выбрать базу для загрузки)', "[CLASS:TLabeledEdit; Instance:    1]","********")

    Всего записей: 3 | Зарегистр. 16-08-2010 | Отправлено: 12:02 16-08-2010
    cin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем.
    Есть скрипт на cmd примерно такого рода
    @echo off
    for /f "tokens=1-7 delims=; skip=1 usebackq" %%a in ("file") do (
    if %%a equ %computer_name% set place=%%c
    )
    if "%place%"==" " set place=Ru\New
    1>>config echo.Group=%place%
     
    Как можно использовать cmd в auto it?
    auto it нужен мне для того, чтобы не посылать пользователю файл который содержит пароли и служебную инфу.

    Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 19:37 16-08-2010 | Исправлено: cin, 08:48 17-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Утилита RegExp для теста регулярных выражений. Так как AutoIt3 своими средствами выполняет поиск по шаблону в виде регулярного выражения, то остаётся только сделать удобную оболочку. Работает нормально, но есть проблема - если в инпуте замены ввести \r\n, то воспринимается он как текст а не как перенос строк, а также не воспринимаются в виде @CRLF и chr(13) и chr(10), в то время как в функции скрипта - StringRegExpReplace они нормально воспринимаются. Ограничение добавления патернов в библиотеку 99. Для большего количества делаем очередной файл-библиотеку.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 08:50 18-08-2010 | Исправлено: AZJIO, 21:29 13-04-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO,
    У Вас в утилите RegExp, похоже, неправильный паттерн для IP-адресов ('\d{2,3}\.\d{2,3}\.\d{1,3}\.\d{1,3}'). Вот здесь посмотрите: Правильный формат IP адреса?.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 14:19 18-08-2010 | Исправлено: madmasles, 19:30 18-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    В гугле много разных форматов записи, в том числе и похожие на мой вариант. У меня заменить d{2,3} на d{1,3}, тогда охватывает айпишники с одной цифрой. Верхнее ограничение не ставил, так как вероятность мала, но можно задать точный диапазон. По ссылке не регексп, а только формат айпишнеков.
    Кстати, альтернативная ссылка теста регекспов.
     
    Вот пример Library_Path.ini для открытия в RegExp
    Ещё ссылка на статью о регулярных выражениях.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 19:57 18-08-2010 | Исправлено: AZJIO, 03:24 21-08-2010
    dc32

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, кому не сложно, плиз помогите с написанием GUI.
    Описание:
    например есть директория Project, структура такая
     
    /project/gui.exe
     
    /project/base/
     
    /project/base/button1
    /project/base/button1/tab1
    /project/base/button1/tab2
    /project/base/button1/tab3
     
    /project/base/button2
    /project/base/button2/tab1
    /project/base/button2/tab2
    /project/base/button2/tab3
     
    /project/base/button3
    /project/base/button3/tab1
    /project/base/button3/tab2
    /project/base/button3/tab3
     
    При запуске GUI.exe нужно чтобы "меню" само сгенерировалась в зависимости от структуры директорий папки base.
     
    в данном случае (с указанной директорией должно получиться):  
    окно с кнопками "button1" "button2" "button3"  
    при нажатии например на кнопку 1 должно появляться 3 таба (это будут просто файлы текстовые без расширения) и под табом1 текст (которые содержится в файле tab1)
     
    фишка в том что если я создам файл newtab4 (с текстом внутри "новый таб") в папке button1, то при запуске проге, она так же 3 буттона отобразит но уже 4 таба, имя четвёртого newtab4 а содержание текста под ним - "новый таб"  
     
    плиз оч нада написать это все в сценарии gui ) и замутить ЕХЕ

    Всего записей: 1 | Зарегистр. 20-08-2010 | Отправлено: 21:55 20-08-2010 | Исправлено: dc32, 22:10 20-08-2010
    gregaz



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

    Цитата:
    Утилита RegExp для теста регулярных выражений.

    В строке :  
     

    Код:
       'link http://forum.ru-board.com/topic.cgi?forum=5&topic=33902&glp#lt' [?] & @CRLF & _

     
    имеется опечатка, в связи с чем скрипт не запускается при отсутствии файла-ИНИ
     ('[?] -вне кавычек')

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 16:50 21-08-2010 | Исправлено: gregaz, 16:52 21-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gregaz
    Исправил.
    Выложил RegExp на офсайт. Проблема с символом s в квадратных скобках (мелкий шрифт), он в регулярке, я нажал отправить не исправляя незакрытые теги... Вследствиее этого BB-код code не используется и URL вставил свои символы, т.е. [?]  
     
    Кстати посмотрите справку по регекспам, скомпановал с разных источником и упорядочил. Сохранить как HTM но не в UTF-8 кодировке как предлагает пастбин.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 19:22 21-08-2010 | Исправлено: AZJIO, 22:09 25-08-2010
    madmasles

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

    Цитата:
    посмотрите справку по регекспам
    Спасибо!  
    Ваша подробнее, чем в русской справке, а с англ. я не дружу.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:05 21-08-2010
    gregaz



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

    Цитата:
    Кстати посмотрите справку по регекспам,

    Посмотрел. Полезная вещь.
    На мой взгляд можно было уточнить формулировки и содержание параграфа :  Метасимволы внутри квадратных скобок
    В частности указать ,что в основном спецсимволы внутри класса не требуют экранизации , за исключением (перечислить)  
     
     
     
    Добавлено:
    madmasles

    Цитата:
    Ваша подробнее, чем в русской справке

    На мой взгляд этим разделом русской справки  вообще нельзя пользоваться ,он совсем не соответствует современным версиям Autoit

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 22:15 21-08-2010
    AZJIO



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

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 04:44 22-08-2010 | Исправлено: AZJIO, 22:09 25-08-2010
    oXiOneX



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, помогите! Я являюсь администратором одного хаба, поэтому скомпилировал сборку оптимизированного под этот хаб DC++ клиента Apex SM s16.4. Вставил туда настройщик, чтобы он спрашивал, какой ник нужен и ип, но он понимает только английские ники. Заметил в одной сборке, что этот настройщик создан с помошью AutoIT 3. Может мне кто-нибудь поможет написать такой скрипт?
     
    Добавлено:
    Надо изменить файл Settins\Favorites.xml, а именно: " <Hub Name="Inferno City Novosibirsk Hub" Connect="1" Description="Город свободных действий" Nick="" Password="" Server="dchub://fierycity.ru" UserDescription="" AwayMsg="" Email="" WindowPosX="0" WindowPosY="0" WindowSizeX="0" WindowSizeY="0" WindowType="3" ChatUserSplit="7500" StealthMode="0" HideShare="0" ShowJoins="0" ExclChecks="0" UserListState="1" HeaderOrder="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14" HeaderWidths="100,75,75,75,100,75,50,40,40,40,40,40,100,100,100" HeaderVisible="1,1,1,1,1,1,1,1,1,1,1,1,1,1,1" RawOne="" RawTwo="" RawThree="" RawFour="" RawFive="" Mode="2" IP="" OpChat="" CliendId="FakeDC V:1.0" OverrideId="0"/>  " -
    - нужно, чтобы она вписывала ник " Nick="Вот сюда" "(это находится в этой же строчке, после Description).  
    Ещё нужно, чтобы он прописывал путь к файлу руссификации (сам путь находится в файле  
    Settings\DCPlus.xml) В этом файле, точнее в 11 его строчке есть секция  
    <LanguageFile type=""</LanguageFile> так вот, мне нужно, чтобы он прописывал реальный путь к руссификатору. Например, если я установил клиент в C:\Temp\ ,то конфигуратор прописывает путь к руссификатору вот так:
    C:\Temp\Settings\Russian.xml  
    Вот тот файл, про который я говорил - http://narod.ru/disk/23974804000/apex_config_sweet.211.ru.exe.html  
    Вот моя сборка ApexDC++ SM s16.4 (не скомпелированная, но с готовым скриптом для Inno Setup 5) - http://narod.ru/disk/23975057000/%D0%9A%D0%BB%D0%B8%D0%B5%D0%BD%D1%82.rar.html
    Вот моя сборка ApexDC++SM s16.4 (скомпилированная с помощью Inno Setup 5) - http://narod.ru/disk/23975499000/Inferno_city%20DC-P2P%20Pack2.exe.html

    Всего записей: 24 | Зарегистр. 22-08-2010 | Отправлено: 19:08 22-08-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oXiOneX, Что-то не нахожу там проверку на русские символы. только вот это есть: код
    Этот гадкий скрипт вешает мне процессор. Вобщем на изучай: файлик
    А вообще декомпиляция типа нарушает авторские права, так что используй только в ознакомительных целях. Лучше найди автора и попроси его о модификации.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 08:58 23-08-2010 | Исправлено: ynbIpb, 09:04 23-08-2010
    oXiOneX



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb, не, ты меня не так понял. Я просто привел пример того, что я хочу сделать. Но так как я не умею работать в данной программе вообще, хотя читал множество туториалов, хотел бы попросить кого-нибудь из вас создать нечто подобное этому скрипту. Так вы поможете? P.S.: а за скрипт спасибо!
     
    Добавлено:
    ynbIpb, к тому же, автор запросил слишком несусветную цену - 500 р. За 750 можно лицензию Антивируса Касперского купить =))) Слушай, а как ты так файл разобрал то? Есть какой декомпилятор что-ли? И ещё, если не сложно, можешь вот этот файлик декомпилировать -  http://narod.ru/disk/23975057000/%D0%9A%D0%BB%D0%B8%D0%B5%D0%BD%D1%82.rar.html ? Он находится внутри этого архива, в папке Settings. Как раз в нем есть ограничение на латиницу. Это настройщик двухфайловый - editor.exe и файл с конфигурацией editor.xml
     

    Всего записей: 24 | Зарегистр. 22-08-2010 | Отправлено: 12:05 23-08-2010
    ADamb

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Насчет поддержка мультиязычности
    Сделал функцию для чтения из lng в UTF-8 или UNICODE формате, дает большую свободу для добавления языков.
    Меняем

    Код:
     
    ;читаем все параметры в секции lng
    $aLng = IniReadSection(@ScriptDir&'\'&$Path, 'lng')  
     

    на

    Код:
     
    ;читаем все параметры в секции lng
    $aLng = IniReadSectionUTF8(@ScriptDir&'\'&$Path, 'lng')  
     

    и добавляем

    Код:
     
    Func IniReadSectionUTF8($path,$section)
        ;Input file is UTF-8 with signature, UNICODE or ANSI
        Local $RezArray[20][2] ;20 elements for now
        $inifile=StringRegExpReplace(FileRead($path),@CRLF,@CR)
        $inifile=StringRegExpReplace($inifile,"(\r){2,}","\1")
        $MatchArray=StringRegExp($inifile, "(?s)\["&$section&"\]\r([^\[]*)", 1)
        $MatchArray=StringSplit($MatchArray[0],@CR)
        $Arrayelem=0
        For $Arraycntr=1 to $MatchArray[0]
            If StringInStr($MatchArray[$Arraycntr],"=")>1  and StringMid($MatchArray[$Arraycntr],1,1)<>";" Then ;not comment or line without =, continue
                $Arrayelem=$Arrayelem+1
                $Component=StringSplit($MatchArray[$Arraycntr],"=")
                $RezArray[$Arraycntr][0]=$Component[1]
                $RezArray[$Arraycntr][1]=$Component[2] ; Could there be string with "=" ??
            EndIf
        Next
        $RezArray[0][0]=$Arrayelem
        ReDim $RezArray[$Arrayelem+1][2]
        Return $RezArray
    EndFunc
     

    Всего записей: 55 | Зарегистр. 11-12-2002 | Отправлено: 23:18 24-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сделал выписку по "Сообщениям Windows". Нашёл интересную информацию - сообщение EM_GETSEL позволяет получить выделенный текст в поле Edit. На AutoIt3 это можно как то осуществить? Поиск в Include выдал результат наличия EM_GETSEL, но функция _GUICtrlEdit_GetText возвращает весь текст, а не выделенный.
     
    Хотя уже нашёл _GUICtrlEdit_GetSel возвращает позицию начала и конца.  
    Теперь осталось понять как получить активный элемент окна, с которого получить выделенный текст.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 05:09 25-08-2010 | Исправлено: AZJIO, 05:50 25-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 05:09 25-08-2010
    Цитата:
    сообщение EM_GETSEL позволяет получить выделенный текст в поле Edit

    Оно возвращает позицию выделения.
     

    Цитата:
    _GUICtrlEdit_GetSel возвращает позицию начала и конца

    Там используется как раз EM_GETSEL, для получения текста используется EM_GETSELTEXT, хотя у меня она почему то не работает. Но можно использовать ControlCommand:
     

    Код:
    ControlCommand($hGUI, "", "Edit1", "GetSelected")

     
     
     
    Добавлено:
    AZJIO 05:09 25-08-2010
    Цитата:
    Теперь осталось понять как получить активный элемент окна, с которого получить выделенный текст.

    ControlGetFocus?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 05:49 25-08-2010
    AZJIO



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

    Код:
    #include <GuiEdit.au3>
    #include <GuiConstantsEx.au3>
     
    $Gui = GUICreate("My Program", 250, 260)
    $Edit=GUICtrlCreateEdit('текст для проверки выделения', 10, 50, 216, 174)
    $element2=GUICtrlCreateButton('получить', 10, 21, 120, 22)
    GUISetState ()
    While 1
       $msg = GUIGetMsg()
       Select
           Case $msg = $element2
                $arr1=_GUICtrlEdit_GetSel ($Edit)
    MsgBox(0, 'Сообщение', StringMid(_GUICtrlEdit_GetText ($Edit), $arr1[0], $arr1[1]-$arr1[0]))
           Case $msg = -3
               Exit
       EndSelect
    WEnd

     
    Теперь нужно ID активного окна получить.
     
    Добавлено:

    Цитата:
    ControlGetFocus?

    вроде то что надо

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 05:53 25-08-2010 | Исправлено: AZJIO, 05:55 25-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 05:09 25-08-2010
    Цитата:
    Сделал выписку по "Сообщениям Windows"

    Полезное собрание. Но там некоторые пункты дизинформируют. Откуда описания брал?
     
    Добавлено:
    AZJIO 05:53 25-08-2010
    Цитата:
    С этим я разобрался

    Зачем так сложно:
     

    Код:
    #include <GuiEdit.au3>
    #include <GuiConstantsEx.au3>
     
    $Gui = GUICreate("My Program", 250, 260)
    $Edit = GUICtrlCreateEdit('текст для проверки выделения', 10, 50, 216, 174)
    $element2 = GUICtrlCreateButton('получить', 10, 21, 120, 22)
    GUISetState()
     
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $element2
                MsgBox(0, 'Сообщение', ControlCommand($Gui, "", $Edit, "GetSelected"))
            Case $msg = -3
                Exit
        EndSelect
    WEnd


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 06:00 25-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Ссылки снизу есть, оттуда и брал.
     
    попробовал в TextCorrection применить

    Код:
    $Selected_Text = ControlCommand(WinGetHandle(''), "", ControlGetFocus(WinGetHandle('')), "GetSelected")

    возвращает квадраты вместо букв, хотя по количеству совпадает. А вставляет вопросы.
    Свой вариант тоже проверил, но он  выдаёт массив по нулям, как бы ничего не выделив.

    Код:
    $arr1=_GUICtrlEdit_GetSel (ControlGetFocus(WinGetHandle('')))
    $Selected_Text = StringMid(_GUICtrlEdit_GetText (ControlGetFocus(WinGetHandle(''))), $arr1[0], $arr1[1]-$arr1[0])

     
    Добавлено:
    проверил

    Код:
    MsgBox(0, 'хэндл', WinGetHandle(''))
    MsgBox(0, 'ID', ControlGetFocus(WinGetHandle('')))

    ID=Scintilla1, а Au3Info.exe возвращает "Instance: 5". Хотя в первом случае ведь работает. Au3Info.exe выдаёт в качестве видимого текста окна набор квадратов вместо символов. В макстоне в поле отправки сообщения вообще текста не видит.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 06:03 25-08-2010 | Исправлено: AZJIO, 06:57 25-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO
    Для SciTE нужен другой подход.
     
    В чём заключается цель всего этого? получить выделенный текст с любого места?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 07:32 25-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Да. Я же понимаю, что метод Send это был временный выход из ситуации, а идеальный это прочитать с активного элемента выделенный текст и заменить на исправленный. Хотя метод Send можно оставить, на случай если активный элемент не найден.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 19:58 25-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил справку регулярные выражения, добавив \h, \H, \z, \V, исключил \p
    Но не разобрался в чём разница между \z и\Z, а также классы типа [:word:] у меня они не работают.
     
    ADamb

    Цитата:
    Сделал функцию для чтения из lng в UTF-8 или UNICODE формате, дает большую свободу для добавления языков.
    UTF-8 или UNICODE это для поддержки китайского языка?

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 22:02 25-08-2010 | Исправлено: AZJIO, 17:12 27-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 22:02 25-08-2010
    Цитата:
     в чём разница между \z и\Z

    \z это конец всей строки, \Z это конец всей строки или конец строки перед новой строкой. Хотя в реальности оно не работает.
     

    Цитата:
     классы типа [:word:] у меня они не работают

    Да, на этот счёт и у мменя всегда были возмущения.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:19 25-08-2010
    ADamb

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

    Цитата:
    UTF-8 или UNICODE это для поддержки китайского языка?

    Для любого языка, в одном файле можно печатать что угодно, не только системной кодировкой.

    Всего записей: 55 | Зарегистр. 11-12-2002 | Отправлено: 22:36 25-08-2010
    Bobr69



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет. Народ подскажите как сделать чтоб Send("{tab down}") длился 300 мс, потом Send("{tab up}") - 300 мс, а потом снова Send("{tab down}") и т.д., до тех пор пока скрипт вручную не остановится. И как сделать чтоб можно было регулировать частоту нажатия Tab во время выполнения скрипта.

    Всего записей: 28 | Зарегистр. 27-11-2007 | Отправлено: 01:16 29-08-2010 | Исправлено: Bobr69, 01:17 29-08-2010
    ynbIpb



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

    Код:
    While 1
        Send("{tab down}")
        sleep(300)
        Send("{tab up}")
        sleep(300)
    Wend

    а как регулировать лень думать.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 01:27 29-08-2010
    AZJIO



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

    Код:
    HotKeySet("^{UP}", "_Plus")
    HotKeySet("^{DOWN}", "_Minus")
     
    Global $t=300, $tl=50
     
    While 1  
        Send("{tab down}")  
        sleep($t)  
        Send("{tab up}")  
        sleep($t)  
    Wend  
     
    Func _Plus()
        $t+=$tl
    EndFunc
     
    Func _Minus()
        $t-=$tl
    EndFunc

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 05:47 29-08-2010
    Kiev78

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть один интересный вопрос: допустим, у меня в блокноте открыт какой-нибудь файл. Есть ли возможность узнать полный путь к файлу (кроме как ковыряться в памяти процесса notepad.exe) - может есть какие-нибудь UDF-ы? Пока я могу взять только имя файла из заголовка окна.

    Всего записей: 244 | Зарегистр. 17-06-2006 | Отправлено: 11:53 29-08-2010 | Исправлено: Kiev78, 11:55 29-08-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kiev78
    В блокноте можно, наверное, так попробовать:
    Код:
    If WinExists('[Class:Notepad]') Then
        $sFile = StringReplace(WinGetTitle('[Class:Notepad]'), ' - Блокнот', '')
    Else
        MsgBox(0, '', 'Нет блокнота')
        Exit
    EndIf
     
    $aReturn = _FileSearch(@HomeDrive, $sFile)
    If $aReturn[0] Then
        MsgBox(0, '', $aReturn[1])
    Else
        MsgBox(0, '', 'Файл ' & $sFile & ' не найден')
    EndIf
     
    Func _FileSearch($sPath, $sFileMask)
        Local $sOut = StringToBinary("0" & @CRLF, 2), $aOut
        Local $hDir = Run(@ComSpec & ' /U/C DIR "' & $sPath & '\' & $sFileMask & '" /S/B/A-D', @SystemDir, @SW_HIDE, 6)
        While 1
            $sOut &= StdoutRead($hDir, False, True)
            If @error Then ExitLoop
            Sleep(2)
        WEnd
        $aOut = StringRegExp(BinaryToString($sOut, 2), "[^\r\n]+", 3)
        If @error Then Return SetError(1)
        $aOut[0] = UBound($aOut) - 1
        Return $aOut
    EndFunc   ;==>_FileSearch
    А лучше пользоваться другим редактором, например, AkelPad, он сразу путь к файлу в заголовке окна пишет.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 15:43 29-08-2010
    Kiev78

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не, поиск не катит (во-первых долго, во-вторых может быть несколько файлов в разных местах с одинаковым именем).  
    Нужен именно блокнот.

    Всего записей: 244 | Зарегистр. 17-06-2006 | Отправлено: 19:18 29-08-2010
    Bobr69



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO спасибо
    А как сделать чтобы значения tab down и tab up были разными? Например чтоб tab был нажат 300мс, а не нажат 400мс

    Всего записей: 28 | Зарегистр. 27-11-2007 | Отправлено: 00:30 30-08-2010 | Исправлено: Bobr69, 01:01 30-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bobr69
    по простому - sleep($t+100), или $t-=$tl-50 если я понял правильно.
    А по сложному уж сам делай, пример польностью включает все этапы, остаётся только манипулировать переменными.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 06:36 30-08-2010
    Bobr69



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я сделал немного подругому
     

    Код:
     
    HotKeySet("{UP}", "_Plus")
    HotKeySet("{DOWN}", "_Minus")
     
    Global $t=200, $tl=10
     
    While 1  
        Send("{tab down}")  
        sleep($t)  
        Send("{tab up}")  
        sleep(100)  
    Wend  
    Func _Plus()
        $t+=$tl
    EndFunc
    Func _Minus()
        $t-=$tl
    EndFunc
     


    Всего записей: 28 | Зарегистр. 27-11-2007 | Отправлено: 12:15 30-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bobr69
    у тебя
    Цитата:
    Func _Minus()  
        $t-=$tl  
    EndFunc

    сразу сбрасывает в 0, и уже больше $t не изменить

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 14:25 30-08-2010 | Исправлено: Kar1son, 14:25 30-08-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обнаружил, что на Win7 (LiveCD) ярлыки (FileCreateShortcut) создаются без иконок, в свойствах путь указан. Если нажимаю применить иконку, то она появляется, и lnk увеличивается в полтора раза по размеру. Указывал путь к иконке и с кавычками и без.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 05:28 31-08-2010 | Исправлено: AZJIO, 05:30 31-08-2010
    Cegpuk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Везде в коде можно использовать ' вместо "? Если да, то почему все используют двойные кавычки, ведь иногда одинарные предпочтительней? Или лучше использовать ""?

    Цитата:
    If you want to use double-quotes inside a string then you must "double them up".  So for every one quote you want you should use two.  For example if you wanted to set a variable to the string: A word in "this" sentence has quotes around it!  You would do:
        $var = "A word in ""this"" sentence has quotes around it!"
    or use single quotes instead:
        $var = 'A word in "this" sentence has quotes around it!'

    Всего записей: 287 | Зарегистр. 24-01-2007 | Отправлено: 06:33 31-08-2010 | Исправлено: Cegpuk, 06:35 31-08-2010
    Bobr69



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Да нет, все нормально изменяется

    Всего записей: 28 | Зарегистр. 27-11-2007 | Отправлено: 08:44 31-08-2010
    WildNightWolf



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cegpuk
    Абсолютно разницы никакой! Кому как нравится. Я например использую ', потому, что мне лень нажать Shift
    Я тоже когда-то интересовался этим вопросом. Даже в русской справке написано:

    Цитата:
    Параметры заголовок и надпись являются строками текста , поэтому их требуется заключать в одинарные или двойные кавычки, причем строки "This is some text" или 'This is some text' равноценны.


    Всего записей: 437 | Зарегистр. 27-08-2010 | Отправлено: 22:33 01-09-2010 | Исправлено: WildNightWolf, 22:46 01-09-2010
    frb_noname

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть код, в котором производится вставка данных в БД SQLite. Вставка производится много (от 100 и больше) раз в цикле. Соответственно возникает тормоз от 1-2 минут и больше. На форумах нашел информацию о том, что нужно делать "многострочную вставку" (multirow insert) или сделать это в одной транзакции.  
    Как это практически реализовать ?  Прошу Вашей помощи.
     

    Код:
    Func addallfiles()
        ;=========== чистим буферную базу =============================
        If Not _SQLite_Exec (-1, "delete from bazadir;") = $SQLITE_OK Then MsgBox(16, "SQLite Error", _SQLite_ErrMsg ())
        ;========== получаем в массив имена всех файлов из директории ==========
        $filename1 = _FileListToArray(@scriptdir)
       
     
     
     ;====== для каждой записи массива выполняем ===================
        For $x=1 to UBound($filename1)-1
            ;======== выделение из всего пути имени непосредственно файла ========
            $filename=StringRight($filename1[$x],stringlen($filename1[$x])-stringInStr($filename1[$x],"\",2,-1))
                    ;======= выделяем дату из имени файла ===============
                    $filedate=StringMid($filename, 9,2) & "." & StringMid($filename, 7,2) & "." & StringMid($filename, 3,4)
                    ;========== вставка данных в буфернную базу ========
                    If Not _SQLite_Exec (-1, "INSERT INTO bazadir VALUES (null,'"& $filename & "','"& $filedate & "','');") = $SQLITE_OK Then _
                    MsgBox(16, "SQLite Error", _SQLite_ErrMsg ())
        Next
     
     
            ;=== вставка из буферной таблицы в базу тех имен файлов, которых в базе еще нет ====
                If Not _SQLite_Exec (-1, "insert into baza select null,filename,filedate,descript from bazadir where bazadir.filename not in (select baza.filename from baza);") = $SQLITE_OK Then _
                MsgBox(16, "SQLite Error", _SQLite_ErrMsg ())
     
     
     
    select_all()
    EndFunc ;=====>>> addallfiles ========

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 09:40 02-09-2010 | Исправлено: frb_noname, 09:55 02-09-2010
    Posochov



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

    Цитата:
    ping -n 2 127.0.0.1 > nul

    Как воспроизвести такую команду на AutoIT?

    Всего записей: 1703 | Зарегистр. 30-04-2005 | Отправлено: 03:24 03-09-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Posochov 03:24 03-09-2010
    Цитата:
    Как воспроизвести такую команду на AutoIT?


    Код:
    Run(@ComSpec & ' /C ping -n 2 127.0.0.1 > nul', '', @SW_HIDE)

     
    ?


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 04:15 03-09-2010
    Posochov



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Спасибо.
    Я так и думал, но надеялся, что может быть есть что то оригинальное у AutoIT.

    Всего записей: 1703 | Зарегистр. 30-04-2005 | Отправлено: 05:25 03-09-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну есть ещё встроенная функция пинга

    Код:
    $sAdress = "127.0.0.1"
    While 1
        $iResult = Ping ($sAdress)
        ConsoleWrite ("Ответ от: "&$sAdress&": время "&$iResult&"мс" & @CRLF)
        sleep(1500); пауза 1,5 сек
    WEnd

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 08:26 03-09-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Posochov
    Если мне не изменяет память, то

    Цитата:
    ping -n 2 127.0.0.1 > nul
    задает паузу в батнике ~ на 2 секунды. Если это так, то на AutoIt это будет

    Код:
    Sleep(2000)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 09:39 03-09-2010
    frb_noname

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нашел решение своего вопроса относительно использования транзакций при многократной вставке записей в БД SQLite, может кому пригодится - скорость вставки возросла в разы !
     

    Код:
    Func addallfiles()
        ;==== чистим буферную базу ============
        If Not _SQLite_Exec (-1, "delete from bazadir;") = $SQLITE_OK Then MsgBox(16, "SQLite Error", _SQLite_ErrMsg ())
        ;======= получаем в массив имена всех файлов из директории ============
        $filename1 = _FileListToArray(@scriptdir)
                ;-----------------  НАЧАЛО ТРАНЗАКЦИИ ======
            _SQLite_Exec (-1, "begin transaction;")
        ;========== для каждой записи массива выполняем ==========
        For $x=1 to UBound($filename1)-1
            ;======= выделение из всего пути имени непосредственно файла ========
            $filename=StringRight($filename1[$x],stringlen($filename1[$x])-stringInStr($filename1[$x],"\",2,-1))
                    ;====== выделяем дату из имени файла ==============
                    $filedate=StringMid($filename, 9,2) & "." & StringMid($filename, 7,2) & "." & StringMid($filename, 3,4)
                    ;============ вставка данных в буфернную базу =====
                    If Not _SQLite_Exec (-1, "INSERT INTO bazadir VALUES (null,'"& $filename & "','"& $filedate & "','');") = $SQLITE_OK Then _
                    MsgBox(16, "SQLite Error", _SQLite_ErrMsg ())
        Next
            ;====== вставка из буферной таблицы в базу тех имен файлов, которых в базе еще нет =======
                If Not _SQLite_Exec (-1, "insert into baza select null,filename,filedate,descript from bazadir where bazadir.filename not in (select baza.filename from baza);") = $SQLITE_OK Then _
                MsgBox(16, "SQLite Error", _SQLite_ErrMsg ())
                                         ;======== КОНЕЦ ТРАНЗАКЦИИ ===============
               _SQLite_Exec (-1, "commit;")
     
     
     
    select_all()
    EndFunc ;==========>>> addallfiles =======================

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 10:51 03-09-2010 | Исправлено: frb_noname, 10:55 03-09-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    frb_noname
    У Вас эта строка
    Цитата:
    $filename=StringRight($filename1[$x],stringlen($filename1[$x])-stringInStr($filename1[$x],"\",2,-1))
    лишняя. _FileListToArray() возвращает имена файлов(папок) без пути к ним.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 11:04 03-09-2010
    SotM



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    2 ALL
    Один из форумчан обратился ко мне с просьбой создать offline версию (в формате chm) данного раздела посвященному AutoIT.  
    У меня есть самописная программа, которая это сама делает.
     
    Желательно это дело добавить в шапку для дальнейшего использования. Архивы разделов:
    Часть 1 (2.31 Mb)
    Часть 2 (3.15 Mb)
    Часть 3 (400 Kb)
     
    P.S. Комментарии, просьбы и т.д. лучше делать через Личку, т.к. в этом разделе я не бываю.

    Всего записей: 965 | Зарегистр. 28-11-2006 | Отправлено: 13:46 03-09-2010 | Исправлено: SotM, 13:46 03-09-2010
    Posochov



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

    Цитата:
    RegWrite('HKLM\SOFTWARE\KasperskyLab\protected\LicStorage','kis','REG_BINARY','4B4C737700004B4')

    Если значение в кавычках, то записывается неверно, а если без кавычек - выдает ошибку компиляции.
     
    Как записать в реестр значение типа REG_BINARY в шестнатеричном виде?
    Вариант Run(@ComSpec ...) не предлагать.

    Всего записей: 1703 | Зарегистр. 30-04-2005 | Отправлено: 15:33 03-09-2010 | Исправлено: Posochov, 18:04 03-09-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Posochov ну если рассуждать логически, если ты пишешь бинарные данные, то и передавай их в бинарном виде?
    $bData = Binary ("0x4B4C737700004B4C7377040000007377EF6ACC0E6783")
    з.ы.
    проверять лень

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 16:21 03-09-2010 | Исправлено: ynbIpb, 16:22 03-09-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SotM,
    Какая полезная штука! Огромное спасибо!

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 16:30 03-09-2010
    Posochov



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb
    Цитата:
    проверять лень  

    Проверил - все работает.
    Спасибо.

    Всего записей: 1703 | Зарегистр. 30-04-2005 | Отправлено: 16:47 03-09-2010
    SotM



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles
    Да не за что. Хотелось бы услышать мнения от всех участников, что следует добавить/изменить в этих chm файлах. Или быть может кто-то хочет посодействовать в разной степени.

    Всего записей: 965 | Зарегистр. 28-11-2006 | Отправлено: 16:54 03-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SotM
    Пользовался "версией для печати" с использованием своего скрипта.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 12:08 04-09-2010 | Исправлено: AZJIO, 12:12 04-09-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Этот вопрос мучает меня уже давно..ну вот решился спросить.

    Код:
     
    _GUICtrlTreeView_Add($hWnd, $hSibling, $sText[, $iImage = -1[, $iSelImage = -1]])
     

    Если $iImage равен -1, то это действие не должно по идее добавлять иконку? Или я ошибаюсь? Потому что у меня при установке значения -1 иконка добавляется (первая из ImageList).
    Возможно ли сделать так, чтобы иконка не добавлялась к определенным нодам?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 16:05 05-09-2010
    vpol



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

    Цитата:
    У меня есть самописная программа, которая это сама делает.  

    А самой программой не поделитесь???
    Если она на AutiIT написана, то скрипт-исходник тоже интересует.

    Всего записей: 858 | Зарегистр. 12-08-2001 | Отправлено: 18:40 05-09-2010
    sklart



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

    Цитата:
    Если она на AutiIT написана, то скрипт-исходник тоже интересует.

    Не думаю, SotM, насколько я понял, AutoIt'ом не интересуется.
    Присоединяюсь еще раз к благодарностям.
     
     
     
     

    Всего записей: 128 | Зарегистр. 23-01-2006 | Отправлено: 02:01 07-09-2010 | Исправлено: sklart, 02:01 07-09-2010
    SotM



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sklart & vpol
    Моя прога написана на С. В данный момент AutoIT пока не интересует.

    Всего записей: 965 | Зарегистр. 28-11-2006 | Отправлено: 09:05 07-09-2010
    monsoon



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

    Цитата:
    Пользовался "версией для печати" с использованием своего скрипта.

    Версии для печати тем руборда всегда сохраняю в mht (как впрочем и страницы с других сайтов тоже). Как понял, для mht данный скрипт бесполезен?

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 19:05 11-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Бесполезен. Если только прикрутить  возможность временного экспорта в темповую папку.
    Распакованный вариант позволяет выполнить поиск по всем файлам сразу, поэтому я не пакую сохраняемые странички.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 21:55 11-09-2010
    MKN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, как сделать, чтобы при запуске скрипта, изменялась буква системного диска C:\, (на реальную для установленной ОС), в текстовой строке С:\User поля окна.
    (Грубо говоря, чтобы как будто в этой строке работала переменная %Systemdrive%)
    Скрипт начинаю так :

    Код:
    Run('Script.exe')
    WinWaitActive("[CLASS:#32770]")
    ControlFocus ( '[CLASS:#32770]', '', '[CLASS:Edit; INSTANCE:2]' )
    А вот что далее ?...
     
     

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 11:07 14-09-2010 | Исправлено: MKN, 11:11 14-09-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN, не совсем понятна задача в целом.
    но определить системный диск вот:

    Код:
    $sSysDrive = StringMid (@SystemDir, 1, 2)
    Msgbox (0, "", "Так - " & @HomeDrive & @CRLF &"Или так - " & $sSysDrive)

    Использовать макрос @HomeDrive, который возвращает букву диска, который содержит домашний каталог текущего пользователя.
    Или использвать макрос @SystemDir, который содержить полный путь к системной папке и отделить от него букву диска.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 11:38 14-09-2010 | Исправлено: ynbIpb, 11:43 14-09-2010
    MKN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb
    Спасибо за подсказку. Я плохо разбираюсь в AU скриптах, а потому хотелось бы готового решения...
    Ещё раз о задаче : После запуска Script.exe , путь С:\User прописан в поле окна по умолчанию.
    Нужно , чтобы при запуске ,  в этом пути автоматом изменялась буква диска на системную букву. Вот собственно и всё...

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 11:50 14-09-2010
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Дайте ссылки на примеры небольшого,но вполне функц.инсталлятора,а то не нашел в ресурсах.Спасибо!

    Всего записей: 1275 | Зарегистр. 11-09-2005 | Отправлено: 12:28 14-09-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN, трудно понять не имея ту программу в которой надо менять текст, но типа вот:

    Код:
    $sSysDrive = StringMid (@SystemDir, 1, 3); отделяем букву диска вместе со слешем
    Run('Script.exe')
    WinWaitActive("[CLASS:#32770]")
    ControlSetText ( '[CLASS:#32770]', '', '[CLASS:Edit; INSTANCE:2]', $sSysDrive & "User")


    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 13:03 14-09-2010
    MKN



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

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 13:30 14-09-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN, ynbIpb,
    Наверное, так будет правильнее:
    Код:
    Run('Script.exe')
    $hHandle = WinWaitActive('[CLASS:#32770]')
    $sText = ControlGetText($hHandle, '', '[CLASS:Edit; INSTANCE:2]')
    $sText = StringReplace($sText, StringLeft($sText, 2), @HomeDrive)
    ControlSetText($hHandle, '', '[CLASS:Edit; INSTANCE:2]', $sText)

    WinWaitActive('[CLASS:#32770]') - надо бы еще какие-либо данные добавить.
     
     
    PS
    Если только по классу окна работать, то можно так попробовать:
    Код:
    #include <WinAPIEx.au3>
     
    $bCheck = False
     
    $iPid = Run(@ScriptDir & '\Script.exe')
     
    $hHandle = WinWait('[CLASS:#32770]', 5)
    If Not IsHWnd($hHandle) Then
        If ProcessExists($iPid) Then
            ProcessClose($iPid)
            Exit
        EndIf
    EndIf
    $aListPid = _WinAPI_EnumProcessWindows($iPid)
    If Not IsArray($aListPid) Then
        ProcessClose($iPid)
        Exit
    EndIf
    For $i = 1 To $aListPid[0][0]
        If $aListPid[$i][0] = $hHandle Then
            $bCheck = True
            ExitLoop
        EndIf
    Next
    If Not $bCheck Then
        ProcessClose($iPid)
        Exit
    EndIf
     
    If Not WinActive($hHandle) Then WinActivate($hHandle)
    WinWaitActive($hHandle)
    $sText = ControlGetText($hHandle, '', '[CLASS:Edit; INSTANCE:2]')
    $sText = StringReplace($sText, StringLeft($sText, 2), @HomeDrive)
    ControlSetText($hHandle, '', '[CLASS:Edit; INSTANCE:2]', $sText)
    ;...

    WinAPIEx.au3

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 15:26 14-09-2010 | Исправлено: madmasles, 16:24 14-09-2010
    embrace909



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможен ли такой шаблон скрипта без иконки?
    1) запись в app.exe hex значения AF по определенному офсету 1234
    2) запуск app.exe
    3) пауза 3 секунды
    4) запись в app.exe (уже используемый) hex значения FA по определенному офсету 1234

    Всего записей: 4503 | Зарегистр. 03-03-2006 | Отправлено: 18:24 14-09-2010 | Исправлено: embrace909, 18:26 14-09-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В запущенный EXE файл мне кажется система не даст писать, ибо он занят. Ту типа нужно с памятью процесса работать.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 19:43 14-09-2010
    embrace909



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну а если переименовывать? Действие разрешенное для открытого эксешника.
    Переименовать оригинальный эксе app в app0
    Переименовать патченый app1в app
    Запустить патченый эксешник app
    Подождать 3 сек
    Переименовать патченый app в app1
    Переименовать оригинальный app0 в app
    Выйти
     
    Добавлено
    А всё разобрался - через справку нашел что для этого нужно знать всего 3 простейшие команды
    FileMove("app.exe.bak", "app.exe")
    Run("app.exe")
    WinWait("app", "", 30)

    Всего записей: 4503 | Зарегистр. 03-03-2006 | Отправлено: 20:15 14-09-2010 | Исправлено: embrace909, 10:51 15-09-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    All
    Можно ли средствами AutoIt получить на файловом сервере список всех открытых файлов и закрыть те, которые надо или все разом?
    Типа как работает досовская команда "net file"...
     
    Добавлено:
    Поторопился с вопросом немного...
    Сам нашел ответ

    Код:
    ; закрываем все открытые по сети файлы на компьютере
    $objConnection = ObjGet("WinNT://" & @ComputerName & "/LanmanServer")
    $colResources = $objConnection.Resources
     
    For $objResource in $colResources
        $colResources.Remove($objResource.Name)
    Next
     
    MsgBox (0, '', 'готово')

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 09:04 17-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как привязать к shift+колёсику мыши действие, как бы горячую клавишу. Например при прокрутки колёсика проверить нажатие shift используя GUIRegisterMsg(0x020A , "WM_MOUSEHWHEEL")
    посмотрите примеры 1  2 почему то у меня не работают.
     
    Заработало, скачал отсюда hook.dll

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 10:03 17-09-2010 | Исправлено: AZJIO, 07:11 18-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну и как пример, ради которого всё это делалось - скрипт регулировки звука колёсиком мыши при нажатой клавише Shift.
    Осталось прикрутить иконку в трей. Кто нибудь знает пример, как bmp-ресурс в виде линейки с 10 картинками читать покадрово.
     
    Пока прикрутил sndico.dll, вот готовая утилита - Volume Control v0.3 с исходником в комплекте.
    Добавил Mute, темы, настройки в ini.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 12:47 17-09-2010 | Исправлено: AZJIO, 03:29 19-09-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обрабатываю выбор пункта в КомбоБоксе с помощью $CBN_SELENDOK. При запуске ГУИ выполняется функция, заполняющая КомбоБокс. При выборе пункта в КомбоБоксе - заполняются объекты Инпут (в соответсвии с выбранным пунктом). Как сделать, чтобы после заполнения Комбобокса автоматически выбирался первый пункт и заполнялись Инпуты?
     
    Добавлено:
    И какой стиль применить, чтобы нельзя было текст в него вписывать?
     
    Добавлено:
    Возможно ли вытянуть ссылки на характеристики каждого процессора с этого сайта в массив? Или хотя бы каким образом?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 19:04 19-09-2010 | Исправлено: Zloy_Gelud, 19:56 19-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    В русской справке в примере для GUICtrlSetData установка параметров комбобокса, третим параметром идёт выбранный пункт, который обязательно должен быть во втором параметре заполнения комбобокса пунктами. А если список заполнен уже, то GUICtrlSetData использовать с двумя параметрами, только тот пункт который нужно выбрать.
     
    Заполнение инпутов делается при старте отдельно тем же GUICtrlSetData, а потом уже взависимости от выбора.
     
    Ссылки можно вытянуть регуляркой. Получи страницу в виде текста и регуляркой обрабатывай. Пример регулярки есть в RegExp

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 20:27 19-09-2010 | Исправлено: AZJIO, 21:54 19-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    я посмотрел скрипт "перемещение окна за само окно", как то мы обсуждали, оказалось, что там GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST') непричём. За всё отвечает параметр $GUI_WS_EX_PARENTDRAG
    GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170, 40, -1, $GUI_WS_EX_PARENTDRAG)
    к элементу, к которому он добавлен за него происходит перетаскивание. Так что не нужно много #include, оказалось всё очень просто, и я это использовал в Volume Control. Кстати "Volume Control" обновил до версии 0.4.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 03:39 20-09-2010 | Исправлено: AZJIO, 03:40 20-09-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 03:39 20-09-2010
    Цитата:
    там GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST') непричём

    Причём. Это для перетаскивания окна за любое место, не только за Label.
     
    P.S
    По теме.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 03:56 20-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR  
    Ну да, стиль применяется ко всем элементам и $WM_NCHITTEST к тем областям, где пощадь не заполнена элементами, а меня к элементу GUICtrlCreateGraphic не поддерживался $GUI_WS_EX_PARENTDRAG, а $WM_NCHITTEST оказался бесполезным, так как элемент GUICtrlCreateGraphic перекрывает область. В итоге я применил $GUI_WS_EX_PARENTDRAG к лейблу-подложке и таким образом перемещатся стало за любую часть.  
    А в том примере можно как вариант сделать размеры лейбла по размеру окна, а к тексту применить - "центрировать".
    примерно так:

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    $h_HWND = GUICreate("", 268, 91, -1, -1, BitOR($WS_POPUP, $WS_CLIPSIBLINGS), $WS_EX_TOPMOST)
    GUISetBkColor(0x0A246A)
    GUICtrlCreateLabel("Нажми и тащи!", 0, 0, 268, 91, BitOR($SS_CENTER, $SS_CENTERIMAGE), $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor(-1, 0)
    GUISetState()
    While 1
    WEnd

     
    Добавлено:
    Вот сайт, на русском языке по сообщениям Windows

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 05:02 20-09-2010 | Исправлено: AZJIO, 05:26 20-09-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Уж помоги, пожалуйста, с регуляркой, чтобы вытянуть ссылку '/autocatalog/intel/CPU_Intel_Xeon_X5560_6.40_LGA1366_88829.html' из примерно такого куска. Уже который час бьюсь и безрезультатно. А идеально было бы в массив ссылку и название (CPU Intel Xeon X5560     2.8 ГГц/1+8Мб/6.40 ГТ/с LGA1366)
     
    Добавлено:
    Добавляю фоновую картинку с помощью GUICtrlCreatePic, затем уже остальные объекты, но они почему то неактивны. Как можно исправить?
     
    Добавлено:
    Возможно ли Инпутам добавить прозрачность?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 08:07 20-09-2010 | Исправлено: Zloy_Gelud, 08:17 20-09-2010
    NIKZZZZ



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

    Цитата:
    А идеально было бы в массив ссылку и название (CPU Intel Xeon X5560     2.8 ГГц/1+8Мб/6.40 ГТ/с LGA1366)  

     
    Регулярное выражение:

    Код:
    href="([^"]+)"\s+title='Посмотреть\sописание'>([^<]+)

     
     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:49 20-09-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ -- спасибо! Регулярка работает.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 11:20 20-09-2010
    monsoon



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

    Цитата:
    вот готовая утилита - Volume Control v0.3 с исходником в комплекте.  
    Добавил Mute, темы, настройки в ini.

    Супер! Меня как раз когда-то спрашивали о такой утилите.
    Можно ли добавить выбор хоткея на отключение/включение звука (Mute)?

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 11:47 20-09-2010
    madmasles

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

    Цитата:
    Ну да, стиль применяется ко всем элементам и $WM_NCHITTEST к тем областям, где пощадь не заполнена элементами, а меня к элементу GUICtrlCreateGraphic не поддерживался $GUI_WS_EX_PARENTDRAG, а $WM_NCHITTEST оказался бесполезным, так как элемент GUICtrlCreateGraphic перекрывает область.

    А если сделать так:
    Код:
    ;...
    GUICtrlCreateGraphic(...)
    GUICtrlSetState(-1, $GUI_DISABLE)
    ;...
    То $WM_NCHITTEST работает.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:43 20-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Принудительно можно назначить, добавив в исходник
    HotKeySet('^{PAUSE}', "_MUTE") ; Ctrl+PauseBreak
    А в настройки это как время свободное будет, и желание.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 16:25 20-09-2010
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    AutoIT не изучал. Немного ковырялся в AHK.
     
    Добавлено:
    Добавил в скрипт, откомпилировал в SciTE для AutoIT. Работает.
    Спасибо!

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 16:35 20-09-2010 | Исправлено: monsoon, 19:16 20-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Почему горизонтальный слайдер меняет прозрачность, а вертикальный с параметром 0x0002 не меняет?

    Код:
    $GUI = GUICreate("Form1", 465, 414, 192, 124)
    $slider3 = GUICtrlCreateSlider(16, 32, 382, 45)
    ; $slider3 = GUICtrlCreateSlider(16, 32, 45, 382, 0x0002)
    GUICtrlSetLimit(-1, 185, 0)
    GUIRegisterMsg(0x0114 , "WM_HSCROLL")
    GUISetState()
     
    Do
    Until GUIGetMsg() = -3
     
    Func WM_HSCROLL()
            WinSetTrans($GUI,"",255-GUICtrlRead($slider3))
    EndFunc

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 05:55 21-09-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может с этим вопросом кто поможет. Возможно ли редактирование определенной ячейки в ListView, а не только первой в строке?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 14:13 21-09-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 05:55 21-09-2010
    Цитата:
    Почему горизонтальный слайдер меняет прозрачность, а вертикальный с параметром 0x0002 не меняет?

    А почему с 0x0002? нужно использовать WM_VSCROLL (0x0115):
     

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <SliderConstants.au3>
     
    $hGUI = GUICreate("Slider Update Demo", 250, 200)
     
    GUIRegisterMsg($WM_HSCROLL, "WM_HVSCROLL")
    GUIRegisterMsg($WM_VSCROLL, "WM_HVSCROLL")
     
    $Vertical_Label = GUICtrlCreateLabel("Vertical Slider Read: 255", 20, 20, 200)
    $Horizontal_Label = GUICtrlCreateLabel("Horizontal Slider Read: 255", 80, 120, 200)
     
    $Vertical_Slider = GUICtrlCreateSlider(20, 50, 30, 120, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_VERT))
    GUICtrlSetLimit(-1, 185, 0)
    $Horizontal_Slider = GUICtrlCreateSlider(60, 150, 160, 30)
    GUICtrlSetLimit(-1, 185, 0)
     
    GUISetState()
     
    While 1
        $nMsg = GUIGetMsg()
     
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
     
    Func WM_HVSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
        Switch $LParam
            Case GUICtrlGetHandle($Vertical_Slider)
                $iRead = GUICtrlRead($Vertical_Slider)
                GUICtrlSetData($Vertical_Label, "Vertical Slider Read: " & 255-$iRead)
                WinSetTrans($hGUI, "", 255-$iRead)
            Case GUICtrlGetHandle($Horizontal_Slider)
                $iRead = GUICtrlRead($Horizontal_Slider)
                GUICtrlSetData($Horizontal_Label, "Horizontal Slider Read: " & 255-$iRead)
                WinSetTrans($hGUI, "", 255-$iRead)
        EndSwitch
    EndFunc

     
    Zloy_Gelud 14:13 21-09-2010
    Цитата:
    Возможно ли редактирование определенной ячейки в ListView, а не только первой в строке?

    Возможно.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:08 21-09-2010
    Zloy_Gelud



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

    Цитата:
    Возможно.

    Это радует. А как не подскажешь?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 15:15 21-09-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud 15:15 21-09-2010
    Цитата:
    как не подскажешь?

    http://www.autoitscript.com/forum/index.php?showtopic=44132
     
    Реализация конечно оставляет желать лучшего, но оно работает. Если у меня будет желание и свободное время, попробую переписать в более удобную UDF.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:54 21-09-2010
    beseda2408

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста как мне реализовать следующее. Имеется первое окно, оно закрывается по крестику (Закрыть окно). На первом окне есть кнопка, которая запускает практически такое же окно. Второе окно также должно закрываться по крестику. Но компилятор ругается на обработчик закрытия второго окна. Может кто может помочь? Строчку на которую ругается компилятор, я отметил в коде.

    Код:
     
    #include <GUIConstants.au3>
     
    ; Создаем первое окно
    Opt("GUIOnEventMode", 1)
    $MainWindow = GUICreate("Корпоративная сеть",1905,1015,4,4)
    $CreatePicture = GUICtrlCreatePic("c:\ConfigMaster\Exe\Pic\Pic1.jpg",0,0,0,0)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState (@SW_SHOW)
     
    ; Далее создаем кнопки в первом окне
    $Region = GUICtrlCreateButton ("Показать схему региона",1500,830,100,50,0x2000)
    GUICtrlSetOnEvent($Region, "Region")
     
    While 1
        Sleep(1000)
    Wend
     
    ; Обработчик закрытия окна по крестику
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    Func close()
    Exit
    EndFunc
     
    Func Region()
       ; Создаем второе окно
       Opt("GUIOnEventMode", 1)
       $MainWindow = GUICreate("Корпоративная сеть",1905,1015,4,4)
       $CreatePicture = GUICtrlCreatePic("c:\ConfigMaster\Exe\Pic\Pic1.jpg",0,0,0,0)
       GUICtrlSetState(-1, $GUI_DISABLE)
       GUISetState (@SW_SHOW)
     
       While 1
              Sleep(1000)
       Wend
     
       ; Обработчик закрытия окна по крестику
       GUISetOnEvent($GUI_EVENT_CLOSE, "close")
       Func close() ; Компилятор ругается именно на эту строку и не дает запустить программу+++++++++++++++++++++++++
          Exit
       EndFunc
     
    EndFunc
     

    Всего записей: 5 | Зарегистр. 12-12-2008 | Отправлено: 10:10 22-09-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    beseda2408 10:10 22-09-2010
    Цитата:
    Строчку на которую ругается компилятор, я отметил в коде

    Функций нельзя вкладывать одну в другую, и тем более повторять их:
     

    Код:
    #include <GUIConstantsEx.au3>
     
    Opt("GUIOnEventMode", 1)
     
    Global $RegionWindow
     
    ; Создаем первое окно
    $MainWindow = GUICreate("Корпоративная сеть", 1905, 1015, 4, 4)
    $CreatePicture = GUICtrlCreatePic("c:\ConfigMaster\Exe\Pic\Pic1.jpg", 0, 0, 0, 0)
    GUICtrlSetState($CreatePicture, $GUI_DISABLE)
    GUISetState(@SW_SHOW)
     
    ; Далее создаем кнопки в первом окне
    $Region = GUICtrlCreateButton("Показать схему региона", 1500, 830, 100, 50, 0x2000)
    GUICtrlSetOnEvent($Region, "Region")
     
    ; Обработчик закрытия окна по крестику
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
     
    While 1
        Sleep(1000)
    WEnd
     
    Func close()
        Switch @GUI_WinHandle
            Case $MainWindow
                Exit
            Case $RegionWindow
                GUIDelete($RegionWindow)
        EndSwitch
    EndFunc   ;==>close
     
    Func Region()
        ; Создаем второе окно
        $RegionWindow = GUICreate("Корпоративная сеть", 1905, 1015, 4, 4)
        $CreatePicture = GUICtrlCreatePic("c:\ConfigMaster\Exe\Pic\Pic1.jpg", 0, 0, 0, 0)
        GUICtrlSetState($CreatePicture, $GUI_DISABLE)
        GUISetOnEvent($GUI_EVENT_CLOSE, "close")
        GUISetState(@SW_SHOW)
    EndFunc   ;==>Region


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 13:35 22-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Обновил Volume Control до версии 0.5. Горячую клавишу добавил в настройки, с возможностью выбора. И несколько мелочей поправил.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 19:04 22-09-2010
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Спасибо. Непринципиально: после отключения хоткея и нажатия "Применить", отмена начинает действовать после перезапуска утилиты.

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 13:09 23-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Перезалил, исправлено.
    Если есть ещё предложения по утилите и найденные баги, говори.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 13:49 23-09-2010
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Отправил в ЛС по поводу вкл/откл микрофона.
    Как предложение: возможность задействовать клавишу win при задании хоткеев.
    Благодаря подсказке, вставил команду: HotKeySet("#x", "_MUTE") ; win+x  
    Гораздо удобнее нажимать.
     

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 14:51 23-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хотел я сделать себе отключение микрофона, когда не используется, так как он фонит слегка и так как UDF у меня не работала (не разобрался), то сделал отключение имитацией клика мыши

    Код:
    $title='Свойства: Звуки и аудиоустройства'
    Run(@ComSpec & " /c rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0", '', @SW_HIDE)
    WinWaitActive($title)
    ControlClick($title, "", "[CLASS:Button; INSTANCE:4]")
    WinClose($title)
     
    $title1='Общая громкость'
    WinWaitActive($title1)
    WinMove($title1, "", 0, 20)
    $GuiPos = WinGetPos($title1)
    MouseClick('left', $GuiPos[0]+$GuiPos[2]-100, $GuiPos[1]+$GuiPos[3]-10)
    ;ToolTip($GuiPos[0]+$GuiPos[2]-100 &@CRLF& $GuiPos[1]+$GuiPos[3]-10, $GuiPos[0]+$GuiPos[2]-100, $GuiPos[1]+$GuiPos[3]-10)
    ControlClick($title1, "", "[CLASS:Button; INSTANCE:26]")
    $checksum = PixelChecksum(676,313, 679,316)
    If PixelChecksum(676,313, 679,316)=957099137 Then
        MsgBox(0, 'Сообщение', 'Микрофон включен')
    Else
        MsgBox(0, 'Сообщение', 'Микрофон выключен')
    EndIf
    WinClose($title1)

     
    Покопавшись в SoundGetSetQuery.au3 выполнил функцию

    Код:
    #include "SoundGetSetQuery.au3"
    #include "ListViewConstants.au3"
    $a=_SoundQuery()

    которая возвратила список регуляторов моей системы и их состояние. Оказалось sMicrophone не является регулятором громкости микрофона, зато sAnalog оказалось 13 штук под номерами 1-13. Выставил микрофон в положение 80% и снова выполнил скрипт, по данным увидел регулятор с данными около 80% и его данные добавил в функцию, примерно так:

    Код:
    #include "SoundGetSetQuery.au3"
    _SoundSetMicrophoneVolume(50)
    Func _SoundSetMicrophoneVolume($iVolume)
        Local $iRet = SoundSetGet(0, "sAnalog", 9, "Volume", True, $iVolume)
        SetError(@error)
        Return $iRet
    EndFunc

    теперь громкость устанавливается.
    С вкл/выкл микрофона аналогично, вот готовый скрипт

    Код:
    #include "SoundGetSetQuery.au3"
    _MUTE()
     
    Func _MUTE()
        $Mute=_SoundGetMicrophoneMute()
        If $Mute = 0 Then _SoundSetMicrophoneMute(1)
        If $Mute = 1 Then _SoundSetMicrophoneMute(0)
    EndFunc
     
    Func _SoundSetMicrophoneMute($fMute)
        Local $iRet = SoundSetGet(0, "sAnalog", 9, "Mute", True, $fMute)
        SetError(@error)
        Return $iRet
    EndFunc
     
    Func _SoundGetMicrophoneMute()
        Local $iRet = SoundSetGet(0, "sAnalog", 9, "Mute", False, 0)
        SetError(@error)
        Return $iRet
    EndFunc

    Жаль, что микрофон не имеет стандарной абревиатуры sMicrophone, а то бы добавил в скрипт "Volume Control".
     
    Добавлено:
    monsoon

    Цитата:
    Гораздо удобнее нажимать.  
    У меня на эту клавишу раскрывается "Password Commander", может стоить сделать выбор модификаторов (Ctrl, Alt, Shift, Win)

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 16:31 23-09-2010 | Исправлено: AZJIO, 13:35 24-09-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как проще отличить WinXP Home от остальных WinXP?

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:01 23-09-2010
    NIKZZZZ



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

    Цитата:
    Как проще отличить WinXP Home


    Код:
    MsgBox(4096,"version",RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion","ProductName"))

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 18:47 23-09-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Вы пробовали сами? И Pro и Home пришет "Microsoft Windows XP".

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 18:50 23-09-2010
    NIKZZZZ



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

    Цитата:
    Вы пробовали сами? И Pro и Home пришет "Microsoft Windows XP".

    У меня нет Home, возможно нужно смотреть ключ
     

    Код:
    MsgBox(4096,"version",RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion","EditionID"))  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:36 23-09-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    Можно так попробовать, у меня показывает Microsoft Windows XP Professional.
    Читать дальше..
    ScriptOmatic.au3

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:44 23-09-2010
    Leagnus

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO, супер, спасибо большое! Я давно мечтал о контроле микрухи, т.к. часто записываю трансляции интернет-станций, и часто забываю выключить микрофон от скайпа.
    На моей ОСи микрофон определяется так:

    Код:
    1, "dWave", 1

    Всего записей: 148 | Зарегистр. 12-09-2008 | Отправлено: 22:57 23-09-2010 | Исправлено: Leagnus, 22:59 23-09-2010
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
     
    При компиляции первого скрипта:

    Код:
    <span class="au3_S9">$title1='Общая громкость'
    ERROR: syntax error <

    Игнорирую ошибку, получаю exe на выходе, но при запуске:

    Цитата:
    AutoIt Error
    ---------------------------
    Line -1:
    Error: Unable to parse line.
     
    Это несущественно, т.к. первый скрипт не очень практичен.
     
     
    sAnalog, 9  у меня действует на регулировку звука для Rear Pink In. Как понимаю, это гнездо задней панели, куда обычно и подключается микрофон. К сожалению, проверить пока не могу по ряду причин (без них, чтобы не оффтопить)
     

    Цитата:
    Жаль, что микрофон не имеет стандарной абревиатуры sMicrophone, а то бы добавил в скрипт "Volume Control".  

    Т.е. добавить не получится?  М.б. для микрофона стоит сделать отдельную утилитку, например с иконкой микрофона? Тем более, что заценить ее смог уже не только я один.
     

    Цитата:
    У меня на эту клавишу раскрывается "Password Commander", может стоить сделать выбор модификаторов (Ctrl, Alt, Shift, Win)
     

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 10:14 24-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Очередной тест:
    0, sAnalog, 9 - отключить микрофон (да на задней панели стандартный красный), чтоб не слышать в своих наушниках.
    2, dWave, 1  - отключить общий регулятор записи для всех
    2, sMicrophone, 1 - отключить регулятор записи микрофона
    Так как в основном используется микрофон и достаточно отключить все, то можно добавить dWave в утилиту. Но при этом микрофон останется фонить в наушники.
    Есть тогда другой вариант - получить все элементы в массив, а в настройках добавить пункт выбора горячей клавиши для выбранного элемента.
    Можно даже сделать отдельным пунктом - выбор горячих клавиш для каждого элемента и сохранение в ini.
    Но на практике получится что отключение приходится делать двумя горячими клавишами. Тогда сделать вариант "отключить всё".

    Цитата:
    Rear Pink In
    у меня он же.
    Ещё хотел сделать вывод микшера из трей-меню утилиты, не нашёл способ без манипуляций с окнами, при чем только на одном языке.

    Цитата:
    М.б. для микрофона стоит сделать отдельную утилитку, например с иконкой микрофона?
    какой смысл делать отдельно? Чтоб лишний интерпретатор в процессах висел? Или нужна в трее вид комутации микрофона? Понял, но тут всё равно придётся индивидуально переделывать или делать только для микрофона.
     

    Цитата:
    Игнорирую ошибку
    ошибка раскраски кода... вообщем не важно, этот код всё равно индивидуальный, я его как пример дал. Там и координаты другие и чексумма пикселов галочки.
     
    Вот передалал функцию с возвратом в массив Подробнее...
     
    заодно выяснил, что ReDim тормозить только на больших массивах тест
     
    Добавлено:
    monsoon
    Временное решение с микрофоном - ссылка 2кб.
    Поправь на свои dWave и sAnalog. Отключает звук в канале записи (Общий для всех)  и канал микрофона для наушников, чтоб не фонил.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 13:33 24-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Тест бага - покликайте по одному из пунктов несколько раз, операция происходит с другим.
     
    Исправил пост, по ссылке теперь работающий код

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:28 24-09-2010 | Исправлено: AZJIO, 13:15 28-09-2010
    monsoon



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

    Цитата:
    Тест бага - покликайте по одному из пунктов несколько раз, операция происходит с другим.
     
    у меня сразу при первом клике. Например, выбрав первый - выбмрается пятый, кликнув на 5-й - выбирается 9-й.
     

    Цитата:
    Временное решение с микрофоном - ссылка 2кб.  

    Спасибо, работает!

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 15:19 25-09-2010 | Исправлено: monsoon, 15:55 25-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Я хотел сделать оболочку выбора устройств, но в очередной раз столкнулся с проблемой чекбоксов. Возможно имеется ввиду не хэндл элемента а хэндл подэлемента ListView, в UDF не нашёл варианта установки/снятия галочки с пункта кликом по нему.
    Сделал ListView, в котором можно кликнув по пункту управлять включением устройст, данные для управления передаются из массива найденных элементов в функцию. Пока все затормозилось на установке галочек...

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:54 25-09-2010
    Taran2ul



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите решение регистрирования расширения файла для программы чтобы в реестр вносились данные о пути установки этой программы (а точнее распаковки). Т.е. есть самораспаковывающийся архив с программой, и нужно чтобы файлы некоторого расширения открывались в ней.  
    Вот reg который я сделал:  
     

    Код:
    REGEDIT4
     
    [HKEY_CLASSES_ROOT\.cdw]
    @="CDW-File"
     
    [HKEY_CLASSES_ROOT\CDW-File]
    @="Ascon Kompas-3D Чертеж"
     
    [HKEY_CLASSES_ROOT\CDW-File\shell]
     
    [HKEY_CLASSES_ROOT\CDW-File\shell\Open]
     
    [HKEY_CLASSES_ROOT\CDW-File\shell\Open\command]
    @="e:\\Portable\\KOMPAS-3D V11\\Bin\\KOMPAS.Exe \"%1\""
     
    [HKEY_CLASSES_ROOT\CDW-File\DefaultIcon]
    @="e:\\Portable\\KOMPAS-3D V11\\Bin\\KOMPAS.Exe,1"

     
     
    Но тут встает вопрос - А если путь не тот?  
    Можно как нибудь использовать относительный путь. Подумал что можно при запуске AutoIt скрипта из каталога куда распаковалась программа можно добиться нужного результата.

    Всего записей: 458 | Зарегистр. 18-02-2008 | Отправлено: 01:43 26-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Taran2ul
    1. Да, всё правильно, кроме мелочи, путь должен быть обрамлён кавычками, иначе из-за пробелов в пути "KOMPAS-3D V11" файл не откроется.
    @="\"e:\\Portable\\KOMPAS-3D V11\\Bin\\KOMPAS.Exe\" \"%1\""
     
    2. Решение использовать скрипт au3 только для прописки расширения не выгодно, неизвестно будет ли установлен автоит на компе? на котором нужно выполнить, здесь батником будет универсальней. На au3 текущий путь @ScriptDir, в батнике %~dp0 это и есть относительно текущего каталога.
     

    Код:
    RegWrite("HKCR\.cdw","","REG_SZ",'CDW-File')
    RegWrite("HKCR\CDW-File","","REG_SZ",'Ascon Kompas-3D Чертеж')
    RegWrite("HKCR\CDW-File\shell\Open\command","","REG_SZ",'"'&@ScriptDir&'\KOMPAS-3D V11\Bin\KOMPAS.Exe" "%1"')
    RegWrite("HKCR\CDW-File\DefaultIcon","","REG_SZ",'"'&@ScriptDir&'\KOMPAS-3D V11\Bin\KOMPAS.Exe"')


    Код:
    Reg.exe add "HKCR\.cdw" /v "" /t REG_SZ /d "CDW-File" /f
    Reg.exe add "HKCR\CDW-File" /v "" /t REG_SZ /d "Ascon Kompas-3D Чертеж" /f
    Reg.exe add "HKCR\CDW-File\shell\Open\command" /v "" /t REG_SZ /d "\"%~dp0KOMPAS-3D V11\Bin\KOMPAS.Exe\" \"%%1\"" /f
    Reg.exe add "HKCR\CDW-File\DefaultIcon" /v "" /t REG_SZ /d "%~dp0KOMPAS-3D V11\Bin\KOMPAS.Exe" /f

    как пример по теме Ассоциатор.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 03:16 26-09-2010
    Taran2ul



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    можно же сконвертировать au3 в exe и тогда на конечном компьютере AutoIt не нужен.
    Спасибо за решение.

    Всего записей: 458 | Зарегистр. 18-02-2008 | Отправлено: 12:48 26-09-2010
    BOKN

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите как реализовать чтобы в IE тыкал на ВАСЮ.... а точнее находил слово ВАСЯ и тыкал на него
    Просто по id нельзя... т.к. ВАСЯ может после перезагрузки страницы быть под quiz-1 и т.д.
     
    <li><input type="radio" name="answer" id="quiz-0" value="0" /><label for="quiz-0">ВАСЯ</label></li>  
                         
    <li><input type="radio" name="answer" id="quiz-1" value="1" /><label for="quiz-1">ПЕТЯ</label></li>  

    Всего записей: 4 | Зарегистр. 03-06-2010 | Отправлено: 15:28 26-09-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BOKN,
    А так не работает?

    Код:
    #include <IE.au3>
     
    $oIE = _IECreate('http://Ваша страница/')
    $oForm = _IEFormGetObjByName($oIE, "Ваша форма")
     
    If Not _IEFormElementRadioSelect($oForm, "0", "answer", -1, "byValue") Then
        _IEFormElementRadioSelect($oForm, "0", "answer", 1, "byValue")
    EndIf


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 17:43 26-09-2010 | Исправлено: madmasles, 18:48 26-09-2010
    BOKN

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    что-то не помогает ((

    Всего записей: 4 | Зарегистр. 03-06-2010 | Отправлено: 19:50 26-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BOKN
    Можно регуляркой вытащить id со словом Вася

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 21:47 26-09-2010
    BOKN

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вытаскивать мне ничего не надо ... мне нужно чтобы он в той форме находил слово и выбирал его ... это же форма
     
     
    Вот исходный код

    Код:
    <div class="content quiz-page">  
                <h2>ВОПРОС</h2>  
    <p>Найдите ВАСЮ ))))</p>  
                <form action="/Quiz-Index.aspx" method="post" class="quiz-question">  
                    <ul class="list">  
                        <li></li>  
                         
                            <li><input type="radio" name="answer" id="quiz-0" value="0" /><label for="quiz-0">ВАСЯ</label></li>  
                         
                            <li><input type="radio" name="answer" id="quiz-1" value="1" /><label for="quiz-1">ПЕТЯ</label></li>  
                         
                            <li><input type="radio" name="answer" id="quiz-2" value="2" /><label for="quiz-2">АНДРЕЙ</label></li>  
                         
                            <li><input type="radio" name="answer" id="quiz-3" value="3" /><label for="quiz-3">ИВАН</label></li>  
                         
                            <li><input type="radio" name="answer" id="quiz-4" value="4" /><label for="quiz-4">ФЁДОР</label></li>  
                         
                    </ul>  
                    <span class="btn-submit">Ответить</span>  
                </form>  
            </div>

     
     
    Нужно чтобы он искал ВАСЮ.. выбирал его и нажимал отправить. Вся сложность заключается в том что ВАСЯ может быть не только первым в выборе но и 2 и т.д.

    Всего записей: 4 | Зарегистр. 03-06-2010 | Отправлено: 21:54 26-09-2010 | Исправлено: BOKN, 22:05 26-09-2010
    madmasles

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

    Цитата:
    что-то не помогает

    Ссылку на страницу дайте.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:57 26-09-2010
    BOKN

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вопрос решился всем спасибо !

    Всего записей: 4 | Зарегистр. 03-06-2010 | Отправлено: 03:02 27-09-2010
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Посоветуйте,пожалуйста,как прокрутить замену в строке,в которой маска (proxy" value="false) обязательна.Спасибо!

    Код:
    #include <File.au3>
    $find = "<entry key="proxy" value="false"/>"
    $replace = "<entry key="proxy" value="true"/>"
    $filename = "D:\Progs\AutoIT\crta\test.xml"
    _ReplaceStringInFile($filename,$find,$replace)

    Всего записей: 1275 | Зарегистр. 11-09-2005 | Отправлено: 10:17 27-09-2010 | Исправлено: jekov, 10:34 27-09-2010
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jekov
     
    Кавычки внутри строки, заключенной в кавычки надо удваивать или
     

    Код:
    #include <File.au3>
    $find = '<entry key="proxy" valueа"false"/>'
    $replace = '<entry key="proxy" value="true"/>'
    $filename = "D:\Progs\AutoIT\crta\test.xml"
    _ReplaceStringInFile($filename,$find,$replace)

     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:32 27-09-2010
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ
    Спасибо!
    Как заставить скрипт производить замену не меняя кодировки?
     

    Всего записей: 1275 | Зарегистр. 11-09-2005 | Отправлено: 11:08 27-09-2010 | Исправлено: jekov, 13:13 27-09-2010
    NIKZZZZ



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

    Цитата:
    Как заставить скрипт производить замену не меняя кодировки?  

     
    Примерно так, не проверял
     

    Код:
    $find = '<entry key="proxy" valueа"false"/>'
    $replace = '<entry key="proxy" value="true"/>'
    $filename = "D:\Progs\AutoIT\crta\test.xml"  
    $iEncoding=FileGetEncoding($filename)
    $sBuf=FileRead($filename,$iEncoding)
    $sBuf=StringReplace($sBuf,$find,$replace)
    $hf=FileOpen($filename,2+$iEncoding)
    FileWrite($hf,$sBuf)
    FileClose($hf)

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:24 27-09-2010
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    В моем случае:

    Код:
    $find ='<entry key="proxy" value="false"/>'
    $replace =[code]entry key="proxy" value="true"/>'
    $filename = @AppDataDir&'\VitySoft\FRD\frd.xml'
    $iEncoding=FileGetEncoding($filename)
    $sBuf=FileRead($filename,$iEncoding)
    $sBuf=StringReplace($sBuf,$find,$replace)
    $hf=FileOpen($filename,2+$iEncoding)
    FileWrite($hf,$sBuf)
    FileClose($hf)

     
    Да нееет!Удаляет все стринги начин.с <,кроме 2 верних да и кодировку меняет в ANSI

    Всего записей: 1275 | Зарегистр. 11-09-2005 | Отправлено: 14:07 27-09-2010 | Исправлено: jekov, 14:12 27-09-2010
    NIKZZZZ



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

    Цитата:
    Да нееет!Удаляет все стринги начин.с <,кроме 2 верних да и кодировку меняет в ANSI

    Моя ошибка

    Код:
    $filename = "z.hml"
    $find = '<entry key="proxy" value="false"/>'
    $replace = '<entry key="proxy" value="true"/>'
    $iEncoding=FileGetEncoding($filename)
    $hf=FileOpen($filename,$iEncoding)
    $sBuf=FileRead($hf)
    FileClose($hf)
    $sBuf=StringReplace($sBuf,$find,$replace)
    $hf=FileOpen($filename,2+$iEncoding)
    FileWrite($hf,$sBuf)
    FileClose($hf)


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:12 27-09-2010 | Исправлено: NIKZZZZ, 15:28 27-09-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jekov,
    У меня так работает:
    Код:
    $sFileName = 'D:\Progs\AutoIT\crta\test.xml'
    $sFind = '<entry key="proxy" valueа"false"/>'
    $sReplace = '<entry key="proxy" value="true"/>'
     
    $iCod = FileGetEncoding($sFileName)
    $hFile = FileOpen($sFileName, $iCod)
    $sText = FileRead($hFile)
    FileClose($hFile)
    $sText = StringReplace($sText, $sFind, $sReplace)
    $hFile = FileOpen($sFileName, $iCod + 2)
    FileWrite($hFile, $sText)
    FileClose($hFile)

    NIKZZZZ,
    У Вас, по-моему, здесь ошибка:
    Цитата:
    $iEncoding=FileGetEncoding($filename)  
    $sBuf=FileRead($filename,$iEncoding)


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 15:35 27-09-2010 | Исправлено: madmasles, 15:41 27-09-2010
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles
    Ваш скрипт меняет стринги правильно однако и кодировку изменяет в ANSI,что совсем нежелательно.
    А почему $iCod + 2 в строке FileOpen,разъясните новичку,пожалуйста,а то в AutoIt3Help-е нету такова.Спасибо!

    Всего записей: 1275 | Зарегистр. 11-09-2005 | Отправлено: 15:59 27-09-2010 | Исправлено: jekov, 16:31 27-09-2010
    NIKZZZZ



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

    Цитата:
    в AutoIt3Help-е нету такова

    Почему нет? В справке по FileOpen написано, 2 - открытие файла на запись с перезаписью содержимого.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:03 27-09-2010
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Скрипт NIKZZZZ работает.Спасибо!!!
     

    Всего записей: 1275 | Зарегистр. 11-09-2005 | Отправлено: 16:13 27-09-2010 | Исправлено: jekov, 16:26 27-09-2010
    madmasles

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

    Цитата:
    Ваш скрипт меняет стринги правильно однако и кодировку изменяет в ANSI

    Цитата:
    Скрипт NIKZZZZ работает
    У нас два абсолютно одинаковых скрипта.
     

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 16:39 27-09-2010
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles
    прошу прощения,и Ваш действительно работает.Моя ошибка была в компиляции.Спасибо!

    Всего записей: 1275 | Зарегистр. 11-09-2005 | Отправлено: 17:27 27-09-2010
    AZJIO



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

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 13:16 28-09-2010
    monsoon



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Если выделена какая-либо строка, попробуйте щелкнуть на сам checkbox другой строки.

    Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 14:35 30-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    monsoon
    Я уже хотел к следующему этапу переходить  от этого. Регуляторы вкл/выкл галочкой.
    Придётся переделывать типа так но как то переключатель не работает.
    Сегодня комп делал, на нём вместо выключения в канале записи ставится галочка выбора одного из регуляторов и Mute там не влияет, возмоно только комутировать регулятором Volume 0 или 100. Универсальность ускользает.
     
    Обновил autoit.xml для Notepad++. Файл автоподстановки. Добавил наиболее распостранённые параметры в команды, чтобы легко вспомнить синтаксис.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 00:12 01-10-2010 | Исправлено: AZJIO, 21:00 03-10-2010
    levelxxx

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем добрый день.
    Возникла такая проблема. Есть набор архивов. В каждом архиве один файл с произвольным именем (текстовый).
    Необходимо, чтобы архив распаковывался в файл, с именем архива.
    Т.е. из archive.zip (с вложенным текстовым файлом) получался файл archive.
     
    Использую консольную версию 7-zip.

    Код:
    ; отрезаем расширение архива            
                $sMyfile = StringTrimRight($aFiles[$ii], $iExt)
                ; строка параметров для распаковки 7zip.
                $sSo = " -so> " & '"' & $sMyfile & '"'
                $sUnpack = "x " & '"' & $aFiles[$ii] & '"' & $sSo
                MsgBox (0, "", $sUnpack)
                $val = ShellExecuteWait($s7z, $sUnpack, "", "", @SW_HIDE)
                MsgBox (0, "", $val)
     

    $iExt - для zip = 4, для 7z=3
    $s7z - путь к 7za.exe
     
    '"' - это ' " '
     
    7z возвращает код 7 - Command line error
    Если использовать просто $sUnpack = "x " & '"' & $aFiles[$ii] (без добавления & $sSo) - происходит обычная распаковка.
     
    При запуске из bat файла:
    7za x "E:\projects\sourse\01.zip" -so>"E:\projects\sourse\Doc"
    все отрабатывается нормально.

    Всего записей: 10 | Зарегистр. 18-11-2008 | Отправлено: 12:25 05-10-2010 | Исправлено: levelxxx, 12:36 05-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    levelxxx
    Попробуй 7zip_udf
    или
    $val = RunWait(@ComSpec & ' /c '&$s7z&' x "'&$aFiles&'" -so > "'&$sMyfile&'"', '', @SW_HIDE)

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 13:39 05-10-2010 | Исправлено: AZJIO, 14:16 05-10-2010
    levelxxx

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Спасибо.
    С @ComSpec работает.
    7zip_udf тоже посмотрю.

    Всего записей: 10 | Зарегистр. 18-11-2008 | Отправлено: 20:49 05-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Попробовал открыть конец гигабайтного файла функцией FileSetPos, при этом в память файл не загружался. Вопрос: существует ли такой же способ записи в файл? Открыл в WinHEX этот же гигабайтный, заменил в конце файла цифру, нажал сохранить, операция выполнилась мгновенно, без перезаписи всего файла. Проверил сохранение переоткрытием файла.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 00:42 07-10-2010
    LOKKY009

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    НУ ЗДРАВСТВУЙ МИР !! ВКОТОРЫЙ РАЗ СКАЖУ Я  
    сегодне вам будет представленно то что я задолбался искать в интернете но таки нашел  
    речь пойдет а записи и чтении из порта в порт !  
    Насколько вам известно сраная хрюша да и темпаче виста  недадут вам этого сделать напрямую да и на кривую тож не оченьто дают  
    Для этого нам нужно заглянуть на сайт разработчика чудо дллок  кому будет интересно там и сорцы лежат  и ебсественно скачать архив с 1м файлом  inpout32.dll остальное шняга она нам не нужна...
    ===========================================================
    сайт разработчика
    http://logix4u.net/Legacy_Ports/Parallel_Port/Inpout32.dll_for_Windows_98/2000/NT/XP.html
    ===========================================================
    работать с этой дллкой может даж ребенок тк там всего 2 функциии (остальные см в описании ) прочесть и записать  
     
    ==========================================================
    пример для работы с лпт портом  
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #EndRegion
    #include <GUIConstants.au3>
    #include <string.au3>
    $op = DllOpen("inpout32.dll")
    Opt("GUIOnEventMode", 1)
    Global $STOP = True
    global $portdata = 888
    Global $cont_data = 890
    $DATA=0
    $FORM_MAIN = GUICreate("ПОРТ", 400, 160, 10, 10, -1, 4)
    WinSetOnTop ( "ПОРТ", "", 1 )
    GUISetOnEvent($GUI_EVENT_CLOSE, "WindowCloseClicked") ; <<<переход на  функцию  закрытия окна
    GUICtrlCreateLabel("Порт = 888 или 378h",10,20,110,20)
    GUICtrlCreateLabel("Данные = ",125,20,80,20)
    $data1 = GUICtrlCreateLabel( "", 180,20, 70, 20)
    GUICtrlCreateLabel("Контроль = 890 или 37Ah",10,45,135,20)
    $data2 = GUICtrlCreateLabel( "", 150,45, 70, 20)
    GUICtrlCreateLabel("Порт = 888 или 378h",10,65,110,20)
    $data_in = GUICtrlCreateInput("",125,63,40,20)
    GUICtrlCreateButton("ok",170,63,40,20)
    GUICtrlSetOnEvent(-1,"verndat1")
    GUICtrlCreateButton("СТРОБ",170,83,80,20)
    GUICtrlSetOnEvent(-1,"STROBS")
     
    GUISetState(@SW_SHOW, $FORM_MAIN)
    Do
    GUISetOnEvent($GUI_EVENT_CLOSE, "WindowCloseClicked")
    Update()
    Sleep(100)
    Until $STOP = False
    While (1)
    Update()
    WEnd
    Func WindowCloseClicked()
    DllClose($op)
    Exit
    EndFunc
    Func Update()
    vizov($portdata)
    GUICtrlSetData ($data1,$DATA)
    vizov($cont_data)
    GUICtrlSetData ($data2,$DATA)
    EndFunc
    ;~ ===ПОЛУЧЕНИЕ ВВЕДЕННЫХ ДАННЫХ +ЗАШИТА ОТ ДИБИЛА =======
    Func verndat1()
    $data_in2 = GUICtrlRead ( $data_in , 0 )
    if $data_in2 = "" Then
    MsgBox(0,"ОШИБКА","ДАННЫХ НЕТ")
    Update()
    Else
    if $data_in2  < 256  Then
    AZP_V_PORT($portdata,$data_in2)
    Else
    MsgBox(0,"ОШИБКА","МАКСИМАЛЬНО ДОПУСТИМОЕ ЧИСЛО 255")
    Update()
    EndIf
    EndIf
    Update()
    EndFunc
    ;========ОТПРАВКА СТРОБА===================================
     
    FUNC STROBS()
    $D6 = 205
    AZP_V_PORT($cont_data,$D6) ;отправка СТРОБА
    Sleep(50)
    AZP_V_PORT($cont_data,204) ;возврат на исходную
    EndFunc
    ;~=======================================================
    ;~ ================== ЧТЕНИЕ ИЗ ПОРТА ========================
    FUNC vizov($d3)
    $result = DllCall($op, "short", "Inp32", "short",$d3)
    $DATA = $result[0]
    EndFunc
    ;~========================================================
    ;~===================== ЗАПИСЬ В ПОРТ========================
    Func AZP_V_PORT($D4,$D5);ГДЕ $D4 ПОРТ  $D5 ДАННЫЕ
    DllCall($op, "short", "Out32", "short",$D4, "short",$D5)
    EndFunc
    ;~===========================================================
    ИСПОЛЬЗОВАНИЕ В КОМЕРЧИСКИХ ЦЕЛЯХ МОЖЕТ БЫТЬ НАКАЗУЕМО РЕЛЬСОМ ПО ИЛИ В    
    ;============================================================

    Всего записей: 1 | Зарегистр. 07-10-2010 | Отправлено: 11:22 07-10-2010 | Исправлено: LOKKY009, 11:26 07-10-2010
    gregaz



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

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 16:37 09-10-2010 | Исправлено: gregaz, 18:14 09-10-2010
    AZJIO



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

    Код:
    #include <File.au3>
    #include <Constants.au3>
     
    $sFileName = "D:\Фильмы\name.AVI"
    $hFile=FileOpen($sFileName,0)
    FileSetPos($hFile,1169905870,$FILE_begin)
    $sFragment = FileRead($hFile)
    MsgBox(0,"$sFragment",$sFragment)
    FileClose($hFile)
     
    _ReplaceStringInFile($sFileName,"-DEV","-DiV")
     
    $hFile=FileOpen($sFileName,0)
    FileSetPos($hFile,1169905870,$FILE_begin)
    MsgBox(0, "", "Позиция чтения: " & FileGetPos($hFile) & @CRLF & "Данные файла: " & @CRLF & FileRead($hFile))
    FileClose($hFile)

    Я всё равно от этой функции не ждал эффекта, так как посмотрел её содержимое и там используются те же FileRead, FileWrite да ещё с разбором файла построчно в массив. А мой пример с _ReplaceStringInFile выдал ошибку памяти "Error allocating memory". Мне хотелось бы сделать что-то подобное "патч бинарников", к примеру iso, чтобы не распаковывая и не открывая в память выполнить замену по Offset или по поиск.замена данных.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:37 09-10-2010 | Исправлено: AZJIO, 17:43 09-10-2010
    NIKZZZZ



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

    Цитата:
    чтобы не распаковывая и не открывая в память выполнить замену по Offset или по поиск.замена данных.

    Так пользуй WinApi функции, для бинарников оптимально.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:51 09-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    А что за функция?
     
    Кто знает как скрыть элемент в ListView? Вот моя попытка:  
    If ControlListView($Gui, '', 'SysListView321', 'GetText', $i, 1)='p-' Then GUICtrlSetState($aIPPP[$i][0], 32)
    или так
    If $aIPPP[$i][2]='p-' Then GUICtrlSetState($aIPPP[$i][0], 32)
    Но скрыть получается только весь ListView как элемент, а не элементы в нём.
     
    Пока решил проблему сортировкой GUICtrlRegisterListViewSort

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 20:18 10-10-2010 | Исправлено: AZJIO, 22:08 10-10-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 20:18 10-10-2010
    Цитата:
    как скрыть элемент в ListView?

    А зачем, почему его просто не удалить, или опусташить?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:31 10-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот утилитка Connection (обновлено 3 раза)
    По небольшому количеству элементов можно пересоздать ListView, но я пока ограничился сортировкой. Мне важно чтоб выделенные цветом итемы скучковались в видимой области, чтоб не прокручивать длинный список. Я подумал не плохо было бы комутировать скрыть/показать, а не удалить/пересоздать.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 00:51 11-10-2010 | Исправлено: AZJIO, 06:56 12-10-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO
    Нет, скрыть элемент в ListView так просто нельзя, только удаление/очищение.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:57 11-10-2010
    Zloy_Gelud



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

    Не подскажите, как изменить указанный цвета в объекте Tab?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 14:26 11-10-2010
    NIKZZZZ



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

    Цитата:
    А что за функция?  

    _WinAPI_CreateFile, _WinAPI_ReadFile  и т.п.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:49 11-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Такое решение пойдёт?

    Код:
    GUICreate('Спрятать вкладки',310,155)
    GUISetBkColor (0xFF0000)
     
    GUICtrlCreateTab (0,0, 270,180,0x0100+0x0002+0x0004)
     
    $tab0=GUICtrlCreateTabitem ("tab0")
    GUICtrlCreateLabel('', 0, 0, 270, 165)
    GUICtrlSetState(-1, 128)  
    GUICtrlSetBkColor (-1, 0xFF0000 )
     
    $xz=GUICtrlCreateButton ("X", 285,5,21,21,0x0040)
    $vk2=GUICtrlCreateButton ("vk2", 40,10,29,21,0x0040)
    GUICtrlCreateButton ("vk1", 10,10,29,21)
    GUICtrlSetState(-1, 128)  
     
    $tab1=GUICtrlCreateTabitem ("tab0")
    GUICtrlCreateLabel('', 0, 0, 270, 165)
    GUICtrlSetState(-1, 128)  
    GUICtrlSetBkColor (-1, 0x00FF00 )
     
    $vk1=GUICtrlCreateButton ("vk1", 10,10,29,21,0x0040)
    GUICtrlCreateButton ("vk2", 40,10,29,21)
    GUICtrlSetState(-1, 128)  
     
    GUICtrlCreateTabitem ("")   ; конец вкладок
    GUISetState ()
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg =$vk2
                GUICtrlSetState($tab1,16)
                GUISetBkColor (0x00FF00)
            Case $msg =$vk1
                GUICtrlSetState($tab0,16)
                GUISetBkColor (0xFF0000)
            Case $msg = -3 Or $msg = $xz
                ExitLoop
        EndSelect
    WEnd
     
     
    ______________________
    О, как раз тема на autoit-script.ru по коннекту...
    Добавил себе закрытие порта TCPCloseSocket($iSocket), а то иконка ftp-сервера подключения меняет статус пока до конца списка не проверит.
    Немного удивляет, что некоторые ip конектятся до 15 сек, хотя время пинга установлено 250мс, а время коннекта по умолчанию 100 - Opt("TCPTimeout", 100) - на офсайте пишут это баг и будет исправлен.
    Обновил версию "Connection" на 4 поста выше, или скомпилированный EXE с исходником.
    Добавил генерацию списка, открытие любого списка, drag-and-drop, статистику.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 15:34 11-10-2010 | Исправлено: AZJIO, 07:22 12-10-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли сделать ГУИ прозрачным кроме объектов Label?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 16:40 12-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Тоже хотелось бы найти такую возможность

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:37 12-10-2010
    asdf8

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

    Цитата:
    Тоже хотелось бы найти такую возможность

     
    Можно поискать в шапке :
    Цитата:
    Пример отображения только элементов GUI (без самой оболочки)

     

    Всего записей: 92 | Зарегистр. 06-05-2007 | Отправлено: 18:22 12-10-2010
    Zloy_Gelud



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

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 18:51 12-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asdf8
    Примеры есть (он же на офсайте), но как всегда в них что-то не доделано или замудрёно. Чтоб уж до конца доделать вот пример ProgAndy переделал. По легче поддаётся редактированию:

    Код:
    #include <GUIConstants.au3>
    #include <Constants.au3>
    #include <WindowsConstants.au3>
    #include <WINAPI.au3>
     
    $gui = GUICreate("trans", 300, 230, -1, -1, -1, $WS_EX_LAYERED)
    _WinAPI_SetLayeredWindowAttributes($gui, 0x010101)
    $lg=GUICtrlCreateLabel("За этот текст можно тащить GUI", 0, 0, 200, 17, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, 0xACCDEF)
    GUICtrlSetState(-1, 32) ;скрыть 32
    $checkTrans = GUICtrlCreateCheckbox("Цвет прозрачности 0xABCDEF или 0x010101", 10, 30, 280, 17)
    GUICtrlSetBkColor(-1, 0xACCDEF)
    $checkBorder = GUICtrlCreateCheckbox("POPUP-стиль", 10, 50)
    $x= GUICtrlCreateButton("x", 280, 2, 18, 20)
    GUICtrlSetState(-1, 32)
     
    $layButt = GUICtrlCreateButton("Сообщение", 110, 80, 80)
    GUISetBkColor(0xABCDEF)
     
    GUICtrlCreateLabel("Прозрачность GUI", 10, 150)
    $slidTrans = GUICtrlCreateSlider(10, 170, 200, 30)
    GUICtrlSetBkColor(-1, 0xABCDEF)
    GUICtrlSetLimit($slidTrans, 255, 0)
    GUICtrlSetData(-1, 255)
     
    GUISetState()
     
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = -3 Or $msg =  $x
                Exit
     
            Case $msg = $layButt
                Dim $transcolor, $alpha
                $info = _WinAPI_GetLayeredWindowAttributes($gui, $transcolor, $alpha)
                MsgBox(0, 'Многослойный GUI', "Информация об окне"& @CRLF & _
                        "Цвет прозрачности: " & $transcolor & @CRLF & _
                        "Глубина прозрачности: " & $alpha & @CRLF & _
                        "LWA_COLORKEY: " & (BitAND($info, $LWA_COLORKEY) = $LWA_COLORKEY) & @CRLF & _
                        "LWA_ALPHA: " & (BitAND($info, $LWA_ALPHA) = $LWA_ALPHA))
     
            Case $msg = $checkTrans Or $msg = $slidTrans
                If BitAND(GUICtrlRead($checkTrans), $GUI_CHECKED) = $GUI_CHECKED Then
                    _WinAPI_SetLayeredWindowAttributes($gui, 0xABCDEF, GUICtrlRead($slidTrans))
                Else
                    _WinAPI_SetLayeredWindowAttributes($gui, 0x010101, GUICtrlRead($slidTrans))
                EndIf
     
            Case $msg = $checkBorder
                If BitAND(GUICtrlRead($checkBorder), $GUI_CHECKED) = $GUI_CHECKED Then
                    GUISetStyle($WS_POPUP, -1, $gui)
                    GUICtrlSetState($x, 16)
                    GUICtrlSetState($lg, 16)
                Else
                    GUISetStyle($GUI_SS_DEFAULT_GUI, -1, $gui)
                    GUICtrlSetState($x, 32)
                    GUICtrlSetState($lg, 32)
                EndIf
        EndSelect
    WEnd

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 19:30 12-10-2010 | Исправлено: AZJIO, 21:08 12-10-2010
    asdf8

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Не совсем понял, что-же надо?
     
    Если надо на полностью прозрачной форме получить непрозрачный текст,
    тогда попробуй так:
     

    Код:
     
    _textOSD('This the OSD',5,32,700,"Tahoma",0xFF0080)
    Sleep(3000)
    _textOSD('')
     
    Func _textOSD($sString, $iPos = -1, $iSize = 26, $iWeight = 600, $sFontName = "Tahoma", $Color = 0x00FF00)
        ;$iPos = 1 | 2 | 3
        ;$iPos = 4 | 5 | 6
        ;$iPos = 7 | 8 | 9
        Local $isSize, $hGuiSwitch, $dll, $hMain, $hLabel, $iStyle, $iHW
        Global $hMain_OSD, $hLabel_OSD
        If $sString='' Then
            If WinExists($hMain_OSD) Then
                $hGuiSwitch = GUISwitch($hMain_OSD)
                GUIDelete($hMain_OSD)
                GUISwitch($hGuiSwitch)
                Return
            EndIf
        Else
            If $iPos = -1 Then
                $hGuiSwitch = GUISwitch($hMain_OSD)
                GUICtrlSetData($hLabel_OSD,$sString)
                GUISwitch($hGuiSwitch)
            Else
                $hMain = GUICreate("", 0, 0, 0, 0, BitOR(0x80000000, 0x20000000), BitOR(0x00000080, 0x00000020))
                $hGuiSwitch = GUISwitch($hMain)
                GUISetFont($iSize, $iWeight, -1, $sFontName, $hMain)
                $hLabel = GUICtrlCreateLabel($sString, 0, 0)
                $isSize = ControlGetPos($hMain, "", $hLabel)
                GUIDelete($hMain)
                
                Switch $iPos
                    Case 1
                        $iHW=30
                        $iStyle=0x0000
                    Case 2
                        $iHW=30
                        $iStyle=0x01
                    Case 3
                        $iHW=30
                        $iStyle=0x0002
                    Case 4
                        $iHW=@DesktopHeight/2-$isSize[3]/2
                        $iStyle=0x0000
                    Case 5
                        $iHW=@DesktopHeight/2-$isSize[3]/2
                        $iStyle=0x01
                    Case 6
                        $iHW=@DesktopHeight/2-$isSize[3]/2
                        $iStyle=0x0002
                    Case 7
                        $iHW=@DesktopHeight-$isSize[3]-40
                        $iStyle=0x0000
                    Case 8
                        $iHW=@DesktopHeight-$isSize[3]-40
                        $iStyle=0x01
                    Case 9
                        $iHW=@DesktopHeight-$isSize[3]-40
                        $iStyle=0x0002
                    Case Else
                        $iHW=@DesktopHeight/2-$isSize[3]/2
                        $iStyle=0x01
                EndSwitch
                
                $hMain_OSD = GUICreate("", @DesktopWidth, $isSize[3]+4, 0, $iHW, 0x80000000, BitOR(0x00000080, 0x00000008, 0x00080000))
                GUISwitch($hMain_OSD)
                $hLabel_OSD = GUICtrlCreateLabel($sString, 20, 0, @DesktopWidth-40, $isSize[3]+4, $iStyle)
                GUICtrlSetColor($hLabel_OSD, $Color)
                GUICtrlSetFont($hLabel_OSD, $iSize, $iWeight, -1, $sFontName)
                GUISetBkColor(0xABCDEF)
                GUISetState(@SW_SHOW, $hMain_OSD)
                $dll = DllOpen("user32.dll")
                DllCall($dll, "bool", "SetLayeredWindowAttributes", "hwnd", $hMain_OSD, "dword", 15715755, "byte", 255, "dword", 0x03)
                DllClose($dll)
                GUISwitch($hGuiSwitch)
            EndIf
        EndIf
    EndFunc   ;==>_textOSD
     
     

    Всего записей: 92 | Зарегистр. 06-05-2007 | Отправлено: 00:42 13-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asdf8
    Полностью прозрачная форма есть в предыдущем примере. Кроме этого там есть стили с окном и без окна, но с перетаскиваемым лейблом и простейшая функция, которая просто указывает цвет, который делать прозрачным. Больше и ничего не надо пока.  Было бы ещё удобно указать координаты области, которую делать прозрачной. Но и это решаемо вставкой фонового лейбла с правильным цветом.
     
    Если кому интересно - диалог About - в архиве 4 примера с вкладками и авто-прокруткой текста.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 07:00 13-10-2010 | Исправлено: AZJIO, 07:02 13-10-2010
    crotoff

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите, можно ли написать скрипт, который бы работал в фоновом режиме, не забирая на себя  фокус? мне нужно обработать несколько тысяч изображений программой, не поддерживающей пакетный режим. С чего начать? какие разделы справки изучить?  
     
    Добавлено:
    Или чтоб не мучаться - может кто накорябает скрипт для обработки произвольного файла с заданным именем, а я этот участок кода растиражирую, меняя наменования файлов.
    Программа SAR если что  
     1) открыть C:\Capture\1.png
     2) выбрать в меню Blur/sharpen "poisson sharpener"
     4) Ok (изображение пошарпится)
     5) сохранить результат File "save as" C:\Capture\1-1.png
     6) Ok (изображение сохранится)
     

    Всего записей: 961 | Зарегистр. 17-04-2007 | Отправлено: 11:49 13-10-2010 | Исправлено: crotoff, 11:55 13-10-2010
    frb_noname

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Через скрипт Autoit заношу данные в БД SQLite на русском языке. ОС-WinXP
    Когда вытягиваю данные из БД в линуксе - отображаются кракозяблы. (Тоже самое, если открыть в Винде базу руками)
    Подскажите как правильно занести и потом вытянуть данные из БД, чтобы они были читабельными.

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 14:52 13-10-2010 | Исправлено: frb_noname, 15:08 13-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    crotoff
    Долго я думал чтоб понять, что нужно... Значит скрипт автокликер? В фоновом режиме легко работать с кнопками, инпутами, но не с элементами в списке / дереве. Похоже нужно делать скрипт с таким алгоритмом:
    1. Установить координаты окна (чтоб попадать кликами мышью)
    2. Записать макрос кликов мыши (есь такой инструмент в полной версии SciTE)
    3. Продумать последовательность выполнения (не пойму как открыть новый файл, может есть ком-строка у SAR?)
    А ещё есть AutoClickExtreme, может им тебе будет легче решить эту задачу?
     
    frb_noname
    Попробуй этот пример

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 20:13 13-10-2010
    crotoff

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    вобщем попытался записать ходы макрогенератором. Вот что получилось:
    Подробнее...
     
    Скрипт работает через раз, видимо SAR запоминает последнюю активную папку, а если закрыть и снова открыть - спотыкается. Как ему скормить имя и путь файла на входе и выходе?
    и как бы теперь избавиться от указания размера в названии окна?  По идентификатору или ещё как?
     
    Добавлено:
    Автокликер установил - но он открывает файло через графическую форму, привязываясь к координатам, а мне надо менять наименования файлов в диалогах открытия и сохранения

    Всего записей: 961 | Зарегистр. 17-04-2007 | Отправлено: 21:27 13-10-2010 | Исправлено: crotoff, 23:35 13-10-2010
    beseda2408

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята подскажите пожалуйста следующее.
    Необходимо настроить, чтобы отправлялись e-mail в пределах локальной сети. Я пользуюсь стандартной функцией в которую подставляю свои данные. Но функция постоянно возвращает ошибку 50 (Cannot open SMTP session).
    До этого пользовался другими программами, которые отправляют почту, все отлично работало, письма ходили.
    В моем случае сервер не требует авторизации.

    Код:
     
    #include <INet.au3>
     
    $s_SmtpServer = "10.3.1.4"
    $s_FromName = "FromName"
    $s_FromAddress = "source@mydomain.ru"
    $s_ToAddress = "destination@mydomain.ru"
    $s_Subject = "Subject"
    Dim $as_Body[2]
    $as_Body[0] = "Testing the new email udf"
    $as_Body[1] = "Second Line"
    $Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
    $err = @error
    If $Response = 1 Then
        MsgBox(0, "Success!", "Mail sent")
    Else
        MsgBox(0, "Error!", "Mail failed with error code " & $err)
    EndIf
     

    Всего записей: 5 | Зарегистр. 12-12-2008 | Отправлено: 05:22 14-10-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как убрать/скрыть  header(шапку) из объекта ListView?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 09:45 14-10-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud,
    Цитата:
    Как убрать/скрыть  header(шапку) из объекта ListView?
    Использовать стиль $LVS_NOCOLUMNHEADER.
     

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 10:26 14-10-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles -- спасибо. Как то сам не додумался в стили посмотреть.
     
    Добавлено:
    madmasles -- а не подскажешь как получить тип объекта (комбобокс, инпут и т.д.) по его ID или дескриптору?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 10:38 14-10-2010 | Исправлено: Zloy_Gelud, 11:30 14-10-2010
    frb_noname

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

    Цитата:
    crotoff

    Пример попробую, хотя судя по коду, у меня почти то же самое..
     
    Еще вопрос возник. Есть элемент list с определенным количеством записей, которые формируются из БД SQLite. При изменении конкретной записи, для отображение ее в списке, делаю повторно формирование ВСЕГО списка из БД.  
     
    Как реализовать обновление ТОЛЬКО ОДНОЙ записи списка (активной) чтобы сэкономить время ?

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 12:08 14-10-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    frb_noname,
    Посмотрите в справке функции _GUICtrlListBox_GetCurSel(), _GUICtrlListBox_ReplaceString().

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:23 14-10-2010
    AZJIO



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

    Цитата:
    Есть элемент list
    В нём нельзя изменять обновлением, только очистка и вставка. Для обновления используй тип ListView.
    Попробовал UDF работает.  
     
    Кому интересно WM-Сообщения Windows - сделал 62 примера использования. (добавил WM_DROPFILES, WM_TIMER, WM_DEVICECHANGE, WM_DISPLAYCHANGE и др., обновил WM_GETMINMAXINFO, WM_COMMAND)

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 12:33 14-10-2010 | Исправлено: AZJIO, 18:37 19-10-2010
    crotoff

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всё, добил скрипт
     
    Подробнее...
     
    осталось теперь оптимизировать на предмет скорости - может кто подскажет как подсократить лишние клики, вызовы и ожидания?

    Всего записей: 961 | Зарегистр. 17-04-2007 | Отправлено: 12:44 14-10-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как получить индекс выбранного пункта объекта List при клике на нем?
    Извратился таким образом:

    Код:
    Case $LBN_SELCHANGE
        Local $nID = _GUICtrlListBox_GetCurSel($hWndListBox)
        if $nID <> -1 Then
            $nID = _GUICtrlListBox_GetItemData($hWndListBox, $nID)
            _DB_Display($nID)
        EndIf

    Не думаю что это хороший вариант. Может есть другой способ получать индекс, например, из структуры?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 13:53 14-10-2010 | Исправлено: Zloy_Gelud, 14:12 14-10-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли в объект Input устанавливать маску вводимых символов? Например, только числа или только выражение '####.####', где # - числа.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 14:03 15-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Возможно. обсуждалось. Делай проверку на принадлежность целым числам IsInt.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 14:09 15-10-2010
    aljabr

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравия желаю!
    Можно ли без знания скриптования переправлять вложения с gmail на другую бесплатную почту?
    Тут вроде есть скрипт, но я не знаю как все это настроить...
    http://www.autoitscript.com/forum/index.php?showtopic=23860
    Мог бы кто-нибудь помочь?

    Всего записей: 611 | Зарегистр. 19-09-2009 | Отправлено: 16:11 15-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто нибудь разгадайте загадку, уже час бьюсь

    Код:
    $ee=0x04000500
    $x=BinaryMid($ee, 1, 2)
    $y=BinaryMid($ee, 3, 2)
    MsgBox(0, 'Сообщение', 'x='&$x&@CRLF&'y='&$y)

    Нужно чтоб получилось 0x0400 и 0x0500, которые с помощью Dec() конвертируются в 1024 и 1280. Другое число беру, работает нормально, это же никак не хочет возвращать, что только не вводил.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:48 15-10-2010
    Zloy_Gelud



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

    Код:
    $ee='0x04000500'
    $x=StringTrimLeft(BinaryMid($ee, 1, 2), 2)
    $y=StringTrimLeft(BinaryMid($ee, 3, 2), 2)
    MsgBox(0, 'Сообщение', 'x='&Dec($x)&@CRLF&'y='&Dec($y))

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 18:22 15-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Если в текст переделать, то я знаю что работает. Но $lParam не возвращается как текст, а String(0x04000500) у меня не переводит это число в текст. Так что пока не подходит.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 18:27 15-10-2010
    Zloy_Gelud



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

    Код:
    $ee=Hex(0x04000500)
    $x=StringMid($ee, 1, 4)
    $y=StringMid($ee, 5, 8)
    MsgBox(0, 'Сообщение', 'x='&Dec($x)&@CRLF&'y='&Dec($y))

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 19:29 15-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Работает.
     
    Хотел попробовать реализовать проверку ввода чисел в инпут используя сообщения Windows - WM_COMMAND, WM_KEYDOWN, например при активировании инпута срабатывает WM_COMMAND и регистрирует проверку нажатых клавиш - WM_KEYDOWN, то есть буквы совсем не позволит вводить. Но Gui с WM_KEYDOWN как-то странно работает, как только добавляю элемен интерфейса (кнопку или инпут), то перестаёт работать вызов WM_KEYDOWN. WM-Сообщения Windows - обновил 2 раза (62шт).

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 06:58 16-10-2010 | Исправлено: AZJIO, 18:36 19-10-2010
    coolpunk



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как безопасно вызвать метод или получить свойство у объекта, не вызвав ошибки?
    С другими тэгами хватало проверки как в начале кода, а с этим изредка выходит ошибка.
    Пробовал получать с помощью _IEPropertyGet, но эффект тот же. Как еще можно проверить объект до использования? Существуют ли в AutoIt конструкции try..except?
     

    Код:
        $oLIs = _IETagNameGetCollection ($oIE, "li")
        If @error <> $_IEStatus_Success Then
            Return
        EndIf
        For $oLI In $oLIs
             If StringInStr($oLI.title, "текст") Then
                                ....
            EndIf
        Next
     

     
    ==> The requested action with this object has failed.:
    If StringInStr($oLI.title, "????? ?? ??????????? ????? ? ?????????") Then
    If StringInStr($oLI.title^ ERROR

    Всего записей: 543 | Зарегистр. 16-04-2004 | Отправлено: 07:20 22-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Почему Sleep(10) меньше 10 не работает? Пример

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 18:38 23-10-2010 | Исправлено: AZJIO, 18:41 23-10-2010
    asdf8

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня тоже не работает Sleep меньше 10 :
     

    Код:
     
    For $i=1 To 11
        $begin = TimerInit()
        For $j=1 To 100
            Sleep($i)
        Next
        $dif = TimerDiff($begin)
        ConsoleWrite('-> dif = ' & $dif & '   Sleep = ' & $i & ' x 100 mS' & @CRLF)
    Next
     
    $begin = TimerInit()
    For $i=1 To 100
        
    Next
    $dif = TimerDiff($begin)
     
    ConsoleWrite('-> dif = ' & $dif & @CRLF)
     

    Всего записей: 92 | Зарегистр. 06-05-2007 | Отправлено: 00:00 24-10-2010
    zabi757

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста скрипт для нажатие одной и той же клавиши в течении большого промежутка вермени ( около 10 часов). Заранее спасибо.
     
    P.S
    Если можно, то ответ на мыло pk67.san@yandex.ru

    Всего записей: 1 | Зарегистр. 25-10-2010 | Отправлено: 04:36 25-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил list_var_funk.au3, теперь быстрее работает и несколько кнопок добавил.  
    Обновил ещё пару раз, добавил drag-and-drop для каталогов, теперь можно получить список функций скриптов в каталоге, включая подкаталоги. И мелкие исправления.  
     
    zabi757
    Может не стоит мучится со скриптами, проще взять какой нибудь готовый автокликер. Поищи в гугле "Mofiki's Autoclicker Premium v1.0.0.3" и "AutoClickExtreme".

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 23:12 25-10-2010 | Исправлено: AZJIO, 03:40 26-10-2010
    frb_noname

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Говорят (и сам чувствую ), что Autoit может ВСЕ !
    Возможно ли решение такой задачи средствами Autoit :
     
    Получить ip адрес машины, с которой на мой компьютер скопировали произвольный файл в определенную папку. Также получить фактическое время данного события.
     
    Буду благодарен даже просто за указанное направление, в котором можно искать решение задачи. Если, конечно нет уже готовой реализации

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 15:29 26-10-2010
    AZJIO



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

    Цитата:
    Получить ip адрес машины, с которой на мой компьютер скопировали произвольный файл в определенную папку
    Посмотреть лог сервера (или просто утилита для парсинга лога). Файл не содержит информацию о том кто его закачивал.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 16:32 26-10-2010
    RW4PIR



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    народ, вопрос есть
    (я нуб полный в этой проге, так частично объяснил мне Zloy_Gelud, но я кой что упустил)
     
    1. Как сделать цвет фона чёрным ?
     
    2. Как поставить и растянуть фоновую картинку ????

    Всего записей: 563 | Зарегистр. 16-03-2009 | Отправлено: 20:27 26-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RW4PIR
    В справке GUISetBkColor, GUICtrlSetBkColor. Картинку вставить сам не пробовал.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 22:11 26-10-2010
    RW4PIR



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO
    спс

    Всего записей: 563 | Зарегистр. 16-03-2009 | Отправлено: 22:40 26-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто знает, как развернуть окно на весь экран но не под панель задач, а до панели задач. При добавлении стиля $WS_MAXIMIZEBOX кнопи становятся спрятанными под панель задач. Можно указать параметры в WM_GETMINMAXINFO, но неизвестно какая будет ширина панели задач на другом компе.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 00:08 27-10-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 00:08 27-10-2010
    Цитата:
    как развернуть окно на весь экран но не под панель задач, а до панели задач

    Т.е поверх неё? $WS_EX_TOPMOST не пробовал?

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:30 27-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Нет не поверх, а как у всех приложений, чтоб упирались в панель задач а не поверх или под низ. Это при нажатии "максимизировать".  
    Туплю, у меня проблема появилась из-за WM_GETMINMAXINFO. Я добавил в list_var_funk.au3 при разворачивании ограничение по ширине, но при этом кнопки оказались недоступны. Добавил  
    DllStructSetData($tMINMAXINFO, "MaxSizeY", @DesktopHeight-40)  
    -40 это на панель задач. А добится чтоб это автоматически определялось непонятно как. Посмотри list_var_funk.au3 - первый мой пост на этой странице, попробуй максимизировать.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 00:37 27-10-2010 | Исправлено: AZJIO, 00:55 27-10-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 00:37 27-10-2010
    Цитата:
    -40 это на панель задач. А добится чтоб это автоматически определялось непонятно как

    Почему непонятно, панель задача тоже окно:
     

    Код:
    Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
     
        Local $aTaskBarPos = WinGetPos("[CLASS:Shell_TrayWnd]")
        ....
            DllStructSetData($tMINMAXINFO, "MaxSizeY", @DesktopHeight-$aTaskBarPos[3])
        ....
    EndFunc

     
    Добавлено:
    Хотя правильнее конечно будет так:
     

    Код:
    Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
     
        Local $aWorkArea = _WinAPI_GetWorkingArea()
     
        If $hWnd = $GUI Then
            Local $tMINMAXINFO = DllStructCreate("int;int;" & _
                    "int MaxSizeX; int MaxSizeY;" & _
                    "int MaxPositionX;int MaxPositionY;" & _
                    "int MinTrackSizeX; int MinTrackSizeY;" & _
                    "int MaxTrackSizeX; int MaxTrackSizeY", _
                    $lParam)
            DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 410) ; минимальные размеры окна
            DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 200)
            DllStructSetData($tMINMAXINFO, "MaxPositionX", $aWorkArea[0])
            DllStructSetData($tMINMAXINFO, "MaxPositionY", $aWorkArea[1])
            DllStructSetData($tMINMAXINFO, "MaxSizeX", 600) ; размеры развёрнутого состояния ( просто удали строку, чтоб игнорировать критерий)
            DllStructSetData($tMINMAXINFO, "MaxSizeY", $aWorkArea[3]-$aWorkArea[1])
        EndIf
    EndFunc
     
    Func _WinAPI_GetWorkingArea()
        Local Const $SPI_GETWORKAREA = 48
        Local $stRECT = DllStructCreate("long; long; long; long")
     
        Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0)
        If @error Then Return 0
        If $SPIRet[0] = 0 Then Return 0
     
        Local $sLeftArea = DllStructGetData($stRECT, 1)
        Local $sTopArea = DllStructGetData($stRECT, 2)
        Local $sRightArea = DllStructGetData($stRECT, 3)
        Local $sBottomArea = DllStructGetData($stRECT, 4)
     
        Local $aRet[4] = [$sLeftArea, $sTopArea, $sRightArea, $sBottomArea]
        Return $aRet
    EndFunc


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:43 27-10-2010 | Исправлено: ViSiToR, 01:53 27-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Спасибо, работает.
     
    Кстати обновил немного RegExp

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 13:59 27-10-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли динамическое добавление вкладок объекта Tab с кнопкой, привязанной к этой новой вкладке?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 14:44 28-10-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud 14:44 28-10-2010
    Цитата:
    Возможно ли динамическое добавление вкладок объекта Tab с кнопкой, привязанной к этой новой вкладке?

    Конечно.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 16:13 28-10-2010
    Sergey_Demchuk



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Может кто уже писал утилитку подобного рода.  
    Нужно изменить дату установки Windows на текущую.
    Сама информация находится в реестре по адресу
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion, параметр InstallDate
    Запись в HEX виде. Если перевести значение в десятичном формате, то полученная цифра будет количеством секунд, прошедших с 1 января 1970 года на момент инсталляции операционной системы.
    Надо значит вычислить в десятичном виде число секунд с 1 января 1970г. по текущий момент, перевести в шестнадцатеричный вид и занести в реестр. И это все скрыто. Может уже просто кто то делал.

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 11:35 29-10-2010
    ynbIpb



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

    Код:
    #Include <Date.au3>
    $sRegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ; заносим в переменную ветку реестра
    $iRegVal = RegRead ($sRegKey, "InstallDate") ; читаем значение параметра
    $sCurrTime = _Date_Time_SystemTimeToDateTimeStr (_Date_Time_GetSystemTime(), 1) ; определяем текущее время
    $iNewRegVal = _DateDiff("s", "1970/01/01 00:00:00", $sCurrTime) ; расчитываем новое значение
    msgbox (0, "", "Old value: " & $iRegVal & @CRLF & "New value: " & $iNewRegVal) ; отображаем оба

    как записать данные обратно думаю догадаетесь...
     
     
    --------------------
    Считывал старое значение чисто для демонстрации скрипта.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 14:46 29-10-2010 | Исправлено: ynbIpb, 15:47 29-10-2010
    Sergey_Demchuk



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ynbIpb
    Сенкс. А считывать из реестра то вообщем и не надо...главное занести

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 15:22 29-10-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как реализоватть на автоите такое, но чтоб только было внутри GUI?

     
    И проблемка с этим кодом. Попробуйте создать 4 или больше пустых вкладки и вернуться на 3. С нее почему пропадают контрлы.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 10:55 30-10-2010
    gregaz



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такой вариант подойдет  ?   Подробнее...

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 09:44 31-10-2010 | Исправлено: gregaz, 14:38 31-10-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gregaz
    74, 75 строка - глюк раскраски кода.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 10:59 31-10-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 11:59 31-10-2010
    Цитата:
    74, 75 строка - глюк раскраски кода

    Старая версия Au3ToPost, и лишние теги, видимо добавленные до раскраски.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 12:18 31-10-2010
    gregaz



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

    Цитата:
    Старая версия Au3ToPost, и лишние теги, видимо добавленные до раскраски

     
    Версию обновил , правда
    почему-то  табуляция теряется после раскраски

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 14:40 31-10-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gregaz -- не совсем, но спасибо за вариант.
    Ребят, очень нужна помощь или совет по второй части вопроса в этом посте.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 15:45 31-10-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В GUI есть элемент ListView, в нем куча строк, как сделать чтобы можно было выделить несколько строк и скопировать в буфер обмена? (желатьельно простым CTRL+C)
     
    выделяться выделяется а копироваться не хочет

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:25 01-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Это тоже что скопировать кнопку в буфер. Могу только предложить включить стиль выделения нескольких пунктов и по нажатию кнопки, заранее созданной происходит чтение текста пунктов и отправка в буфер.
     
    Zloy_Gelud
    Пробовал, не получилось.
     
    _____________________
    Сделал Launcher, предназначен для быстрого создания менюшки для CD,DVD-диска. Все настройки хранятся в ini, кнопки распределяются автоматически. Подробно читать здесь, там же скомпилированный файл.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 11:40 01-11-2010 | Исправлено: AZJIO, 19:29 02-11-2010
    MKN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Иногда при регистрации программ, в окнах ихних рег-форм, присутствуют номера, сгенерированные самой программой, в зависимости от ID машины.  
    Потом эти номера "участвуют" в дальнейшей регистрации программы (отсылаются производителю, называются по телефону и т.п.).  
    Но скопировать эти номера в буфер, из поля такой рег-формы не возможно ! Как будто функция копирования как то заблокирована.  
    Приходится вручную, глядя на цифирки, их записывать...  
     
    Есть ли в AutoIT какие пути обхода такой блокировки ? Это часто необходимо для автоматической регистрации ПО после установки с помощью скриптов AutoIT...

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 11:51 01-11-2010 | Исправлено: MKN, 11:56 01-11-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    включить стиль выделения нескольких пунктов и по нажатию кнопки, заранее созданной происходит чтение текста пунктов и отправка в буфер.
     
     
     
     
     
    я так тоже хотел, но по GUICtrlRead читается тока тот на котором курсор стоит....

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 11:54 01-11-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son,
    Попробуйте так, у меня работает: Читать дальше..
     
     
    Добавлено:
    MKN,
    А можно пример какой-нибудь такой программы.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:00 01-11-2010 | Исправлено: madmasles, 12:03 01-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Посмотри ControlListView, там есть GetSelected, текст из справки:
    Цитата:
    Если option равно 1, то строка будет содержать индексы всех выделенных граф, отделяемые символом |. Например, "0|3|4|10".

     
    MKN
    Думаю есть. Вместо имитации Ctrl+C (Send) попробовать использовать ControlSend.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 12:43 01-11-2010
    MKN



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

    Цитата:
    А можно пример какой-нибудь такой программы.

    Например,  Corel WinDVD 2010 (в Варезе есть моя перепаковка размером 35M)
     
    AZJIO

    Цитата:
    попробовать использовать ControlSend

    попробую... но скорее всего и это не поможет.

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 12:51 01-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN
    Я встречал, когда Ctrl+C не работает, а контекстное меню "Вставить" работает. Так что, проба решит дело, тем более это не сложно. Утилиткой Au3Info.exe получить данные элементов и проверить.
     
    А вот кто знает, почему у меня стиль плоских кнопок не работает $BS_FLAT?
    Вот я делал плеер когда-то Play.exe (525.5 КБ) в нём плоские цветные кнопки и нажимаются они быстро в отличии от цветных кнопок автоита. Как то же они делаются. UDF посмотрел, там тоже подобного нету.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 13:07 01-11-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN
    Цитата:
    Например,  Corel WinDVD 2010 (в Варезе есть моя перепаковка размером 35M)

    Не нашел.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 13:23 01-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 13:43 01-11-2010
    Цитата:
    Думаю есть. Вместо имитации Ctrl+C (Send) попробовать использовать ControlSend.

    Если я правильно понял, то там даже руками ничего не копируется (не выделяется?), т.ч никакие *Send не помогут.
    Либо ControlGetText, либо методом распознавания капчи (OCR).

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 13:30 01-11-2010
    MKN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=39070&start=580#14
     
    AZJIO

    Цитата:
    проба решит дело, тем более это не сложно

    Очевидные операции проверены в первую очередь. Главное, есть ведь контекстное меню с "Копировать", но толку с того никакого - не копируется ни по Ctrl C не из контекста. Соответственно ничего и не вставляется .
     
    Об окне данных минимум: Title - отсутсвует, Class - #32770
    Control Info : Class -  Internet Explorer_Server,   Instance 1
     
    ни кнопки, ни поля ввода не имеют никаких данных...
     
    ViSiToR

    Цитата:
    Либо ControlGetText, либо методом распознавания капчи (OCR)

    Это не капча (к чему тогда в контексте иметь копировать ?)

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 13:54 01-11-2010 | Исправлено: MKN, 13:56 01-11-2010
    gregaz



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles 15:00 01-11-2010

    Цитата:
    Kar1son,  
    Попробуйте так, у меня работает

     
    А может вместо преобразования в цикле  использовать : _ArrayToString  ?
     
     
     

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 14:31 01-11-2010 | Исправлено: gregaz, 13:08 02-11-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN,
    Интересное окно. У меня кроме Handle самого окна и Handle контрола CLASS:Internet Explorer_Server; INSTANCE:1 получить больше ничего не получилось.
     
    gregaz
    Цитата:
    А может вместо преобразования в цикле  использовать : _ArrayToString  ?
    Не понял, а где там можно использовать _ArrayToString()?
     

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 19:16 01-11-2010
    gregaz



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

    Цитата:
    Не понял, а где там можно использовать _ArrayToString()?

    Приношу извинения, ошибся.

    Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 13:09 02-11-2010 | Исправлено: gregaz, 13:39 02-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как сделать прозрачную кнопку, чтоб в качестве фона можно было использовать картинку.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 21:44 02-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 22:44 02-11-2010
    Цитата:
    Как сделать прозрачную кнопку, чтоб в качестве фона можно было использовать картинку.

    Метод #1:

    Код:
    #include <GUIConstantsEx.au3>
    #include <GUIImageList.au3>
    #include <GUIButton.au3>
     
    $hGUI   = GUICreate("Button With Icons + Text")
     
    $btn1   = _GUICtrlCreateButton("Button1", 10, 10, 90, 25, -1, -1, "shell32.dll", -6, $BUTTON_IMAGELIST_ALIGN_LEFT)
    $btn2   = _GUICtrlCreateButton("Button2", 10, 50, 90, 25, -1, -1, "shell32.dll", -21, $BUTTON_IMAGELIST_ALIGN_RIGHT)
    $btn3   = _GUICtrlCreateButton("Button3", 10, 90, 50, 50, -1, -1, "shell32.dll", -32, $BUTTON_IMAGELIST_ALIGN_TOP)
    $btn4   = _GUICtrlCreateButton("Button4", 10, 140, 50, 50, -1, -1, "shell32.dll", -14, $BUTTON_IMAGELIST_ALIGN_BOTTOM)
     
    GUISetState()
     
    While GUIGetMsg() <> $GUI_EVENT_CLOSE
    WEnd
     
    Exit
     
    Func _GUICtrlCreateButton($sText, $iLeft, $iTop, $iWidth = -1, $iHeight = -1, $nStyle = -1, $nExStyle = -1, $sIconFile = '', $nIconID = 0, $nAlign = -1)
        Local $nID = GUICtrlCreateButton($sText, $iLeft, $iTop, $iWidth, $iHeight, $nStyle, $nExStyle)
     
        If $sIconFile = '' Then
            Return $nID
        EndIf
     
        Local $hImgLst = _GUIImageList_Create(16, 16, 5, BitOr($ILC_MASK, $ILC_COLOR32), 0, 1)
        _GUIImageList_AddIcon($hImgLst, $sIconFile, $nIconID)
        _GUICtrlButton_SetImageList($nID, $hImgLst, $nAlign)
     
        Return $nID
    EndFunc

     
    Метод #2:

    Код:
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
     
    Global $Draw = False
    Global $aCurPos
     
    $hGUI = GUICreate("My GUI", 300, 200)
     
    $pic = GUICtrlCreatePic(@WindowsDir & "\Web\Wallpaper\Windows XP.jpg", 0, 0, 300, 200)
    GUICtrlSetState(-1, $GUI_DISABLE)
     
    $button = GUICtrlCreateLabel("Test", 100, 65, 100, 25, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
     
    GUICtrlCreateGroup("", -99, -99, 1, 1)
     
    GUISetState()
     
    FrameRect1(GUICtrlGetHandle($button), 0xFFFFFF)
     
    While 1
        $aCurPos = GUIGetCursorInfo()
     
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $button
                While $aCurPos[2] = 1
                    $aCurPos = GUIGetCursorInfo()
                    Sleep(10)
                WEnd
     
                If $aCurPos[4] = $button Then
                    MsgBox(0, "Info", "Button pressed", 0, $hGUI)
                EndIf
        EndSwitch
     
        If IsArray($aCurPos) Then
            If ($aCurPos[4] = $button) And ($Draw = False) Then
                $Draw = True
                GUICtrlSetFont($button, 10, 800)
                FrameRect1(GUICtrlGetHandle($button), 0x000000)
            ElseIf ($aCurPos[4] <> $button) And ($Draw = True) Then
                $Draw = False
                GUICtrlSetFont($button, Default, Default)
                FrameRect1(GUICtrlGetHandle($button), 0xFFFFFF)
            EndIf
        EndIf
    WEnd
     
    Func FrameRect1($hWnd, $sColor)
        Local $hDC = _WinAPI_GetDC($hWnd)
        Local $tRect = _WinAPI_GetClientRect($hWnd)
        Local $hBrush = _WinAPI_CreateSolidBrush($sColor)
     
        DllCall("user32.dll", "int", "FrameRect", "hwnd", $hDC, "ptr", DllStructGetPtr($tRect), "hwnd", $hBrush)
     
        _WinAPI_ReleaseDC($hWnd, $hDC)
        _WinAPI_DeleteObject($hBrush)
    EndFunc


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 21:57 02-11-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR,
    В Метод #2 GUICtrlCreateGroup("", -99, -99, 1, 1) зачем?
     

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:19 02-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles 23:19 02-11-2010
    Цитата:
    В Метод #2 GUICtrlCreateGroup("", -99, -99, 1, 1) зачем?

    Не знаю, видимо не нужен. Пример не мой, я только разместил...

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:30 02-11-2010 | Исправлено: ViSiToR, 22:31 02-11-2010
    AZJIO



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

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 23:38 02-11-2010 | Исправлено: AZJIO, 05:55 03-11-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    можно как то  изменить иконку к компилирующемуся экзешнику в тексте самого скрипта? в хелпе методы только путем ручного запуска au2exe и командной строки, а может есть какая команда(что-то типа icofile=myicon.ico)?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:48 03-11-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son,
    Цитата:
    можно как то  изменить иконку к компилирующемуся экзешнику в тексте самого скрипта?
    Почитайте здесь: FAQ по использованию ресурсов в AutoIt.
     

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 10:32 03-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    В принципе используй AutoIt3Wrapper с директивой #AutoIt3Wrapper_icon=icon.ico или вариант с ключом /ShowGui а в AutoIt3Wrapper.ini укажи иконку. Других вариантов пока не знаю.
     
    ViSiToR
    Немного неэкономичный скрипт, в цикле GUIGetCursorInfo() и условие постоянно крутит. Наверно можно через WM_NOTIFY сделать, для Button и ListView есть примеры, для Label нет. Как то использовать переключения стиля GUICtrlSetStyle($button,BitOR($SS_CENTER, $SS_CENTERIMAGE, $SS_SUNKEN))

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 10:40 03-11-2010
    SAOPP

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    [del]

    Всего записей: 1048 | Зарегистр. 28-11-2004 | Отправлено: 12:39 03-11-2010 | Исправлено: SAOPP, 12:53 03-11-2010
    kpuk



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Что надо включить в вин 2003 сервер чтобы отображались картинки установленные на кнопку через GUICtrlSetImage($Button2, "1c2.bmp")

    ----------
    Мой дед говорил ''делай добро и бросай его в воду,
    Оно не пропадёт, добром к тебе вернётся...''

    Дружественный хостинг. Мой выбор!

    Всего записей: 1099 | Зарегистр. 07-03-2004 | Отправлено: 13:11 04-11-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть форма, наложенная на ГУИ. В этой форме автоматически распределяются кнопки. По 5 кнопок в линию, если кнопок болшьше, то формируется вторая линия кнопок и т.д. Хотелось бы сделать ресайз ГУИ, следовательно, будет меняться и размер формы, и, следовательно, количество кнопок в линии увеличится при изменении размеров ГУИ (растягивании). Вот ка бы сделать, чтоб при растягивании ГУИ кнопки со второй линии перемещались в первую линию, т.е. перестраивались в зависимости от размера ГУИ.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 13:34 04-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kpuk
    А стиль для кнопки добавлен?
    $BS_BITMAP 0x0080 Button с изображением.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 15:38 04-11-2010 | Исправлено: AZJIO, 15:53 04-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 11:40 03-11-2010
    Цитата:
     Наверно можно через WM_NOTIFY сделать, для Button и ListView есть примеры, для Label нет.

    Для статичных элементов кажется используется WM_COMMAND.
    Но я бы сделал через UDF GUICtrlOnHover - Обработка событии при наведении мышки.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:43 04-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Посмотри в архиве (82кб) файл "Notepad++(in_root_AutoIt3)\Instrument_azjio\panel_function\panel_function.au3 или старую версию. Но если честно я хотел бы переделать это. Во первых там рассчёт идет в цикле, каждые 0.2 сек, а можно сделать через WM-сообщения, т.е. только во время ресайза или активации окна. Во вторых нужно добавить условие сравнения, если окно не изменилось то не делать перерассчёт. В третьих это уже в самой утилите, хотелось бы ListView вертикальным списком, так как появится возможность прокручивать длинный список без ограничения по количеству добавляемых образцов.
     
    ViSiToR

    Цитата:
    Для статичных элементов кажется используется WM_COMMAND.
    у меня при экспериментах WM_COMMAND срабатывал только во время клика на элементах. А WM_NOTIFY (новый пример вытащил из UDF _GUICtrlButton_Create) срабатывает при наведении и самое главное компактный код. GUICtrlOnHover - да, я давно уже знаю и обновляю, думал там на WM-сообщения сделано, хотел что нибудь вытащить, а там у тебя на CALLBACK. Вобщем то тоже сравнительно компактно.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 15:53 04-11-2010 | Исправлено: AZJIO, 16:09 04-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как оптимизировать эффект звёздного неба? Процессор нагружает на 50%.
     
    Попробовал сделать вариант используя GDIP.au3, но не получается удалять созданные объекты, а всправке только ссылка на MSDN.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 18:18 04-11-2010 | Исправлено: AZJIO, 20:51 04-11-2010
    kpuk



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO
    Угу добавлен, на xp на котором писал отображает нормально, а когда на сервер 2003 переношу (собсно там оно и нужно) - там нет картинки(
    Вот я и собственно подумал что наверное какой-то элемент фейса надо включить, но т.к. всё же напрямую связано с автоитом, то пишу в этой теме!

    ----------
    Мой дед говорил ''делай добро и бросай его в воду,
    Оно не пропадёт, добром к тебе вернётся...''

    Дружественный хостинг. Мой выбор!

    Всего записей: 1099 | Зарегистр. 07-03-2004 | Отправлено: 22:38 04-11-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в хелпе пример для функции INetSmtpMail

    Код:
     
    #include <INet.au3>
     
    $s_SmtpServer = "mysmtpserver.com.au"
    $s_FromName = "My Name"
    $s_FromAddress = "From eMail Address"
    $s_ToAddress = "To eMail Address"
    $s_Subject = "My Test UDF"
    Dim $as_Body[2]
    $as_Body[0] = "Testing the new email udf"
    $as_Body[1] = "Second Line"
    $Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
    $err = @error
    If $Response = 1 Then
        MsgBox(0, "Success!", "Mail sent")
    Else
        MsgBox(0, "Error!", "Mail failed with error code " & $err)
    EndIf
     
     

    пробовал smtp.google.com и smtp.mail.ru выскакивает ошибка с кодом 50.
    как отправить письмо из скрипта?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 13:03 06-11-2010 | Исправлено: Kar1son, 21:14 06-11-2010
    MKN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Необходимо из скрипта запустить программу App.exe, местонахождение которой, берётся из реестра

    Код:
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\App
    "Path"="C:\\Program Files\\App"
    @="C:\\Program Files\\App\\App.exe"

    Подскажите пожалуйста, как это реализовать ?

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 14:32 06-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN
    В чём собственно проблема? RegRead для чтения из реестра.
     
    _______________
    Попробовал кеулогер сделать на основе уже имеющегося. Думаю поможет в случаях когда долго печатаешь пост, а тут вдруг связь оборвалась и пост забыл скопировать.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 15:11 06-11-2010 | Исправлено: AZJIO, 06:51 09-11-2010
    EagleSH

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите господа, имею exe файл message.exe написанный на автоит3, код внутри:

    Код:
    MsgBox(0, "SYSTEM", "TEXT")

    и есть главный файл проекта. project.exe
    так вот вопрос, мне нужно из проекта запускать message.exe и передавать ему значение SYSTEM и TEXT, чтоб каждый раз когда нужное сообщение выкинуть запускать message.exe с нужными текстами.
     
    каким макаром?
     
    п.с. мало того, project.exe не должен останавливаться и ждать нажатия кнопки ok в message.exe. Тоесть запустил message и дальше работает.

    Всего записей: 318 | Зарегистр. 20-12-2005 | Отправлено: 22:14 06-11-2010 | Исправлено: EagleSH, 22:17 06-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    EagleSH 23:14 06-11-2010
    Цитата:
    каким макаром?

    Пусть «project.exe» задаёт переменную через EnvSet, а «message.exe» принимает её зеачение через EnvGet.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:37 06-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EagleSH
    Если я правильно понял то в посте содержится ответ. Файл project.exe  выполняет команду 'message.exe "SYSTEM" "TEXT"'. Файл message.exe должен содержать код принятия 2-x параметров, типа:
    If $CmdLine[0]>1 Then MsgBox(0, $CmdLine[1], $CmdLine[2])

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 23:09 06-11-2010
    EagleSH

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо, сделал, получил ерор:
     
       
     
    project:

    Код:
    EnvSet("TITLE", "this is a title")
    EnvSet("MESSAGE", "this is a message")
    Run(message.exe)

     
    message

    Код:
    $title=EnvGet("TITLE")
    $message=EnvGet("MESSAGE")
    MsgBox(0, $title, $message)

     
    Добавлено:
    AZJIO
    по твоему способу тоже попробую....
     
    но хотелось бы корректировки через сет/гет
     
    Добавлено:
    а вообще объясню для чего, просто заметил, что если из проекта кидаю сообщение, то проект стопорится на нём, пока не нажмёшь кнопку, как нажимаешь - дальше всё идёт. а это не правильно в моём случае
     
    Добавлено:
    протупил
    всё пашет
    спасибо!
     

    Код:
    Run(@WorkingDir & "\message.exe", "")

     
    Добавлено:
    та! то что доктор прописал.... спасибо ещё раз.
     
    п.с. а изнутри проджекта если сообщуху вызывать я так понимаю нет варика чтоб не останавливалось всё пока кнопку не нажмёшь?

    Всего записей: 318 | Зарегистр. 20-12-2005 | Отправлено: 23:36 06-11-2010 | Исправлено: EagleSH, 23:44 06-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    EagleSH 00:36 07-11-2010
    Цитата:
     если из проекта кидаю сообщение, то проект стопорится на нём, пока не нажмёшь кнопку

    Используй _NotifyBox() - MsgBox() без приостановки скрипта.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:33 07-11-2010
    EagleSH

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    ещё лучше! спасибо!

    Всего записей: 318 | Зарегистр. 20-12-2005 | Отправлено: 00:54 07-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EagleSH
    Есть вариант вызвать мессагу, по принципу как сделано у меня в скриптах "Stopwatch - Секундомер" и "The_generator_of_melodies", там внутри скрипта вложен скрипт в виде переменной, когда понадобится запустить его он сохраняется в темповой папке скриптом и вызывается с параметром /AutoIt3ExecuteScript, вот так:
    $pid=Run(@AutoItExe&' /AutoIt3ExecuteScript "'&@TempDir&'\message.au3"')
     
    В данном случае @AutoItExe это полный путь к файлу project.exe

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 01:31 07-11-2010
    EagleSH

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    спасибо, тоже попробую для опыта.

    Всего записей: 318 | Зарегистр. 20-12-2005 | Отправлено: 10:25 07-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EagleSH
    Посмотри готовый скрипт-пример
     
    _________________________
    Обновил кеулогер, или вот готовый EXE

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 20:39 07-11-2010 | Исправлено: AZJIO, 05:02 09-11-2010
    EagleSH

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

    Всего записей: 318 | Зарегистр. 20-12-2005 | Отправлено: 13:31 08-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Что то не получается у меня паузу сделать в кеулогере

    Код:
    Global $Pause=0
    HotKeySet("!8", "_Pause") ;Alt+8
     
    Func _Pause()
        If $Pause = 0 Then
            $Pause = 1
            DllCallbackFree($hStub_KeyProc)
        Else
            $Pause = 0
            $hStub_KeyProc = DllCallbackRegister("_Key_Proc", "int", "int;ptr;ptr")
        EndIf
    EndFunc
    на DllCallbackFree вылетает.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 02:37 09-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 02:37 09-11-2010
    Цитата:
    на DllCallbackFree вылетает

    Попробуй так:
     

    Код:
    Func _Pause()
        If $Pause = 0 Then
            $Pause = 1
            If $hStub_KeyProc Then
                DllCallbackFree($hStub_KeyProc)
                $hStub_KeyProc = 0
            EndIf
        Else
            $Pause = 0
            $hStub_KeyProc = DllCallbackRegister("_Key_Proc", "int", "int;ptr;ptr")
        EndIf
    EndFunc


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:42 09-11-2010
    frb_noname

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скриптом заношу в БД краткое описание файла.  
    Описание получаю путем копирования и вставки в inputbox части текста открытого документа. Само собой разумеется, что сюда попадают и пробелы и перевод строки и т.д.
    В результате,  не весь скопированный текст помещается в inputbox.
     
    Вопрос в том, как получить в переменную ВЕСЬ скопированный текст ?

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 14:03 09-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Нет, сам по себе DllCallbackFree($hStub_KeyProc) вылетает при первом вызове, т.е. добавленное условие будет верным.
     
    ________________
    Узнать версию AutoIt3 внутри скомпилированного EXE можно так:
    на батник с таким содержанием
    Код:
    start "" "%~f1" /AutoIt3ExecuteScript "%~dp0version.au3"
    кинуть EXE
    с батником должен быть скрипт version.au3 с таким содержанием:
    Код:
    MsgBox(0, 'Версия AutoIt3', @AutoItVersion)

     
    А вот ещё полезный батник
    taskkill.exe /F /IM AutoIt3.exe
    если сделать на него ярлык и в свойствах указать "Быстрый вызов", то помогает снимать зацикленные/зависшие процессы автоита при тестах, а также скрипты, в которых "Закрыть" не работает.
     
    NIKZZZZ
    Хотел RegToScript.exe добавить в реестр чтоб из контекстного меню работала, но не получается, пишет что не найден RegToScript.ini

    Код:
    Reg.exe add "HKEY_CLASSES_ROOT\regfile\shell\mconv\command" /v "" /t REG_SZ /d "\"%~dp0RegToScript.exe\" /au3 \"%%1\" \"%%1.au3\"" /f

     
    Добавлено:
    frb_noname
    $ES_MULTILINE 0x0004 Многострочный элемент редактирования. Стандартный режим - одна строка ввода.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 14:32 09-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 14:32 09-11-2010
    Цитата:
    добавленное условие будет верным

    Ты проверял то что я предложил? я не с потолка это взял, у меня уже было такое.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:29 09-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Да проверял 2 раза. Сейчас ещё раз проверил. И на других версиях автоита проверил.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 17:10 09-11-2010
    NIKZZZZ



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

    Цитата:
    Хотел RegToScript.exe добавить в реестр чтоб из контекстного меню работала

    RegToScript

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:41 10-11-2010
    kpuk



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    гуру подскажите как мне выполнить в автоите, не создавая временных командных файлов(*.cmd или *.bat) строку такого вида с русскими букавами:
    netsh interface ip set address name="Подключение по локальной сети" static 10.253.1.245 255.255.255.0 10.253.1.68
    Напомню, на всякий, что проблема возникает в том, что командному интерпритатору надо кодировку дос, а автоит выполняет с ascii !


    ----------
    Мой дед говорил ''делай добро и бросай его в воду,
    Оно не пропадёт, добром к тебе вернётся...''

    Дружественный хостинг. Мой выбор!

    Всего записей: 1099 | Зарегистр. 07-03-2004 | Отправлено: 00:22 11-11-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kpuk, а что если имя подключения иное? неизвестное?
    Как самый простой вариант: заранее переименовать подключение в англ.
    Или вариант: Заранее поместить в переменную текст с названием в нужной кодировке: $sName = "Џ®¤Є«озҐ-ЁҐ Ї® «®Є «м-®© бҐвЁ"
    Посложнее: Прочитать спосок подключений, из ipconfig и выбрать из него имя основываясь например на MAC адресе или выбрать первое в списке. Читать можно так:

    Код:
    #include <Constants.au3>
    $hCMD = Run(@ComSpec & " /c " & 'ipconfig', "", @SW_SHOW, $STDOUT_CHILD)
    $sLog = ""
    While 1
        $sLog &= StdoutRead($hCMD)
        If @error Then ExitLoop
        Sleep(10)
    WEnd
    MsgBox(0, "STDOUT read:", $sLog)
    Выбирать нужный фрагмент текста из этого нужно с помощью StringRegExp, но я нём не силён.
    Я вот так бы сделал (Win7):
    Код:
    $ipos = StringInStr ($sLog, "Ethernet adapter ") ; определяем позицию фрагмента "Ethernet adapter"
    $sLog = StringTrimLeft ($sLog, $ipos + 16) ; отрезаем всё что слева + сам фрагмент "Ethernet adapter"
    $ipos = StringInStr ($sLog, ":") ; определяем позицию двоеточия (оно идёт сразу после названия соединения)
    $sLog = StringLeft ($sLog, $ipos - 1) ; читаем фрагмент от начала, до двоеточия (это наше название) и отбрасываем само двоеточие
    MsgBox(0, "STDOUT read:", $sLog)

     

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 08:58 11-11-2010 | Исправлено: ynbIpb, 09:18 11-11-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    не работает TrayTip (WinXP Pro SP3), в чем может быть дело?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 15:04 11-11-2010
    kpuk



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ynbIpb
    Вот оно!
    главное для меня в твоём примере $STDOUT_CHILD и StdoutRead($hCMD)
    а для хр я чутка по другому делаю, не знаю прально или нет, но работет хорошо
     

    Код:
    $file = лог с ipconfig
    $i = 1
    $spl = ""
        While 1
            $line = FileReadLine($file, $i)
            If @error = -1 Then ExitLoop
            $line = StringSplit($line, " - ", 1)
            If $line[0] = 2 Then $spl = $spl & $line[1] & @crlf
            $i += 1
        WEnd
    msgbox(0,"",$spl)


    ----------
    Мой дед говорил ''делай добро и бросай его в воду,
    Оно не пропадёт, добром к тебе вернётся...''

    Дружественный хостинг. Мой выбор!

    Всего записей: 1099 | Зарегистр. 07-03-2004 | Отправлено: 16:49 11-11-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли получить id кнопки в html-страничке при клике по этой кнопке правой кнопкой мыши, не используя для этого js-скрипты, т.е. средствами самого АвтоИТ?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 16:21 12-11-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Какие WM команды срабатывают, когда изменяют размеры ГУИ и/или его разворачивают на весь экран.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 15:13 13-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    К примеру WM_WINDOWPOSCHANGED или можно скомбинировать из двух. Я же выкладывал архив с WM, пробуй.
    Я не могу найти как WM_COPY использовать, на офсайте ничего нет. Функция по смыслу должна срабатывать во время отправки в буфер.

    Всего записей: 4414 | Зарегистр. 03-05-2006 | Отправлено: 00:18 14-11-2010 | Исправлено: AZJIO, 00:23 14-11-2010
    Zloy_Gelud



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

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 12:41 14-11-2010 | Исправлено: Zloy_Gelud, 13:00 14-11-2010
       

    Страницы: 1 2 3 4 5 6 7 8

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
    gyra (23-01-2020 10:51): AutoIT (Часть 4)


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru