Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

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

(*.*)


Сообщения: 36493
Благодарности: 6675


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
Как видно, добавляется в начало span id="BeginvidDesc....">, а иногда и в конце тоже добавляются теги. Реально ли одно-разовым вызовом StringRegExp (и без дополнительных циклов) получить то что нужно? »
опять не понял смысл квадратных скобок в твоем выражении, попробуй так:
Код: Выделить весь код
$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
Цитата:
А поиск во вложенных контейнерах сложная задача? »
думаю нужно что-то типа рекурсии, на MSDN есть подробная инструкция с примером: Determining Available Network Resources. Статья для Windows Mobile, но общий алгоритм одинаков.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:42, 05-07-2008 | #701



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27,
Цитата:
опять не понял смысл квадратных скобок в твоем выражении
- Я не знал как указать движку RegExp что я хочу искать в начале либо одно, либо другое, но при этом чтобы то что я ищу не попало в результат.

Цитата:
попробуй так:
Спасибо огромное! Вроде всё отлично отрабатывает, но хотелось бы понять как?! Почему то, что в первых круглых скобках не попадает в результат (в строки массива)? И что означает «:?» ?

Ответ на последеий мой вопрос предоставляет объяснение и на первый вопрос

Цитата:
(?: ... ) - Non-capturing group. Behaves just like a normal group, but does not record the matching characters in the array nor can the matched text be used for back-referencing.
И как я это мог упустить в справке...

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 15:40, 05-07-2008 | #702


Пользователь


Сообщения: 67
Благодарности: 13

Профиль | Отправить PM | Цитировать


В windowinfo есть инструмент finder tool: наводим его на объект и получаем информацию о нем. Хочу написать что-то подобное для получения только некоторой необходимой информации и сбрасывать ее в файл, осталось только разобраться как получать инфо об объекте под курсором...

Отправлено: 16:19, 06-07-2008 | #703


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Привет всем. У меня вопрос по autoit. Вопрос вроде легкий, а решить уже 2 дня не могу. И в связи что легкий нигде нет ответа, а по совету из справки у меня получается каламбур. Подскажите знающие. Мне нужен скрипт, который бы проверял дату на компе с моей введенной (например 08/08/2008) и если совпадает, то запуск "моей программы", а если нет то выход. Спасибо. :help

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 19:31, 06-07-2008 | #704


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


266903582,
Цитата 266903582:
как получать инфо об объекте под курсором... »
Продвинуты пример (сам делал ):

Код: Выделить весь код
#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) и если совпадает, то запуск "моей программы", а если нет то выход. »
Примерно так:

Код: Выделить весь код
$sSystemDate = @MDAY & "/" & @MON & "/" & @YEAR

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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 04-09-2009 в 01:01. Причина: Адаптировал пример для более новой версии AutoIt

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:37, 06-07-2008 | #705


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Спасибо, Creat0R за ответ. Мой вопрос решен.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 20:00, 06-07-2008 | #706


Пользователь


Сообщения: 67
Благодарности: 13

Профиль | Отправить PM | Цитировать


Creat0R, спасибо.
Я тоже без дела не сидел небольшой концептик получился, по свободняку расширю его твоим примером:
Код: Выделить весь код
#include <Misc.au3>
FileDelete("file.txt")
$dll = DllOpen("user32.dll")
$file = FileOpen("file.txt", 1)
$ffi=""
While 1
	if _IsPressed("11", $dll) Then							;ctrl	ctrltext & classn
		wr(ControlGetText("","",ControlGetFocus(""))&@lf&ControlGetFocus(""))
	EndIf
	if _IsPressed("12", $dll) Then 							;alt		title & alltext
		wr(WinGetTitle("")&@lf&"-------"&@lf&WinGetText(""))
	EndIf							
	if _IsPressed("1b", $dll) Then Exit						;esc
	sleep(50)
WEnd	
DllClose($dll)
FileClose($file)

Func wr($ff)
	if $ffi<>$ff then  ;исключаем попадание многократных копий захваченного текста в файл
		FileWrite($file,$ff&@LF&"-------"&@lf)   ;пишем форматированный текст
		$ffi=$ff
		ToolTip($ffi)
	EndIf
EndFunc

Отправлено: 23:28, 06-07-2008 | #707


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Maza Faka
Цитата:
поиск во вложенных контейнерах сложная задача?
как оказалось можно без рекурсии - нужно только правильно заполнить структуру стартового контейнера
Цитата:
Спасибо за пример »
будешь удивлен, но в штатных функциях AutoIT уже есть API-врапперы:

_WinNet_OpenEnum()
_WinNet_CloseEnum()
_WinNet_EnumResource()


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

- значения флагов не совпадают со значениями системных констант;
- нет функций по обработке структур NETRESOURCE;
- излишняя (ИМХО) перегруженность функций параметрами ByRef

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

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

Отправлено: 15:01, 08-07-2008 | #708


Аватара для Maza Faka

Ветеран


Сообщения: 604
Благодарности: 133

Профиль | Отправить PM | Цитировать


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

Цитата:
поэтому, поскольку уже зацепился на днях выложу свой вариант UDF
ОК! Ждёмс...

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 16:54, 08-07-2008 | #709


Ветеран


Сообщения: 825
Благодарности: 50

Профиль | Отправить PM | Цитировать


Тут у меня спросили скрипт определения пути, куда установилась программа. У кого нибудь уже есть решение?!

Отправлено: 17:45, 08-07-2008 | #710



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход