Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: NORIO
Дата сообщения: 07.12.2008 04:04
<del>
Проблема решена.
Автор: NIKZZZZ
Дата сообщения: 07.12.2008 07:21
ViSiToR

Цитата:
это проблемы с отображением на стороне браузера (кеш и т.п.).

Тоже так думал, но задержка проявляется и при открытии страницы другим браузером.
Автор: gal7
Дата сообщения: 07.12.2008 08:10
Спасибо, оказывается было так просто!
Автор: Zwook
Дата сообщения: 07.12.2008 16:11

Цитата:
По умолчанию 2-ой параметр в функции SoundPlay установлен в 0, это означает, что скрипт не будет ждать окончания проигрывания файла, а продолжит работу.


Если я оставляю параметр 0, то звук вообще не запускаетса...


--------------------------

Совет всем autoitit'чикам, делайте описание всех важных строк в скрипте! Я вот не делал, сегодня почти 3 часа искал нужную мне переменную)
Автор: SNAKE92
Дата сообщения: 07.12.2008 23:10

Код: SoundPlay(@WindowsDir & "\media\tada.wav", 0)
Sleep (1500)
Автор: ViSiToR
Дата сообщения: 07.12.2008 23:23
Кстати, я заметил что SoundPlay($sFile, 0) задерживает скрипт на некоторое время, и если его использовать например вместе с показом какого-то диалога («О программе» допустим), то GUI диалога как бы зависает на это время, для решения данной проблемы(?) пришлось проигрывать файл во внешнем скрипте:


Код:
_SoundPlayEx(@SystemDir & "\oobe\images\title.wma", 0)

Sleep(1500)

_SoundPlayEx("") ;Это отключит проигрывание, иначе будет играть даже после выхода скрипта

Func _SoundPlayEx($sSound, $iWait=0)
If $iWait Then Return SoundPlay($sSound, $iWait)

If $sSound = "" Then
ControlSetText("[CLASS:AutoIt v3 GUI;TITLE:_*_SoundPlayEx_*_]", "", "Edit1", "_SoundPlayEx - Stop")
Return 1
EndIf

Local
$sSoundPlay_File = @TempDir & "\~Au3Tmp_SP_Script.sp"
Local $sSoundPlay_Script = ""

$sSoundPlay_Script &= '#NoTrayIcon' & @CRLF
$sSoundPlay_Script &= 'SoundPlay("' & $sSound & '")' & @CRLF
$sSoundPlay_Script &= '$hGUI = GUICreate("_*_SoundPlayEx_*_")' & @CRLF
$sSoundPlay_Script &= '$Stop_SP_Input = GUICtrlCreateInput("_SoundPlayEx - Play", 0, 0)' & @CRLF
$sSoundPlay_Script &= 'While 1' & @CRLF
$sSoundPlay_Script &= ' Sleep(100)' & @CRLF
$sSoundPlay_Script &= ' If GUICtrlRead($Stop_SP_Input) = "_SoundPlayEx - Stop" Then' & @CRLF
$sSoundPlay_Script &= ' SoundPlay("")' & @CRLF
$sSoundPlay_Script &= ' FileDelete(@ScriptFullPath)' & @CRLF
$sSoundPlay_Script &= ' Exit' & @CRLF
$sSoundPlay_Script &= ' EndIf' & @CRLF
$sSoundPlay_Script &= 'WEnd' & @CRLF

Local $hSP_FOpen = FileOpen($sSoundPlay_File, 2+8)
FileWrite($hSP_FOpen, $sSoundPlay_Script)
FileClose($hSP_FOpen)

Return Run(@AutoItExe & ' /ErrorStdOut /AutoIt3ExecuteScript "' & $sSoundPlay_File & '"')
EndFunc
Автор: Nikkorot
Дата сообщения: 08.12.2008 07:39
ViSiToR


Цитата:
Нужно сопоставить расширение файла с указанной программой, вот тут есть функция для этого, вот пример использования:



Цитата:
_RegExtensionRegister


А где можно посмотреть эту функцию ?



Добавлено:
Или функцию
Цитата:
#include <Registry_UDFs.au3>

Автор: NORIO
Дата сообщения: 08.12.2008 11:51
Nikkorot
она в инклюде [more=Registry_UDFs.au3]

Код: #include-once

#CS Registry extended UDFs.
    Originaly by wraithdu (http://www.autoitscript.com/forum/index.php?showtopic=70108)
    Modified (at 01.12.2008) by MsCreatoR (CreatoR's Lab - http://creator-lab.ucoz.ru).
#CE

;Delete registry key by it's value
Func _RegDeleteEx($s_Key, $s_Val)
    Local $sCurrent_ValName, $iCount = 1
    
    While 1
        $sCurrent_ValName = RegEnumVal($s_Key, $iCount)
        If @error <> 0 Then ExitLoop
        
        If String(RegRead($s_Key, $sCurrent_ValName)) = $s_Val Then Return RegDelete($s_Key, $sCurrent_ValName)
        
        $iCount += 1
    WEnd
    
    Return @error
EndFunc ;==>_RegDeleteEx

Func _RegCopyKey($s_Key, $d_Key, $iDelete = False)
    Local $i, $sVal, $sData, $sType, $sKey

    RegWrite($d_Key) ; write dest Key, in case Key empty
    If @error Then Return @error ; some error
    
    ; Value loop
    $i = 0
    
    While 1
        $i += 1
        
        $sVal = RegEnumVal($s_Key, $i)
        If @error Then ExitLoop ; no more Values
        
        $sData = RegRead($s_Key, $sVal)
        If @error Then ContinueLoop ; some error reading Value, skip it
        
        $sType = _RegGetExtendedType(@extended)
        RegWrite($d_Key, $sVal, $sType, $sData) ; write new Value
    WEnd
    
    ; Key loop
    $i = 0
    
    While 1
        $i += 1
        $Key = RegEnumKey($s_Key, $i)
        If @error Then ExitLoop ; no more Keys
        _RegCopyKey($s_Key & "\" & $sKey, $d_Key & "\" & $sKey) ; recurse
    WEnd
    
    ; move Key
    If $iDelete Then RegDelete($s_Key)
EndFunc ;==>_RegCopyKey

Func _RegMoveKey($s_Key, $d_Key)
    _RegCopyKey($s_Key, $d_Key, True)
EndFunc ;==>_RegMoveKey

Func _RegCopyValue($s_Key, $s_Val, $d_Key, $d_Val, $iDelete = False)
    Local $sData, $sType

    $sData = RegRead($s_Key, $s_Val)
    If @error Then Return SetError(1, 0, 0) ; some error reading Value, skip it
    
    $sType = _RegGetExtendedType(@extended)
    
    RegWrite($d_Key, $d_Val, $sType, $sData)
    If $iDelete Then RegDelete($s_Key, $s_Val)
EndFunc ;==>_RegCopyValue

Func _RegMoveValue($s_Key, $s_Val, $d_Key, $d_Val)
    _RegCopyValue($s_Key, $s_Val, $d_Key, $d_Val, True)
EndFunc ;==>_RegMoveValue

Func _RegKeyExists($s_Key)
    RegRead($s_Key, "")
    If @error <= 0 Then Return 1 ; Key exists
    
    Return 0
EndFunc ;==>_RegKeyExists

Func _RegSubKeySearch($s_Key, $s_Search, $i_Mode = 0, $i_Case = 0)
    ; success returns subKey index
    ; failure returns 0
    Local $i = 1, $sKey, $iLen = StringLen($s_Search), $sString
    
    While 1
        $sKey = RegEnumKey($s_Key, $i)
        If @error Then Return 0 ; no more Keys
        
        Switch $i_Mode
            Case 0 ; substring
                If StringInStr($sKey, $s_Search, $i_Case) Then Return $i
            Case 1 ; beginning of string
                $sString = StringLeft($sKey, $iLen)
                
                Switch $i_Case
                    Case 0 ; case insensitive
                        If $sString = $s_Search Then Return $i
                    Case 1 ; case sensitive
                        If $sString == $s_Search Then Return $i
                EndSwitch
        EndSwitch
        
        $i += 1
    WEnd
EndFunc ;==>_RegSubKeySearch

Func _RegValueExists($s_Key, $s_Val)
    RegRead($s_Key, $s_Val)
    ; @error == -2 is 'type not supported', implying Value exists
    If @error = -1 Or @error >= 1 Then Return 0 ; Value does not exist
    
    Return 1
EndFunc ;==>_RegValueExists

Func _RegKeyEmpty($s_Key)
    Local $i_Error1 = 0, $i_Error2 = 0
    
    ; check for Keys
    RegEnumKey($s_Key, 1)
    If @error Then $i_Error1 = 1
    ; check for Values
    RegEnumVal($s_Key, 1)
    If @error Then $i_Error2 = 1
    
    ; set return
    If $i_Error1 And $i_Error2 Then Return 1 ; empty
    
    Return 0
EndFunc ;==>_RegKeyEmpty

Func _RegExport($sRegFile, $sKeyName, $sValueName="")
    If $sValueName <> "" Then
        Local $sRegRead = RegRead($sKeyName, $sValueName)
        Local $hOpen = FileOpen($sRegFile, 2)
        
        FileWrite($hOpen, 'Windows Registry Editor Version 5.00' & @CRLF & @CRLF & _
            "[" & $sKeyName & "]" & @CRLF & _
            '"' & $sValueName & '"="' & StringRegExpReplace($sRegRead, '([\\"])', '\\\1') & '"' & @CRLF)
        
        FileClose($hOpen)
    Else
        Run(@ComSpec & ' /c Reg Export "' & $sKeyName & '" "' & $sRegFile & '"', '', @SW_HIDE)
    EndIf
EndFunc ;==>_RegExport

Func _RegImport($sRegFile)
    Run('RegEdit.exe /s "' & $sRegFile & '"')
EndFunc ;==>_RegImport

Func _RegSetEnvironment($sEnv_Name, $sEnv_Value, $iReplace=0, $iKeyVal=0, $iEnv_Update=0)
    If $sEnv_Name = "" Then Return SetError(1, 0, 0)
    If $sEnv_Value = "" Then Return SetError(2, 0, 0)
    If $iReplace <> 0 And $iReplace <> 1 Then Return SetError(3, 0, 0)
    
    Local $iRet = 0, $iError = 0
    Local $sSystemRegKey = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
    Local $sUserRegKey = "HKEY_CURRENT_USER\Environment"
    
    Local $sRegKey = $sSystemRegKey
    If $iKeyVal = 1 Then $sRegKey = $sUserRegKey
    
    If $iReplace = 1 Then
        $iRet = RegWrite($sRegKey, $sEnv_Name, "REG_SZ", $sEnv_Value)
        $iError = @error
    ElseIf RegRead($sRegKey, $sEnv_Name) = "" Then
        $iRet = RegWrite($sRegKey, $sEnv_Name, "REG_SZ", $sEnv_Value)
        $iError = @error
    EndIf
    
    If $iEnv_Update Then EnvUpdate()
    
    Return SetError($iError, 0, $iRet)
EndFunc ;==>_RegSetEnvironment

Func _RegGetExtendedType($iExtended)
    Local $aRegTypeArr[8] = [7, "REG_SZ", "REG_EXPAND_SZ", "REG_BINARY", "REG_DWORD", _
        "REG_DWORD_BIG_ENDIAN", "REG_LINK", "REG_MULTI_SZ"]
    
    For $i = 1 To 7
        If $iExtended = $i Then Return $aRegTypeArr[$i]
    Next
EndFunc ;==>_RegGetExtendedType

Func _RegExtensionRegister($sExtension, $sAppName, $sAppExt, $sAppPath, $iEnvUpdate=0)
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & $sExtension, _
        "Application", "REG_SZ", $sAppName & "." & $sAppExt)

RegWrite("HKEY_CLASSES_ROOT\Applications\" & $sAppName & "\Shell", "", "REG_SZ", "Open in " & $sAppName)
RegWrite("HKEY_CLASSES_ROOT\Applications\" & $sAppName & "\Shell\Open", "", "REG_SZ", "Open in " & $sAppName)
RegWrite("HKEY_CLASSES_ROOT\Applications\" & $sAppName & "\Shell\Open\command", "", "REG_SZ", '"' & $sAppPath & '" %1')
    
    If $iEnvUpdate Then EnvUpdate()
EndFunc ;==>_RegExtensionRegister

Func _RegReadKeyValueToArray($s_Key, $iKey_Value_Mode=0)
    Local $aKeysListArr[1], $aSubKeysListArr, $iInstance = 0, $sEnum_KeyVal, $sCurrentKeyPath
    
    If Not _RegKeyExists($s_Key) Then Return SetError(1, 0, $aKeysListArr)
    
    While 1
        $iInstance += 1
        
        If $iKey_Value_Mode = 0 Then
            $sEnum_KeyVal = RegEnumKey($s_Key, $iInstance)
        Else
            $sEnum_KeyVal = RegEnumVal($s_Key, $iInstance)
        EndIf
        
        If @error <> 0 Then ExitLoop

        $sCurrentKeyPath = $s_Key & "\" & $sEnum_KeyVal
        
        $aKeysListArr[0] += 1
        ReDim $aKeysListArr[$aKeysListArr[0]+1]
        $aKeysListArr[$aKeysListArr[0]] = $sCurrentKeyPath
        
        $aSubKeysListArr = _RegReadKeyValueToArray($sCurrentKeyPath)
        
        For $j = 1 To $aSubKeysListArr[0]
            $aKeysListArr[0] += 1
            
            ReDim $aKeysListArr[$aKeysListArr[0]+1]
            $aKeysListArr[$aKeysListArr[0]] = $aSubKeysListArr[$j]
        Next
    WEnd
    
    Return $aKeysListArr
EndFunc ;==>_RegReadKeyValueToArray
Автор: frb noname
Дата сообщения: 08.12.2008 11:56
Есть listiview1, listview2, listview3.
Как узнать какой из них в данный момент имеет фокус ?
Спасибо.
Автор: 601ng
Дата сообщения: 08.12.2008 12:35
как реализовать открытие уже запущеной программы?
т.е. программа запущена и находится в трее и надо открыть окно программы.
Автор: Maza_Faka
Дата сообщения: 08.12.2008 12:52
frb noname

Цитата:
Как узнать какой из них в данный момент имеет фокус ?


Можно так:

Код: #include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>

$hGUI = GUICreate("Test GUI", 400, 400)

GUICtrlCreateLabel("ListView 1", 80, 3, 50, 16)
$ctlListView_1 = GUICtrlCreateListView("Items|SubItems", 10, 20, 180, 180)

GUICtrlCreateLabel("ListView 2", 280, 3, 50, 16)
$ctlListView_2 = GUICtrlCreateListView("Items|SubItems", 210, 20, 180, 180)

GUICtrlCreateLabel("ListView 3", 180, 220, 50, 16)
$ctlListView_3 = GUICtrlCreateListView("Items|SubItems", 10, 240, 380, 140)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

GUISetState()

Do
Until
GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $tNMHDR, $iIDFrom, $iCode

$tNMHDR
= DllStructCreate("hwnd hWndFrom;int IDFrom;int Code", $lParam)
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")

Switch $iCode
Case $NM_SETFOCUS
Switch $iIDFrom
Case $ctlListView_1
ConsoleWrite("ListView 1 was focused" & @LF)
Case $ctlListView_2
ConsoleWrite("ListView 2 was focused" & @LF)
Case $ctlListView_3
ConsoleWrite("ListView 3 was focused" & @LF)
EndSwitch
EndSwitch

Return $GUI_RUNDEFMSG
EndFunc
Автор: 601ng
Дата сообщения: 08.12.2008 13:09

Цитата:
Попробуй так:

Код:
WinActivate("Window title")

неполучается((
это вот если окно открыто, но не активно- то тогда работает
Автор: ViSiToR
Дата сообщения: 08.12.2008 13:24
Nikkorot 08:39 08-12-2008
Цитата:
А где можно посмотреть эту функцию ?

Упс, я забыл ссылку дать . Кстати, в той функции была проблема, я на оф. форуме нашёл ещё пару подобных (у всех есть тот или инной недостаток), и сделал из них одну (точнее две, вторая для удаления расширения), вроде нормально работающую. Обновил библиотеку (добавил её в шапку).

Пример использования:


Код: _RegSetFileExt("MyExt", '"C:\MyApp.exe" "%1"', "Open in MyApp", 1, '"C:\MyApp.exe",0', 'MyExt File')
_RegUnSetFileExt("MyExt", 'Open in MyApp') ;Опустите второй параметр для полного удаления расширения.
Автор: gal7
Дата сообщения: 08.12.2008 15:24
Как в регулярных выражениях отделять обратную ссылку от цифры после неё:
"\177" - здесь \1 это ссылка, а 77 число.
Автор: Maza_Faka
Дата сообщения: 08.12.2008 15:26
601ng
Попробуй так:

Код:
WinSetState("Title", "", @SW_RESTORE)
Автор: gal7
Дата сообщения: 08.12.2008 15:37

Цитата:
Так:

Нет, это все будет как раз заменять, т.е.:
MsgBox(0, "Result", StringRegExpReplace($string, "(что-то тут ищет)", "\177(это не ясно как)"))
Автор: ViSiToR
Дата сообщения: 08.12.2008 15:39
gal7 16:24 08-12-2008
Цитата:
Как в регулярных выражениях отделять обратную ссылку от цифры после неё

Можно через символ, а потом убрать его (знаю, это криво, я тоже подобное где то спрашивал, но не помню как решалось(?)):


Код: $sLink = "Some string http://test.com Some data"

$sRegExp= StringRegExpReplace($sLink, ".*(http://.*?) .*", "\1_77")
$sRegExp= StringRegExpReplace($sRegExp, "_(77)$", "\1")

ConsoleWrite($sRegExp & @CRLF)
Автор: gal7
Дата сообщения: 08.12.2008 16:25
О, нашел в Perl:
MsgBox(0, "Result", StringRegExpReplace("AB", "(.)(.)", "${1}77$2"))
Автор: ViSiToR
Дата сообщения: 08.12.2008 17:17
gal7 17:25 08-12-2008
Цитата:
О, нашел в Perl

Забавно, но оно работает! В справке об этом ни слова... нужно разработчикам намекнуть на обновление доков по этому поводу .
Автор: CrazyNNM
Дата сообщения: 08.12.2008 18:45

Цитата:

нужно разработчикам намекнуть на обновление доков по этому поводу .

желательно и в русском варианте побольше описаловок, ато инглиш у меня со временем стал хромать((((
да и в русском исполнении понятней и приятней))))
Автор: ViSiToR
Дата сообщения: 08.12.2008 18:49
CrazyNNM 19:45 08-12-2008
Цитата:
желательно и в русском варианте побольше описаловок

Ну, это не к разработчикам, а к тому кто справку русскую пишет(?) - Давненько она не обновлялась кстати, было бы время, доделал бы сам
Автор: SNAKE92
Дата сообщения: 08.12.2008 20:09
Подскажите как можно былобы файл отправить на FTP сервер?
Все облазил, ниче полезного ненашел(
Автор: KT315E
Дата сообщения: 08.12.2008 20:30
Как узнать текущее состояние CapsLook, ScrollLock и NumLock? На клаве светодиодов нет, решил прогу написать...

Код:
HotKeySet ('{CAPSLOCK}', 'capslock')
While 1
    Sleep (200)
WEnd
Func capslock()
    MsgBox (0, '', 'CAPS LOCK', 1)
EndFunc
Автор: ViSiToR
Дата сообщения: 08.12.2008 21:29
SNAKE92 21:09 08-12-2008
Цитата:
Все облазил, ниче полезного ненашел

А офф. форум?

KT315E 21:30 08-12-2008
Цитата:
Как узнать текущее состояние CapsLook, ScrollLock и NumLock?


Вот так (по аналогии с _IsPressed()):


Код:
$iCAPSLOCK_Is_On = _Key_Is_On(14)
$iNUMLOCK_Is_On = _Key_Is_On(90)
$iSCROLLLOCK_Is_On = _Key_Is_On(91)

$sMessage = StringFormat('CAPS LOCK Is On:\t\t%s\nNUM LOCK Is On:\t\t%s\nSCROLL LOCK Is On:\t%s', _
$iCAPSLOCK_Is_On, $iNUMLOCK_Is_On, $iSCROLLLOCK_Is_On)

MsgBox(64, '_Key_Is_On', $sMessage)

Func _Key_Is_On($sHexKey, $vDLL = 'user32.dll')
Local $a_R = DllCall($vDLL, "short", "GetKeyState", "int", '0x' & $sHexKey)

Return Not @error And BitAND($a_R[0], 0xFF) = 1
EndFunc
Автор: SNAKE92
Дата сообщения: 08.12.2008 21:55
Спасибо, чет нада было сразу там посареть)))
Автор: Maza_Faka
Дата сообщения: 09.12.2008 06:07
gal7

Цитата:
О, нашел в Perl

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

Код:
$sLink = "Some string http://test.com Some data"

$sRegExp = StringRegExpReplace($sLink, ".*(http://.*?) (.*)", "${1}77")

ConsoleWrite($sRegExp & @CRLF)
Автор: Nikkorot
Дата сообщения: 09.12.2008 11:27
ViSiToR
Спасибо за библиотеку
Автор: SNAKE92
Дата сообщения: 10.12.2008 09:28
Подскажие как получить текст из адресной строки в опере? (ID контрола неопределаяется, и на официальном форуме ничего ненащел)
Автор: ViSiToR
Дата сообщения: 10.12.2008 12:36
SNAKE92 10:28 10-12-2008
Цитата:
на официальном форуме ничего ненащел

Если ввести в поиске «Opera +address», то получим топик с подобным вопросом (я кстати его и спрашивал ) и ответом.
Автор: Partner1
Дата сообщения: 10.12.2008 12:54
А можно ли запретить выгрузку скрипта (скомпилированного). И вообще скрыть его (сервис ???) .

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.