[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Ответить
 • Просмотры: 29
Аватара пользователя
KKulik

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение KKulik »

Creat0R


Цитата:



Как видно, добавляется в начало span id="BeginvidDesc....">, а иногда и в конце тоже добавляются теги. Реально ли одно-разовым вызовом StringRegExp (и без дополнительных циклов) получить то что нужно?
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




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

Код:

Код: Выделить всё

$sSource = FileRead("test.txt")
$avArray = StringRegExp($sSource, '(?i)(?s)<div  class="vldesc">\s*(?:<span  id="BeginvidDesc[^">]*">)?\s*(.*?)\s*(?:</span>|</div>)', 3)
For $i=0 To UBound($avArray)-1
    ConsoleWrite($avArray[$i]&@CRLF)
Next

Maza Faka
Цитата:



А поиск во вложенных контейнерах сложная задача?
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




думаю нужно что-то типа рекурсии, на MSDN есть подробная инструкция с примером:
Determining Available Network Resources
. Статья для Windows Mobile, но общий алгоритм одинаков.
Аватара пользователя
KKulik

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение KKulik »

ну что не как не получится моё сделать?
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

266903582,
Цитата 266903582:



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




Продвинуты пример (сам
делал
Изображение ):





Код:

Код: Выделить всё

#include <GuiConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>
;
Opt("GuiOnEventMode", 1)
HotKeySet("{ESC}", "QuitApp")
Global $hSquare_GUI = -1
Global $hCtrl = -1
Global $Last_hControl = -1
Global $Frame_Color = 0xFF0000
Global $Frame_Width = 3
$Main_GUI = GUICreate("Highlight Controls Demo")
WinSetOnTop($Main_GUI, "", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "QuitApp")
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED")
GUICtrlCreateButton("Button", 20, 20)
GUICtrlCreateCheckbox("CheckBox", 20, 60)
GUICtrlCreateLabel("Info: ", 20, 150)
GUICtrlSetFont(-1, 9, 800)
$Info_Edit = GUICtrlCreateEdit("", 80, 150, 300, 220, $GUI_SS_DEFAULT_EDIT + $ES_READONLY)
GUISetState()
While 1
    Sleep(10) ;So the CPU will not increes "badly" while we play with the mouse cursor :)
    _IdleWait()
    If _IsPressed(1) Then
        GUIDeleteSquare($hSquare_GUI)
        While _IsPressed(1)
            Sleep(10)
            Check_Highlight_Controls_Proc()
        WEnd
        $Last_hControl = -1
    EndIf
    Check_Highlight_Controls_Proc()
WEnd
Func Check_Highlight_Controls_Proc()
    Local $hCtrl = _ControlGetHovered()
    If $hCtrl <> 0 And $Last_hControl <> $hCtrl And $hSquare_GUI <> $hCtrl Then
        $Last_hControl = $hCtrl
        Local $aCtrlPos = WinGetPos($hCtrl)
        GUICtrlSetData($Info_Edit, _
                "X = " & $aCtrlPos[0] & @CRLF & _
                "Y = " & $aCtrlPos[1] & @CRLF & _
                "W = " & $aCtrlPos[2] & @CRLF & _
                "H = " & $aCtrlPos[3] & @CRLF & @CRLF & _
                "Control/Win Class Name: " & _WinGetClassNameNN($hCtrl) & @CRLF & _
                "Control/Win Handle: " & $hCtrl & @CRLF & _
                "Control ID: " & _HwndToID($hCtrl) & @CRLF & @CRLF & _
                "Control Data:" & @CRLF & ControlGetText($hCtrl, "", ""))
        GUIDeleteSquare($hSquare_GUI)
        $hSquare_GUI = GUICreateSquare($aCtrlPos[0], $aCtrlPos[1], $aCtrlPos[2], $aCtrlPos[3])
    EndIf
EndFunc
Func GUICreateSquare($i_X = -1, $i_Y = -1, $i_W = -1, $i_H = -1)
    Local $hSquare_GUI = GUICreate("", $i_W, $i_H, $i_X, $i_Y, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
    GUISetBkColor($Frame_Color)
    _GUISetHole($hSquare_GUI, $Frame_Width, $Frame_Width, $i_W - ($Frame_Width * 2), $i_H - ($Frame_Width * 2))
    GUISetState(@SW_SHOWNOACTIVATE, $hSquare_GUI)
    Return $hSquare_GUI
EndFunc
Func GUIDeleteSquare($hSquare_GUI)
    If IsHWnd($hSquare_GUI) And $hSquare_GUI <> $Main_GUI Then GUIDelete($hSquare_GUI)
EndFunc
Func _ControlGetHovered()
    Local $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1))
    If @error Or Not IsArray($aRet) Then Return SetError(1, 0, 0)
    Return HWnd($aRet[0])
EndFunc
Func _HwndToID($hWnd)
    If Not IsHWnd($hWnd) Then Return SetError(1, 0, "")
    Local $aRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hWnd)
    If Not IsArray($aRet) Then Return SetError(2, 0, "")
    Return $aRet[0]
EndFunc
Func _WinGetClassName($hWnd)
    $aClassName = DllCall("user32.dll", "int", "GetClassName", "hWnd", $hWnd, "str", "", "int", 64)
    If Not @error And $aClassName[0] <> 0 Then Return $aClassName[2]
    Return ""
EndFunc
Func _WinGetClassNameNN($hCtrlWnd)
    $hParent = _WinAPI_GetAncestor($hCtrlWnd, $GA_ROOTOWNER)
    $hCtrlWnd = ControlGetHandle($hParent, "", $hCtrlWnd)
    $sClassList = StringSplit(StringStripCR(_WinGetNumeratedClassList($hParent)), @LF)
    For $i = $sClassList[0] To 1 Step -1
        If $sClassList[$i] = "" Then ContinueLoop
        If ControlGetHandle($hParent, "", $sClassList[$i]) = $hCtrlWnd Then Return $sClassList[$i]
    Next
    Return _WinGetClassName($hCtrlWnd)
EndFunc
Func _WinGetNumeratedClassList($sTitle, $sText = "")
    Local $sClassList = WinGetClassList($sTitle, $sText)
    Local $aClassList = StringSplit($sClassList, @CRLF)
    Local $sRetClassList = "", $sHold_List = "|"
    Local $aiInHold, $iInHold
    For $i = 1 To UBound($aClassList) - 1
        If $aClassList[$i] = "" Then ContinueLoop
        If StringRegExp($sHold_List, "\|" & $aClassList[$i] & "~(\d+)\|") Then
            $aiInHold = StringRegExp($sHold_List, ".*\|" & $aClassList[$i] & "~(\d+)\|.*", 1)
            $iInHold = Number($aiInHold[UBound($aiInHold) - 1])
            If $iInHold = 0 Then $iInHold += 1
            $aClassList[$i] &= "~" & $iInHold + 1
            $sHold_List &= $aClassList[$i] & "|"
            $sRetClassList &= $aClassList[$i] & @CRLF
        Else
            $aClassList[$i] &= "~1"
            $sHold_List &= $aClassList[$i] & "|"
            $sRetClassList &= $aClassList[$i] & @CRLF
        EndIf
    Next
    Return StringReplace(StringStripWS($sRetClassList, 3), "~", "")
EndFunc
Func _GUISetHole($hWin, $i_X, $i_Y, $i_SizeW, $i_SizeH)
    Local $aWinPos, $Outer_Rgn, $Inner_Rgn, $Wh, $Combined_Rgn
    Local Const $RGN_DIFF = 4
    $aWinPos = WinGetPos($hWin)
    $Outer_Rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", 0, "long", 0, "long", $aWinPos[2], "long", $aWinPos[3])
    $Inner_Rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", $i_Y, "long", $i_Y, "long", $i_Y + $i_SizeW, _
            "long", $i_Y + $i_SizeH)
    $Combined_Rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", 0, "long", 0, "long", 0, "long", 0)
    DllCall("gdi32.dll", "long", "CombineRgn", "long", $Combined_Rgn[0], "long", $Outer_Rgn[0], "long", $Inner_Rgn[0], _
            "int", $RGN_DIFF)
    DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $hWin, "long", $Combined_Rgn[0], "int", 1)
EndFunc
Func _IdleWait($IdleSec = 0)
    Local $iSave, $stLastInput = DllStructCreate("uint;dword")
    DllStructSetData($stLastInput, 1, DllStructGetSize($stLastInput))
    DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($stLastInput))
    Do
        $iSave = DllStructGetData($stLastInput, 2)
        Sleep(20)
        DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($stLastInput))
    Until (DllStructGetData($stLastInput, 2) - $iSave) > $IdleSec
    Return DllStructGetData($stLastInput, 2) - $iSave
EndFunc
Func WM_WINDOWPOSCHANGED($hWndGUI, $MsgID, $WParam, $LParam)
    If $hWndGUI <> $Main_GUI Then Return $GUI_RUNDEFMSG
    GUIDeleteSquare($hSquare_GUI)
    Check_Highlight_Controls_Proc()
    $Last_hControl = -1
EndFunc
Func QuitApp()
    Exit
EndFunc

beve,
Цитата beve:



Мне нужен скрипт, который бы проверял дату на компе с моей введенной (например 08/08/2008) и если совпадает, то запуск "моей программы", а если нет то выход.
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Примерно так:





Код:

Код: Выделить всё

$sSystemDate = @MDAY & "/" & @MON & "/" & @YEAR
If $sSystemDate = "08/08/2008" Then
    Run("Моя программа.exe")
Else
    Exit
EndIf

Изображение
Аватара пользователя
Creat0R

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Creat0R »

Спасибо, Creat0R за ответ. Мой вопрос решен.
Аватара пользователя
HORRIBLE

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение HORRIBLE »

Можно ли вернуть список запущенных процессов ПОЛЬЗОВАТЕЛЕМ ?
Аватара пользователя
Creat0R

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Creat0R »

Maza Faka


Цитата:



поиск во вложенных контейнерах сложная задача?



как оказалось можно без рекурсии - нужно только правильно заполнить структуру стартового контейнера


Цитата:



Спасибо за пример
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




будешь удивлен, но в штатных функциях AutoIT уже есть API-врапперы: Изображение



_WinNet_OpenEnum()

_WinNet_CloseEnum()

_WinNet_EnumResource()




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



- значения флагов не совпадают со значениями системных констант;

- нет функций по обработке структур NETRESOURCE;

- излишняя (ИМХО) перегруженность функций параметрами ByRef



поэтому, поскольку уже зацепился на днях выложу свой вариант UDF



ALL

может кто еще выскажется по функциям из группы _WinNet_* ?
Аватара пользователя
HORRIBLE

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение HORRIBLE »

Creat0R, возвращает массив пустой, хотя у меня запущено некое кол-во программ от пользователя.
Аватара пользователя
HORRIBLE

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение HORRIBLE »

Вышла версия 3.2.12.1

Изменений мало, только фиксы:


Цитата:



http://www.autoitscript.com/autoit3/downloads.shtml




3.2.12.1 (12th June, 2008) (Release)



AutoIt:

- Fixed #309: RunAs() and RunAsWait() now use @SystemDir as the working directory instead of @WorkingDir when a user-supplied working directory is not specified.

- Fixed #325: contextmenuitem not firing events.

- Fixed #282: Icon transparency refresh when on tab regression.

- Fixed #360: RunAs() under Windows 2000.





As the 3.2.12.x branch will be the last version compatible with NT4 and 9x we have backported a few of the most important recent fixes into this release.



Creat0R

HORRIBLE


Цитата:



возвращает массив пустой, хотя у меня запущено некое кол-во программ от пользователя



У меня тоже не работает.
Ответить

Вернуться в «AutoIt»