Войти

Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Creat0R
29-08-2007, 18:46
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) (среди которых есть несколько отрепортенных мной ;) ).

Creat0R
30-08-2007, 05:27
Существует ли где нибудь Dll'ка которая позволит выполнять код AutoIt (или хотябы скомпилированный скрипт) передавая ему те параметры, с которыми была запущена Dll'ка? (сам путь к запускаемому скрипту будет естественно передаваться также как параметр).

Дело в том, что я хотел в контекстное меню проводника внедрить свой пункт, но это возможно только(?) если запускаемый модуль этим пунктом является Dll, вот если есть подобная Dll'ка, то я смог бы пункт повесить на неё, а она уже запускала мой скрипт.

amel27
30-08-2007, 12:18
это возможно только(?) если запускаемый модуль этим пунктом является Dll
если не секрет - откуда инфа?

Creat0R
30-08-2007, 12:26
amel27,
если не секрет - откуда инфа?
Не секрет :) - Сам пытался прописать подобный пункт, а также тут давно уже поднимал этот вопрос... и в соответствующей теме задавал вопрос (http://forum.oszone.net/thread-62252-2.html#post552275) ;)

И как выяснилось, запуск обычного Exe нельзя прописать :(

amel27
31-08-2007, 09:37
Существует ли где нибудь Dll'ка которая позволит выполнять код AutoIt (или хотябы скомпилированный скрипт) передавая ему те параметры, с которыми была запущена Dll'ка?

Вроде нашел: http://forum.oszone.net/post-636150-19.html

fak1r
31-08-2007, 21:04
Подскажите пожалуйста как вытащить текст который находиться между двух тегов на html странице, например так:
<h1>text</h1>
Я пробывал искать текст между тэгами при помощи функции StringRegExp, но я так и не понял как же добиться от этой функции результатов, может конечно я указал не правильное регулярное выражение.

Creat0R
31-08-2007, 22:11
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?

Creat0R
02-09-2007, 21:39
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
Спасибо огромное! Буду пробовать!

Добавлено:
Видимо что то не так я делаю - не работает...

yukko
03-09-2007, 19:18
Подскажите пожалуйста.
Как с помощью AutoIt получить информацию из графического приложения в котором AutoIt Window Info ничего не опознает кроме самого окна приложения. Все внутри окна нарисовано, написано и работает автономно. Хочу написать бот для некоторых манипуляций в онлайн игре.

Creat0R
03-09-2007, 20:32
yukko,
Как с помощью AutoIt получить информацию из графического приложения в котором AutoIt Window Info ничего не опознает кроме самого окна приложения
Это весьма широкий вопрос - информация бывает разная, что именно требуется? :)

Diamond
04-09-2007, 02:23
Как-то я задавал вопрос по поводу перетаскивания окна за форму ...недавно эксперементировал с 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

Creat0R
04-09-2007, 02:52
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

Creat0R
04-09-2007, 11:06
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")

yukko
04-09-2007, 11:14
Искомая информация - строка, состоящая из английских букв и пробелов (название объекта). Строка известна, может быть такой и никакой другой. Нужно идентифицировать обьект. Так же есть строка поиска, в которую можно поместить название объекта, нажать на кнопку и произойдет поиск обьектов, которые после этого все равно нужно идентифицировать. Обьект - статический прямоугольник. Название в верхней части прямоугольника, по высоте текст приблизительно 1/15 от высоты прямоугольника.

Creat0R
04-09-2007, 11:26
yukko,
Нужно видеть приложение (сомневаюсь что видно только заголовок окна, возможно текст элементов скрытый?), а по сути, функции ControlGetText, ControlSetText, ControlCommand и т.п помогут в этой задаче.

yukko
04-09-2007, 12:10
Сами обьекты отсканированные/нарисованы, но если есть поиск, то наверное текст где то в клиентской части есть. Утилита не видит ничего кроме заголовка окна. Подскажите пожалуйста где можно поискать текст ?

Creat0R
04-09-2007, 12:17
yukko
Сами обьекты отсканированные/нарисованы
Это изображение? Тогда будет сложновато, нужно задействовать OCR.. на оф. форуме кажется есть решение с использованием Microsoft Document Imaging (нужен Office 2003 как минимум), но распознаёт далеко не все виды изображении.

Приведи хотябы снимок приложения :)




© OSzone.net 2001-2012