Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты
amel27,
вчепятляет... особенно количество параметров
Спасибо, а параметров было ещё больше (на три), был параметр $OnTop, $Left, и $Right :) - Но я решил что этих достаточно ($OnTop заменил $ExStyle где можно указать ещё другие опции отображения).
2. Запускать функцию в отдельном потоке того же процесса с использованием CallBack.
Это я пробовал, ничего не вышло, таже проблема (у меня) с получением возвращаемых значении :(.
[hr]
Вышла себе в тихую новая версия AutoIt 3.2.6.0 (http://www.autoitscript.com/autoit3/downloads.php) :blush2::
Changed: IconId in all GUI functions is now the same as GUICtrlSetImage().
WARNING: Previous scripts using GUICtrlSetImage(), GUISetIcon(), TraySetIcon() and TraySetPauseIcon()
may display a wrong Icon. To get the same icon "if nId > 0 Then newId = - nId - 1".
Changed: AutoIt .a3x and compiled script format. Exe2Aut will only decompile 3.2.5.1 and earlier files. No ExeAut utility is supplied for ongoing versions.
Changed: General performance improvements (currently around 30-40% over 3.2.4.9)
Changed: Limited Unicode support added in regular expressions.
Changed: ControlMove() just resizing as WinMove() if X=Y=Default.
Changed: PCRE engine updated from 7.0 to 7.1
Changed: Suppress delay when speed=0 in MouseMove().
Added: GUIGetStyle().
Added: byte and ubyte type to DllCall().
Added: ClassnameNN in control and summary info in Au3Info.
Added: Float type to dllCall. (Thanks PaulIA)
Added: AU3Check v1.54.8 support for both "#AutoIt3Wrapper_plugin_funcs" and "#Compiler_plugin_funcs".
Added: Extra parameter in ProcessClose() to close Stream handles.
И ещё кучу фиксов тут (http://www.autoitscript.com/autoit3/docs/history.htm) (среди которых есть несколько отрепортенных мной ;) ).
Существует ли где нибудь Dll'ка которая позволит выполнять код AutoIt (или хотябы скомпилированный скрипт) передавая ему те параметры, с которыми была запущена Dll'ка? (сам путь к запускаемому скрипту будет естественно передаваться также как параметр).
Дело в том, что я хотел в контекстное меню проводника внедрить свой пункт, но это возможно только(?) если запускаемый модуль этим пунктом является Dll, вот если есть подобная Dll'ка, то я смог бы пункт повесить на неё, а она уже запускала мой скрипт.
это возможно только(?) если запускаемый модуль этим пунктом является Dll
если не секрет - откуда инфа?
amel27,
если не секрет - откуда инфа?
Не секрет :) - Сам пытался прописать подобный пункт, а также тут давно уже поднимал этот вопрос... и в соответствующей теме задавал вопрос (http://forum.oszone.net/thread-62252-2.html#post552275) ;)
И как выяснилось, запуск обычного Exe нельзя прописать :(
Существует ли где нибудь Dll'ка которая позволит выполнять код AutoIt (или хотябы скомпилированный скрипт) передавая ему те параметры, с которыми была запущена Dll'ка?
Вроде нашел: http://forum.oszone.net/post-636150-19.html
Подскажите пожалуйста как вытащить текст который находиться между двух тегов на html странице, например так:
<h1>text</h1>
Я пробывал искать текст между тэгами при помощи функции StringRegExp, но я так и не понял как же добиться от этой функции результатов, может конечно я указал не правильное регулярное выражение.
amel27,
Вроде нашел:
Спасибо, ответил в том топике ;)
fak1r
как вытащить текст который находиться между двух тегов на html странице
В справке этот пример и есть, вот немного изменил:
$Html = '<h1>text</h1>'
$Array = StringRegExp($Html, '(?i)<h1>(.*?)</h1>', 3)
MsgBox(0, "", $Array[0])
может конечно я указал не правильное регулярное выражение.
Ну никто этого знать не может, так как ты не привёл код для примера (того что пытался сделать) ;) .
DenchikK
02-09-2007, 19:03
А возможно ли такое осуществить с помощью AutoIT.
У меня всё время компьютер подключен к интернету, стоит Radmin, с помощью которого я могу управлять своим компом с работы и от друзей. Так как IP динамический, стоит программа, отсылающая на мой почтовый ящик IP, при его изменении. Но вот проблемма - иногда рвётся связь, и реконнект невозможен, нужно перезагружать комп.
Вот задача такая - определить, что связь разорвалась, и перезапустить комп.
Возможно ли такое осуществить с помощью AutoIT?
DenchikK,
определить, что связь разорвалась, и перезапустить комп
Полагаю что можно так:
If Not IsConnected() Then Shutdown(2 + 4)
Func IsConnected()
Local $OpenWinInetDll = DllOpen("wininet.dll")
If $OpenWinInetDll = -1 Then Return SetError(1, 0, -1)
Local $IsConnected = DllCall($OpenWinInetDll, "int", "InternetGetConnectedState", "int", 0, "int", 0)
DllClose($OpenWinInetDll)
If IsArray($IsConnected) Then Return $IsConnected[0]
Return False
EndFunc
DenchikK
02-09-2007, 21:50
Creat0R
Спасибо огромное! Буду пробовать!
Добавлено:
Видимо что то не так я делаю - не работает...
Подскажите пожалуйста.
Как с помощью AutoIt получить информацию из графического приложения в котором AutoIt Window Info ничего не опознает кроме самого окна приложения. Все внутри окна нарисовано, написано и работает автономно. Хочу написать бот для некоторых манипуляций в онлайн игре.
yukko,
Как с помощью AutoIt получить информацию из графического приложения в котором AutoIt Window Info ничего не опознает кроме самого окна приложения
Это весьма широкий вопрос - информация бывает разная, что именно требуется? :)
Как-то я задавал вопрос по поводу перетаскивания окна за форму ...недавно эксперементировал с GUIRegisterMsg() и совешенно случайно обнаружил способ, думаю это хорошая замена для стиля $GUI_WS_EX_PARENTDRAG:
#include <GuiConstants.au3>
Global Const $WM_SYSCOMMAND = 0x0112
Global Const $WM_LBUTTONDOWN = 0x0201
$HWnd = GUICreate("DRAG_COMMAND",240,180,-1,-1,$WS_OVERLAPPEDWINDOW)
GUIRegisterMsg($WM_LBUTTONDOWN,"DRAG_COMMAND")
GUISetState()
While 1
$msg = GUIGetMsg(0)
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func DRAG_COMMAND($HWnd,$command,$wParam,$lParam)
If BitAND(WinGetState($HWnd),32) Then Return
DllCall("user32.dll","long","SendMessage","hwnd",$HWnd,"int",$WM_SYSCOMMAND,"int",0xF009,"int",0)
EndFunc
Diamond,
Можно ещё так..
#include <GuiConstants.au3>
Global Const $WM_NCHITTEST = 0x0084
Global $GUI = GuiCreate("Drag using any place on GUI - Demo", -1, -1, -1, -1, $WS_OVERLAPPEDWINDOW)
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3
Exit
EndSwitch
WEnd
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
If $hWnd = $GUI And $iMsg = $WM_NCHITTEST Then
Local $id = _API_DefWindowProc($hWnd, $iMsg, $iwParam, $ilParam)
If $id = 1 Then
Return 2
Else
Return $id
EndIf
EndIf
EndFunc
Func _API_DefWindowProc($hWnd, $iMsg, $iwParam, $ilParam)
Local $aResult
$aResult = DllCall("User32.dll", "int", "DefWindowProc", "hwnd", $hWnd, "int", $iMsg, "int", $iwParam, "int", $ilParam)
Return $aResult[0]
EndFunc
Вопрос только в том, какой метод болшье использует ресурсов, ведь в твоём примере используется Dll'ка (посылая сообщения) при каждом нажатии мышки... а в моём примере при движении мышки :) ...
Maza Faka
04-09-2007, 09:40
Хочу написать скрипт со "сфетофором", что бы при копировании файла отображался прогресс-бар, но почему-то функция AdlibEnable() начинает работать после того как скопируется файл, что я делаю не так:
Dim $source = "d:\Video\Films\Адреналин.avi", $dest = "c:\Адреналин.avi", $i = 0
ProgressOn("Please wait...", "Now copying file", "", -1, -1, 16)
AdlibEnable("Rename", 500)
FileCopy($source, $dest, 1)
AdlibDisable()
ProgressSet(100, "Done")
Sleep(100)
ProgressOff()
Func Rename()
$i += 1
If $i = 100 Then $i = 0
ProgressSet($i, $i & " percent")
EndFunc
Maza Faka,
Хочу написать скрипт со "сфетофором", что бы при копировании файла отображался прогресс-бар
Тут нужно использовать либо _CallBack (http://www.autoitscript.com/forum/index.php?showtopic=50768&st=60) функции, либо ещё один скрипт (потому как функции типа FileCopy() останавливают выполнение всего скрипта на момент копирования), но проблема в другом - Как определить сколько уже скопировалось..
Если требуется просто "голый" светофор, тогда будет достаточно вышеупомянутых действии ;) ....
Dim $source = "d:\Video\Films\Адреналин.avi", $dest = "c:\Адреналин.avi"
$DummyGui = GUICreate("#_Dummy_Gui_#")
$ProgressStr = '#NoTrayIcon' & @CRLF & _
'ProgressOn("Please wait...", "Now copying file", "", -1, -1, 16)' & @CRLF & _
'Dim $i = 0' & @CRLF & _
'While WinExists(Hwnd(' & $DummyGui & '))' & @CRLF & _
' $i += 1' & @CRLF & _
' If $i = 100 Then $i = 0' & @CRLF & _
' ProgressSet($i, $i & " percent")' & @CRLF & _
' Sleep(200)' & @CRLF & _
'Wend' & @CRLF & _
'ProgressSet(100, "Done")' & @CRLF & _
'Sleep(1000)' & @CRLF & _
'ProgressOff()'
FileWrite(@TempDir & "\Temp_au3_Script.tmp", $ProgressStr)
Run(@AutoItExe & ' /ErrorStdOut /AutoIt3ExecuteScript "' & @TempDir & '\Temp_au3_Script.tmp"')
FileCopy($source, $dest)
GUIDelete($DummyGui)
FileDelete(@TempDir & "\Temp_au3_Script.tmp")
Искомая информация - строка, состоящая из английских букв и пробелов (название объекта). Строка известна, может быть такой и никакой другой. Нужно идентифицировать обьект. Так же есть строка поиска, в которую можно поместить название объекта, нажать на кнопку и произойдет поиск обьектов, которые после этого все равно нужно идентифицировать. Обьект - статический прямоугольник. Название в верхней части прямоугольника, по высоте текст приблизительно 1/15 от высоты прямоугольника.
yukko,
Нужно видеть приложение (сомневаюсь что видно только заголовок окна, возможно текст элементов скрытый?), а по сути, функции ControlGetText, ControlSetText, ControlCommand и т.п помогут в этой задаче.
Сами обьекты отсканированные/нарисованы, но если есть поиск, то наверное текст где то в клиентской части есть. Утилита не видит ничего кроме заголовка окна. Подскажите пожалуйста где можно поискать текст ?
yukko
Сами обьекты отсканированные/нарисованы
Это изображение? Тогда будет сложновато, нужно задействовать OCR.. на оф. форуме кажется есть решение с использованием Microsoft Document Imaging (нужен Office 2003 как минимум), но распознаёт далеко не все виды изображении.
Приведи хотябы снимок приложения :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.