Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: Maza Faka
Дата сообщения: 23.10.2008 07:50
timsky

Цитата:
Появилась необходимость привязки процесса к определенному ядру.

Заинтересовало У меня на одной из машин установлен процессор с технологией "hyper-threading" (с программной эмуляцией второго ядра). В общем вот, что получилось:

Код: #include <WinAPI.au3>

Global Const $PROCESS_ALL_ACCESS = 0x1F0FFF

$sPID = Run("notepad.exe")
ProcessWait($sPID)

$hProc = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, False, $sPID)
$aRet = _WinAPI_GetProcessAffinityMask($hProc)

MsgBox(0, "", $aRet[0] & @LF & _
$aRet[1] & @LF & _
$aRet[2] & @LF) ;Смотрим, что нам вернула функция _WinAPI_GetProcessAffinityMask, если индексы 1 и 2 равны 1, _
;то значит процессор одноядерный и дальнейшие телодвижения бессмысленны

;_WinAPI_SetProcessAffinityMask($hProc, 0x01) ;Задаём соотвествие для 1-го ядра
;_WinAPI_SetProcessAffinityMask($hProc, 0x02) ;Задаём соотвествие для 2-го ядра

_WinAPI_SetProcessAffinityMask($hProc, 0x03) ;Задаём соотвествие для обеих ядер

_WinAPI_CloseHandle($hProc)
Автор: Tipulatoid
Дата сообщения: 23.10.2008 09:47
Можно ли подружить RunWait с StdoutRead? В хелпе и на офф. форуме нашел только связку Run + StdoutRead В моем примере (см. выше) пытаюсь обойтись без промежуточного файла incomeletters.txt. Т.е. напрямую читать вывод утилиты pop3recv.exe , скачивающей письма и затем обрабатывать этот вывод кодом, предложенным Visitor
Автор: Maza Faka
Дата сообщения: 23.10.2008 11:45
Tipulatoid

Цитата:
Можно ли подружить RunWait с StdoutRead?

Можно в цикле отслеживать наличие процесса функцией ProcessExists
Автор: arr1val
Дата сообщения: 23.10.2008 11:50
ViSiToR
Спасибо!
Автор: timsky
Дата сообщения: 23.10.2008 13:24
Maza Faka
Спасибо... щас проснусь и поковыряю то, что ты дал

Цитата:
А не проще ли загрузить файл используя функцию InetGet()?

Это как? Вот например, я слепил аплоадер файлов на rapidshare.com и хочу, чтобы он в фоне все это делал. Как при помощи InetGet это реализовать не представляю себе.
Даже если на рапиде этот трюк как-то можно приладить - мне все равно это нужно для более сложной софтины, которая очень много действий делает при помощи _IE...().
Да и вообще неужели это никак по другому не обойти? Вот для примера мой аплоадер на рапиду:

Код: #include <IE.au3>
#include <Constants.au3>

AutoItSetOption('TrayAutoPause', 0)
AutoItSetOption("TrayOnEventMode", 1)
AutoItSetOption('TrayIconDebug', 1)
AutoItSetOption('WinTitleMatchMode', 2)
TrayItemSetText($TRAY_ITEM_PAUSE, "Pause")
TrayItemSetText($TRAY_ITEM_EXIT, "Exit")

If $CmdLineRaw = '' Then Exit

;======= Wait for finish of running copy ==========

While WinExists(@ScriptName)
WinWaitClose(@ScriptName)
Sleep(1000)
WEnd

AutoItWinSetTitle(@ScriptName)

;========= Reading CONFIG ========

$debug = IniRead(@ScriptDir & '\config.ini', 'Main', 'Debug', '')
If $debug = '' Or $debug = 0 Then
$debug = 0
Else
$debug = 1
EndIf

$tip = IniRead(@ScriptDir & '\config.ini', 'Main', 'Tip', '')
If $tip = '' Or $tip = 0 Then
$tip = 10000
Else
$tip = $tip * 1000
EndIf

;============= MAIN ===============

TraySetToolTip('Rapida Uploader')

Global $rapida, $file

$file
= StringReplace($CmdLineRaw, '"', '')
;MsgBox(64, $CmdLineRaw, $file)

_IELoadWaitTimeout(3600000)

Submit()

While 1
$body = _IEBodyReadText($rapida)
Select
Case
StringInStr($body, 'to delete file')
$link = StringRegExp($body, '.*(http://rapidshare.com/files/.*)\r\n.*', 1)
$downLink = $link[0]
$link = StringRegExp($body, '.*?killcode=(.*)\r\n.*', 1)
$delLink = $downLink & '?killcode=' & $link[0]
If @error Then
MsgBox(16, 'WTF???', 'Can not get links!')
ExitLoop
EndIf

$toFile = $downLink & @CRLF & $delLink
$dump
= FileOpen($file & '.txt', 2)
FileWrite($dump, $toFile)
FileClose($dump)
ClipPut($downLink)
TrayTip('Dowload Link is in ClipBoard.', 'Download and Delete links are saved in ' & @CRLF & $file & '.txt', 5, 1)
Sleep($tip)
ExitLoop
Case
StringInStr($body, 'no file chosen')
_IEAction($rapida, 'quit')
Submit()
Case Else
MsgBox(16, '', 'WTF?')
_IEAction($rapida, 'quit')
Submit()
EndSelect
Sleep(500)
WEnd

_IEAction($rapida, 'quit')

Func Submit()
$rapida = _IECreate('http://www.rapidshare.com/', 0, $debug)
$form = _IEFormGetObjByName($rapida, 'ul')
$fileBox = _IEFormElementGetObjByName($form, 'filecontent')
$clip = ClipPut($file)
_IEAction($fileBox, 'focus')

If $debug = 0 Then _IEAction($rapida, 'visible')
Send('^v')
If $debug = 0 Then _IEAction($rapida, 'invisible')

_IEFormSubmit($form, 0)
_IELoadWait($rapida)
EndFunc ;==>Submit
Автор: Tipulatoid
Дата сообщения: 23.10.2008 13:43
Maza Faka
Так?
test.au3 :
Код: #include <Constants.au3>

$POP3RecvArgs = "pop3recv.exe -s pop.yandex.ru -p 110 -u delta2-greit -w не_скажу -uidl -dw"

$foo = Run ($POP3RecvArgs, @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

While ProcessExists ("pop3recv.exe") <> 0
Sleep
(10)
$line =
StdoutRead($foo)
; If @error Then ExitLoop
If $line <> "" Then
ConsoleWrite ($line & @CRLF)
FileWriteLine ("test.txt", $line)
EndIf
WEnd
Автор: NIKZZZZ
Дата сообщения: 23.10.2008 13:52
Tipulatoid
Совершенно не нужно проверять ProcessExists, достаточно проверить @error после StdoutRead пример:


Код: #include <Constants.au3>

$foo = Run(@ComSpec & " /c dir c:\windows", @SystemDir, @SW_HIDE, $STDOUT_CHILD)
$line=""
While 1
$line &= StdoutRead($foo)
If @error Then ExitLoop
Wend
MsgBox(0, "STDOUT read:", $line)
Автор: Tipulatoid
Дата сообщения: 23.10.2008 14:14
NIKZZZZ
Ну, да, точно, чего я мудрю? Просто пример из справки.
NIKZZZZ, Maza Faka спасибо
PS Только проц этот код грузит на 100%. Sleep (10) можно добавить? Не просплю ли какую строку вывода?
Автор: ViSiToR
Дата сообщения: 23.10.2008 15:01
Tipulatoid 08:49 23-10-2008
Цитата:
Это тоже верная строка, и аттачи должны выдираться.

После Form + добавь (?:.*?<|), а после (.*?) добавь (?:>|), но также нужно перенести (?s) после проверки «From:»...


Цитата:
Для пущей надежности хотелось бы добавить то условие, что подстрока From: обязана быть в начале строки

Почитай справку по RegExp, статьи с шапки ... начало строки может обозначаться символом ^ и $ если в начале условия добавить (?m)


Код:
$sAllowed_Email = "delta-greit[сами_знаете_что]yandex.ru"
$sReadFile = FileRead("incomeletters.txt")
$aContents = StringRegExp($sReadFile, '(?m)^From: +(?:.*?<|)(.*?)(?:>|)(?s)\s+.*?filename="(.*?)".*?\r\n\r\n(.*?)\r\n\r\n', 3)

$iUbound = UBound($aContents)-1

For $i = 0 To $iUbound
;Каждые 3 единицы проверяем от кого, и если совпадает пишем в файл
If Mod($i, 3) = 0 And $i+2 <= $iUbound And $aContents[$i] = $sAllowed_Email Then _
FileWrite($aContents[$i+1] & ".txt", $aContents[$i+2])
Next
Автор: NIKZZZZ
Дата сообщения: 23.10.2008 15:40
Tipulatoid

Цитата:
PS Только проц этот код грузит на 100%. Sleep (10) можно добавить? Не просплю ли какую строку вывода?

Если только буфер не переполнится. В теории хоть Sleep(1000) должен работать. Хотя не знаю, что будет если еще такой-же подобный скрипт будет параллельно выбрасывать данные в поток или их перехватывать.


Автор: ViSiToR
Дата сообщения: 23.10.2008 17:02
NIKZZZZ 16:40 23-10-2008
Цитата:
В теории хоть Sleep(1000) должен работать

Вообще то нет, проверено на практике, 10 и больше уже могут нарушить чтение с потока. Тут видимо разработчикам стоило бы подумать о добавлении опции в StdOutRead для ожидания конца потока (типа AtEndOfStream), и соответсвенно добавить встроенную паузу (как в GUIGetMsg).
Автор: NIKZZZZ
Дата сообщения: 23.10.2008 17:09
ViSiToR

Цитата:
Вообще то нет, проверено на практике, 10 и больше уже могут нарушить чтение с потока.

Имеется ввиду, что буфер потока уничтожается, если к нему нет обращения? Или StdOutRead имеет timeout ожидания?


Автор: telyakov
Дата сообщения: 23.10.2008 18:24
Ребята, приветик от новичка!

Опять есть скромный вопрос, перечитал всё на форуме, но не нашел, хотя видел несколько мест:

Как запустить на выполниение разархивацию rar-архива ExpressBurn.rar
лежащего в поддиректории скрипта\Pref в в подкаталог Temp?

Под FAR работает строка "rar x ExpressBurn.rar Temp > log.txt"

Из AutoIT не могу запустить такой код:

FileChangeDir(@ScriptDir & "\Pref")
Run("rar.exe x ExpressBurn.rar Temp > log.txt", @ScriptDir & "\Pref")
или
ShellExecute('rar.exe', 'x ExpressBurn.rar Temp > log.txt', @ScriptDir & "\Pref")

Заранее Спасибо от Алика телякова
Автор: deadcat
Дата сообщения: 23.10.2008 20:46
Статьи по AutoIt для начинающих из журнала системный администратор за Апрель - Июль 2005 "Автоматизация MS Windows, или AutoIt как мечта эникейщика":
http://www.av5.com/journals-magazines-online/1/52/543
http://www.av5.com/journals-magazines-online/1/53/566
http://www.av5.com/journals-magazines-online/1/3/30

Добавте в шапку, плиз.
Автор: ViSiToR
Дата сообщения: 23.10.2008 23:23
NIKZZZZ 18:09 23-10-2008
Цитата:
Имеется ввиду, что буфер потока уничтожается,  если к нему нет обращения?

Не уничтожается, а просто не заполняется Ведь пауза включена, в это время в поток могут выводиться данные.

telyakov 19:24 23-10-2008
Цитата:
з AutoIT не могу запустить такой код:

Можно через @ComSpec:


Код: FileChangeDir(@ScriptDir & "\Pref")
Run(@ComSpec & ' /c rar.exe x ExpressBurn.rar Temp > log.txt', @ScriptDir & "\Pref")
Автор: NIKZZZZ
Дата сообщения: 23.10.2008 23:44
ViSiToR

Цитата:
Не уничтожается, а просто не заполняется Ведь пауза включена, в это время в поток могут выводиться данные.

Не понял. Если в поток выводятся данные, они буферируются, это отдельный процесс. Данные читаются не из потока, а из буфера. Иначе даже Sleep(1) должна привести к потере одиночных символов. Может все ограничено размером буфера?

Автор: ViSiToR
Дата сообщения: 24.10.2008 00:28
NIKZZZZ 00:44 24-10-2008
Цитата:
даже Sleep(1) должна привести к потере одиночных символов

Ну, за это время как бы не успевает что-то теряться (проверял с одним символом) .. в любом случае, Sleep(1) будет надёжнее, и процессор не будет нагружать.
Автор: timsky
Дата сообщения: 24.10.2008 01:41
Нашел кое-что насчет Afiinity. Вобщем, серверные Винды и XP x64 (на 2003 основан) имеют возможность запуска процесса с привязкой к опр. ядру.
CMD.exe содержит команду strart, которая и это умеет:

Цитата:
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/AFFINITY <hex affinity>] [/WAIT] [/B] [command/program]
[parameters]

AFFINITY The new application will have the specified processor
affinity mask, expressed as a hexadecimal number.

Автор: Tipulatoid
Дата сообщения: 24.10.2008 02:26
ViSiToR
Большое спасибо за регэкспы. Я их изучу, со временем
Автор: ssgdvlpr
Дата сообщения: 24.10.2008 09:25
Как написать скрипт по изменению распаложения каталога "Мои документы". Не нашел как попасть в свойства "Мои документы"
Автор: Maza Faka
Дата сообщения: 24.10.2008 09:55
ssgdvlpr

Код:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Personal"="C:\\Documents and Settings\\UserName\\Мои документы"


Автор: ssgdvlpr
Дата сообщения: 24.10.2008 14:02
Maza Faka
Да скрипт переписывает это значение, а когда выбираешь мои документы в проводнике, попадаешь по старому распаложению. И свойства ярлыка Мои документы остались прежние. Как сделать, чтобы Мои документы работали по новому месту?
Автор: telyakov
Дата сообщения: 24.10.2008 15:59
Ребята!

Огромное Спасибо ViSiToRу! Помогло однозначно!


Код:
FileChangeDir(@ScriptDir & "\Pref")
RunWait(@ComSpec & ' /c rar.exe x ExpressBurn.rar Temp > log.txt', @ScriptDir & "\Pref")
Автор: Maza Faka
Дата сообщения: 25.10.2008 09:07
ssgdvlpr

Цитата:
Да скрипт переписывает это значение, а когда выбираешь мои документы в проводнике, попадаешь по старому распаложению

Хм... попробуй так:

Код: _MoveMyDocs("d:\MyDocs")

Func _MoveMyDocs($sPath)
If Not FileExists($sPath) Then
If
DirCreate($sPath) = 0 Then Return SetError(1, 0, 0)
EndIf

FileMove(@MyDocumentsDir & "\*.*", $sPath)

RegWrite("HLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DocFolderPaths", @UserName, "REG_SZ", $sPath)

RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Personal", "REG_SZ", $sPath)
RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "My Pictures", "REG_SZ", $sPath & "\My Pictures")
RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "My Music", "REG_SZ", $sPath & "\My Music")

RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Personal", "REG_SZ", $sPath)
RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "My Pictures", "REG_SZ", $sPath & "\My Pictures")
RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "My Music", "REG_SZ", $sPath & "\My Music")

Return 1
EndFunc
Автор: ssgdvlpr
Дата сообщения: 25.10.2008 16:44
Maza Faka
Благодарю, сработало!
Изменил на
FileMove(@MyDocumentsDir & "\*.*", $sPath, 9)
чтобы перемещал вместе с папками
и добавил перегрузку сразу в скрипт
Shutdown(6)

Еще задачка
Как сменить букву диска, например с D: на М:
Автор: Tipulatoid
Дата сообщения: 26.10.2008 01:32
ssgdvlpr

Цитата:
Как сменить букву диска, например с D: на М:


Код: _MoveMyDocs("m:\MyDocs")
Автор: ssgdvlpr
Дата сообщения: 26.10.2008 05:55
Tipulatoid
Хорошо, это я понял.
Мне надо не в этой программе.
Я хочу полностью переименовать диск D: на М:. У меня все настроено на М:. А когда устававливаю винду, он становится D: или другой свободный.

Добавлено:
И ещё несколько вопросов
1. Как выполнять WinWaitActive ( "title" [, "text" [, timeout]] ), если title одинаковый, а видимого text нет, как например в Acronis
2. как выбрать в SysListView322 "управления дисками" конкретный диск (или например в Acronis при создании задания - выбор диска расположения архива)
Автор: Tipulatoid
Дата сообщения: 26.10.2008 17:58
Visitor
Я понимаю, что достал уже тебя со своими аттачами. Но туго у меня рэгэкспы идут. Честно скачал книгу Фридла. Простые упражнения вроде идут. Но как к своей задаче подступиться - не имею понятия. Помоги, пож.
Задача чуть изменилась - я отказался от использования утилиты pop3recv.exe , т.к. обнаружил на офф. форуме UDF <_pop3.au3>
теперь имею например такие текстовые файлы:

z1_full.txt
[more]
Код: Received: from smtp11.yandex.ru (smtp11.yandex.ru [213.180.223.93])
    by mxback21.yandex.ru (Postfix) with ESMTP id C8ADB1D800D
    for <delta2-greit[сами_знаете_что]yandex.ru>; Sun, 26 Oct 2008 15:26:50 +0300 (MSK)
Received: from 58-079.dialup.primorye.ru ([81.2.58.79]:51209 "EHLO
a62fc6637610461" smtp-auth: "delta-greit" TLS-CIPHER: <none>
TLS-PEER-CN1: <none>) by mail.yandex.ru with ESMTP id S5095596AbYJZM0s
(ORCPT <rfc822;delta2-greit[сами_знаете_что]yandex.ru>);
Sun, 26 Oct 2008 15:26:48 +0300
X-Yandex-Spam: 1
X-Yandex-Front: smtp11
X-Yandex-TimeMark: 1225024008
X-BornDate: 1154552400
X-Yandex-Karma: 0
X-Yandex-KarmaStatus: 0
X-MsgDayCount: 8
X-Comment: RFC 2476 MSA function at smtp11.yandex.ru logged sender identity as: delta-greit
Date: Sun, 26 Oct 2008 22:26:42 +1000
From: delta-greit[сами_знаете_что]yandex.ru
To: delta2-greit[сами_знаете_что]yandex.ru
X-Mailer: Blat v2.6.2 w/GSS encryption, a Win32 SMTP/NNTP mailer http://www.blat.net
Message-ID: <01c93766$Blat.v2.6.2$1aa2e126$f28e16946f4[сами_знаете_что]yandex.ru>
Subject: =?Windows-1251?B?8e/g8ejh7iDn4CDv7uzu+fw=?=
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="=_BlatBoundary-9eALrKNKBRQkeS69PRwPa"

This is a multi-part message in MIME format.

--=_BlatBoundary-9eALrKNKBRQkeS69PRwPa
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=Windows-1251

=CF=F0=E8=E2=E5=F2
=EA=E0=EA =E4=E5=EB=E0=3F2

--=_BlatBoundary-9eALrKNKBRQkeS69PRwPa
Content-Type: application/octet-stream;
name="2_Slavinka4_per_7.zip"
Content-Disposition: ATTACHMENT;
filename=2_Slavinka4_per_7.zip
Content-Transfer-Encoding: BASE64

UEsDBBQAAAAIABE8fDeSyHbWZw0AAKIdAAAJAH0ARGVsdGEuZGFsU0RoAKwAAAAACAAIFZzb
Y2RgaRFhYGAwYIAAHyBmZAUzWUWBxD4WO6MvAbtK2J9aa39hxC3HyMTAwMSQwMACkhWQYPjP
KM8AEgOpVQASCiC2gAhEnBEiLgRVu5JBCEWtIlTtfkZhuFpuIAEAVVQNAAfxjExHfwZNR0mj
jgbQ/27iSma3IPxbs+les4Lwb8Hk5GQE4f8KjZ8P0P+KWC4eQP9ISklLicmISgqJCHHOTDd3
Z48vuLPUYG0wyQdliO4WMF6CJvoy9QGktp+J1u49aEajVFnoU2tE7tMZPtwDmsh9fvUrE7To
z/n0aJZfGXFDYGvDjzMTyT8KEthrwaXJzmhHr1eHxhF+0xdvJb5w3X+Q6z5Lx75w3Reu+//I
fy/X/QtQSwECFwsUAAAACAARPHw3ksh21mcNAACiHQAACQARAAAAAAAAACAAtoEAAAAARGVs
dGEuZGFsU0QEAKwAAABVVAUAB/GMTEdQSwECFwsUAAAACAARPHw3UBg3pOkPAABgJwAADAAR
AAAAAAAAACAAtoELDgAAQWN0aW9uMTIuZGFsU0QEAKwAAABVVAUAB/GMTEdQSwUGAAAAAAIA
AgCTAAAAmx4AAAAA

--=_BlatBoundary-9eALrKNKBRQkeS69PRwPa--
.
Автор: IgRo
Дата сообщения: 26.10.2008 21:17
COM функция должна возвращать массив однако на выходе 0
Кто нибудь сталкивался с такой проблемой?
Автор: NIKZZZZ
Дата сообщения: 26.10.2008 22:19
Tipulatoid

Цитата:
Но туго у меня рэгэкспы идут.

Ставишь себе RegexBuddy , найти можно в варезнике, грузишь в него свой z1_full.txt и развлекаешься с рэгэкспами.



Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.