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

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

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

(*.*)


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


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

Профиль | Сайт | Отправить 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

 

Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата amel27:
если параметр передавать в функцию без кавычек, то блокировка не снимается... почему? »
Возможно на стороне функции параметр преобразуется обратно в String?
Хотя всё ровно не логично... но также и не удевительно (для меня), я уже сталкивался с багами подобного характера (в более простых приминениях, сейчас точно не вспомню где конкретно).

Как я понял всё же есть вариант на чистом AutoIt'е? проблема только в передаче параметра без кавычек? Пусть будут кавычки

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

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

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


Отправлено: 05:43, 01-07-2008 | #691



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

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


Googler


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

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


Creat0R
Цитата:
Возможно на стороне функции параметр преобразуется обратно в String? »
нет, точно не преобразуется - в исходнике видно что там тип BOOL, который основан на том же INT
Цитата:
я уже сталкивался с багами подобного характера »
самое забавное, что на AutoHotKey тот же эффект, сказываются общие корни?
Цитата:
Как я понял всё же есть вариант на чистом AutoIt'е? »
нет, я просто просмотрел исходник на Си и комменты автора - в принципе если задача обойтись без DLL, то ничего невозможного нет... хотя "чистым AutoIT" это уже назвать не выйдет - придется собирать кусок ASM-кода (как это делал Piccaso в CallBack) и инжектировать в процесс Winlogon. Кстати, возможны проблемы с некоторыми файерволами... к примеру, Outpost блокирует подобное поведение
Цитата:
проблема только в передаче параметра без кавычек? »
просто зацепило

Отправлено: 07:16, 01-07-2008 | #692


Новый участник


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

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


Цитата amel27:
на оффсайте достаточно инфы и примеров »
Ну для меня Оффсайт дремучий лес, так как я в английском полный ноль

Отправлено: 19:59, 01-07-2008 | #693


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

Ветеран


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

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


amel27,
Нужна твоя помощь Необходимо получить список компьютеров локальной сети, в принципе решение есть (твой скрипт для Nicklock-a), но из "спортивного" интереса хотелось бы получить список с помощью нижеуказанных функций:
Код: Выделить весь код
Global Const $RESOURCE_CONTEXT   = 0x5
Global Const $RESOURCETYPE_DISK  = 0x1

Global Const $NO_ERROR              = 0
Global Const $ERROR_NO_MORE_ITEMS   = 259
Global Const $ERROR_INVALID_ADDRESS = 487

$lpBuffer = DllStructCreate("dword[16384]")
$pBuffer = DllStructCreate("hwnd")

$aRet = DllCall("mpr.dll", "dword", "WNetOpenEnum", "dword", $RESOURCE_CONTEXT, "dword", $RESOURCETYPE_DISK, "dword", 0, "ptr", 0, _
                "ptr", DllStructGetPtr($pBuffer))

If $aRet[0] <> $NO_ERROR Then
    MsgBox(16, "Error", "Dll call error")
    Exit
EndIf

$hWnd = DllStructGetData($pBuffer, 1)

$aRet = DllCall("mpr.dll", "int", "WNetEnumResource", "hwnd", $hWnd, "dword", -1, _
                "ptr", DllStructGetPtr($lpBuffer), "dword", DllStructGetSize($lpBuffer))

ConsoleWrite("!> Ret: " & $aRet[0] & @LF)

DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hWnd)
Ссылки:
WNetOpenEnum
WNetEnumResource

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


Отправлено: 12:20, 03-07-2008 | #694


Googler


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

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


Maza Faka
примерно так, но функция сама не ищет во вложенных контейнерах,
в твоем случае она возвратит только объект "Вся сеть"
Код: Выделить весь код
Global Const $NO_ERROR            = 0
Global Const $ERROR_NO_MORE_ITEMS = 259
Global Const $ERROR_MORE_DATA     = 234
Global Const $MAX_RESOURCES       = 256
Global Const $NOT_A_CONTAINER     = -1

Global Const $RESOURCETYPE_ANY    = 0
Global Const $RESOURCETYPE_DISK   = 1
Global Const $RESOURCETYPE_PRINT  = 2

Global Const $RESOURCE_CONNECTED  = 1
Global Const $RESOURCE_GLOBALNET  = 2
Global Const $RESOURCE_REMEMBERED = 3
Global Const $RESOURCE_CONTEXT    = 5

Func _WNet_EnumResource($iType = $RESOURCETYPE_ANY, $iScope = $RESOURCE_CONTEXT)
    Local $tBuf = DllStructCreate("hwnd"), $pBuf = DllStructGetPtr($tBuf)
    Local $aRet = DllCall("mpr.dll", "int", "WNetOpenEnum", "int", $iScope, "int", $iType, "int", 0, "ptr", 0, "ptr", $pBuf)
    If $aRet[0] Then Return SetError(2, $aRet[0])

    Local $hEnum  = DllStructGetData($tBuf,1)
    Local $tCount = DllStructCreate("int"), $pCount = DllStructGetPtr($tCount)
    Local $tBSize = DllStructCreate("int"), $pBSize = DllStructGetPtr($tBSize)

    DllStructSetData($tCount, 1, -1)
    $aRet = DllCall("mpr.dll", "int", "WNetEnumResource", "hwnd", $hEnum, "ptr", $pCount, "ptr", $pBuf, "ptr", $pBSize)

    If $aRet[0]=0 Then
        DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hEnum)
        Return SetError(1, 0)
    ElseIf $aRet[0]<>$ERROR_MORE_DATA Then
        DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hEnum)
        Return SetError(3, $aRet[0])
    EndIf

    DllStructSetData($tCount, 1, -1)
    $tBuf = DllStructCreate("byte["& DllStructGetData($tBSize,1) &"]")
    $pBuf = DllStructGetPtr($tBuf)
    $aRet = DllCall("mpr.dll", "int", "WNetEnumResource", "hwnd", $hEnum, "ptr", $pCount, "ptr", $pBuf, "ptr", $pBSize)
    If $aRet[0] Then
        DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hEnum)
        Return SetError(4, $aRet[0])
    EndIf
    DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hEnum)
    Return SetError(0, DllStructGetData($tCount,1), $tBuf)
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:29, 04-07-2008 | #695


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

Ветеран


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

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


amel27
Спасибо за пример. А поиск во вложенных контейнерах сложная задача?

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


Отправлено: 15:38, 04-07-2008 | #696


Аватара для Mogidin

Новый участник


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

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


Информация к размышлению. Сам только что случайно увидел.
При копировании файла с одного диска на другой время последнего изменения у нового файла увеличивается на 1 секунду. Это происходит и при копировании в эксплорере, и в автоите функцией FileCopy. Можно этого как-нибудь избежать (кроме варианта с FileSetTime, менять время у кучи файлов непонтово)?

Отправлено: 15:56, 04-07-2008 | #697


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

Ветеран


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

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


Mogidin
Вроде бы уже обсуждали такую проблему, поищи в версии для печати.

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


Отправлено: 17:04, 04-07-2008 | #698


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


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

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


Есть ли возможность принудительно завершить скрипт через какое-то время, если не были приняты никакие действия?
Сейчас я делаю это через задницу. У меня есть два скрипта один из которых запускает второй и через 20 секунд прибивает его. Но хочется сделать одним скриптом и покрасивее. С прогрессбаром.

Вот код скрипта


Код: Выделить весь код
GuiCreate("Переименование учетной записи администратора", 300, 100)
$name=GUICtrlCreateInput("",25,30)
GuiCtrlCreateLabel("Введите имя Вашей учетной записи", 5, 1, 300, 10)
$rename=GuiCtrlCreateButton("Переименовать", 10, 60, 100, 30)
$chanel=GuiCtrlCreateButton("Отменить", 190, 60, 100, 30) 
$progressbar = GUICtrlCreateProgress (10,10,200,20)

; GUI MESSAGE LOOP

GuiSetState()

     For $i = 1 To 100
     GUICtrlSetData ($progressbar,(100 - $i))
     Sleep(30)
     Next
     ProcessClose("Rename_User.exe")

While 1	
     $msg = GUIGetMsg()

Select
       Case $msg = $rename
              FileCopy("RENUSER.EXE",@SystemDir)
              Sleep (1000)
              Run("RENUSER.EXE Администратор " & GUICtrlRead($name))
              Sleep (1000)
              FileDelete(@SystemDir & "\RENUSER.EXE")
           ExitLoop
       Case $msg = $GUI_EVENT_CLOSE
           ExitLoop
       Case $msg = $chanel
    ExitLoop
 EndSelect
WEnd
После завершения прогрессбара скрипт закрывается как и нужно. Но проблема в том, что он в это время не обрабатывает сообщения. Можно как-то сделать, чтобы он и сообщения обрабатывал и закрывался самостоятельно?

Отправлено: 19:09, 04-07-2008 | #699


Аватара для Creat0R

Must AutoIt


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

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


Понадобилась снова помощь по регулярным выражениям...

Имеем исходный код страницы (это только часть, оно повторяется по той же структуре далее):

Src.txt - Нажмите для показа
Код: Выделить весь код
<div class="vldescbox">
				
				<div  class="vltitle">
					<div class="vlshortTitle">
						<a href="/watch?v=UiPhfbZsS54"  title="WTTC 2008 table tennis best points.... enjoy">WTTC <b>2008 table tennis</b> best points.... enjoy</a>
					</div>
					<div class="vllongTitle">
						<a href="/watch?v=UiPhfbZsS54"  title="WTTC 2008 table tennis best points.... enjoy">WTTC <b>2008 table tennis</b> best points.... enjoy</a>
					</div>
				</div>

									
				<div  class="vldesc">
					the WTTC <b>2008 table tennis</b> best points.... enjoy <b>...</b> WTTC <b>2008 table tennis</b> best points extreme ma lin <b>...</b>
				</div>
			</div>

			<div class="vlclearaltl"></div>



		</div>

		<div class="vlfacets">
			<div class="vladded">
					<span class="grayText">Added:</span> 3 months ago<br/>


			</div>
				<div><span class="grayText vlfromlbl">From:</span><span class="vlfrom"><a href="/user/kioka2" >kioka2</a></span></div>
				<div class="clearL"></div>

			<span class="grayText">Views:</span> 59,747<br/>



			<div class="video-thumb-duration-rating">
								

	<div>

	<img class="ratingVS ratingVS-5.0" alt="4.9" src="http://s.ytimg.com/yt/img/pixel-vfl73.gif" />



	</div>





				<div class="runtime">07:26</div>
			</div>

								<div class="clear"></div>
				<div class="vlcategory">
					<span class="smgrayText">More in</span> <a href="/results?search_category=17&search_query=table%20tennis%202008" >Sports</a>
				</div>

		</div>

		<div class="vlclearaltl"></div>



	</div> <!-- end vEntry -->


		</div>
		<div class="vlclear"></div>




			

		<div class="vlcell" style="width:24.9%">
			


	

	

	<div class="vlentry" >




		<div class="vlcontainer"><div class="v120WideEntry"><div class="v120WrapperOuter"><div class="v120WrapperInner"><a href="/watch?v=EcIsmXhduVc" ><img src="http://i.ytimg.com/vi/EcIsmXhduVc/default.jpg" class="vimg120" title="Highlights of the 2008 Asian Olympic Table Tennis Quali" alt="video"></a><div class="addtoQL90"><a href="#"  ql="EcIsmXhduVc" title="Add Video to QuickList"><img class="QLIconImg" src="http://s.ytimg.com/yt/img/pixel-vfl73.gif" border="0"
	onclick="clicked_add_icon(this, this.parentNode.getAttribute('ql'), 0);_hbLink('QuickList+AddTo','na');return false;"
	onmouseover="mouseOverQuickAdd(this, this.parentNode.getAttribute('ql'))"
	onmouseout="mouseOutQuickAdd(this, this.parentNode.getAttribute('ql'))"></a><div class="hid quicklist-inlist">in <a href="/watch_queue?all">QuickList</a></div></div>

</div></div>
			</div>


			<div class="vldescbox">
				
				<div  class="vltitle">
					<div class="vlshortTitle">
						<a href="/watch?v=EcIsmXhduVc"  title="Highlights of the 2008 Asian Olympic Table Tennis Quali">Highlights of the <b>2008</b> Asian Olympic <b>Table Tennis</b> Quali</a>
					</div>
					<div class="vllongTitle">
						<a href="/watch?v=EcIsmXhduVc"  title="Highlights of the 2008 Asian Olympic Table Tennis Quali">Highlights of the <b>2008</b> Asian Olympic <b>Table Tennis</b> Quali</a>
					</div>
				</div>

									
				<div  class="vldesc">
								<span  id="BeginvidDescEcIsmXhduVc">
	highlights of the <b>2008</b> Asian Olympic <b>Table Tennis</b> Qualification. You will enjoy it! It concludes Wang Nan and Wang Liqin <b>...</b>
	</span>

			<span  id="RemainvidDescEcIsmXhduVc" style="display: none">In this video you can see the highlights of the 2008 Asian Olympic Table Tennis Qualification. You will enjoy it! It concludes Wang Nan and Wang Liqin.</span>
			<span id="MorevidDescEcIsmXhduVc" class="smallText">(<a href="#" class="eLink" onclick="showDiv('RemainvidDescEcIsmXhduVc'); hideDiv('MorevidDescEcIsmXhduVc'); hideDiv('BeginvidDescEcIsmXhduVc'); showDiv('LessvidDescEcIsmXhduVc'); return false;">more</a>)</span>
			<span id="LessvidDescEcIsmXhduVc" style="display: none" class="smallText">(<a href="#" class="eLink" onclick="hideDiv('RemainvidDescEcIsmXhduVc'); hideDiv('LessvidDescEcIsmXhduVc'); showDiv('BeginvidDescEcIsmXhduVc'); showDiv('MorevidDescEcIsmXhduVc'); return false;">less</a>)</span>
	

				</div>
			</div>


Нужно получить значения в массив либо между <div class="vldesc"> и </div>, либо между <div class="vldesc"><span id="BeginvidDesc.*?"> и </span>.

Оно может встречаться и так и так, нужно получить текст описании роликов (это с YouTube исходник).

Вот что должно быть на выходе:

Код: Выделить весь код
$avArray[0] = "WTTC <b>2008 table tennis</b> best points.... enjoy <b>...</b> WTTC <b>2008 table tennis</b> best points extreme ma lin <b>...</b>"
$avArray[1] = "highlights of the <b>2008</b> Asian Olympic <b>Table Tennis</b> Qualification. You will enjoy it! It concludes Wang Nan and Wang Liqin <b>...</b>"
У меня получилось сделать только так:

Код: Выделить весь код
#include <Array.au3>

$sSource = FileRead("Src.txt")

$avArray = StringRegExp($sSource, '(?i)(?s)<div  class="vldesc">.*?[(<span  id="BeginvidDesc.*?">|)](.*?)</span>', 3)

_ArrayDisplay($avArray)
Как видно, добавляется в начало span id="BeginvidDesc....">, а иногда и в конце тоже добавляются теги. Реально ли одно-разовым вызовом StringRegExp (и без дополнительных циклов) получить то что нужно?


Алексей Н.,
Цитата Алексей Н.:
Есть ли возможность принудительно завершить скрипт через какое-то время, если не были приняты никакие действия? »
См. функцию _Timer_SetTimer() в справке.

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

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

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


Отправлено: 20:07, 04-07-2008 | #700



Компьютерный форум 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




 
Переход