Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
эээ не пашет »ну не знаю, у меня все пашет - проверил дома на диалапе и на работе через прокси... сверяй настройки: WinXP SP2 + IE6 + AutoIT v3.2.10.0. Чтобы разговор был предметным - отключай в первом запросе флаг невидимости и смотри в каком месте отходит от плана выполнения.
Подскажите,пожалуйста,как средствами AutoIT можно узнать количество байт,принятых через Dial-Up соединение? »Попробуй следующий UDF:MsgBox(0, "Статистика подключения:", "Получено "& Int(_Net_InterfaceBytes("Realtek", 1)/(1024*1024)) &" мегабайт")
; Возвращает количество байт, отправленых или принятых через сетевой интерфейс
; $sInterfaceName - имя или часть имени сетевого интерфейса (не соединения!)
; в свойствах соединения "подключаться через:"
; $iFlag - что включать в расчет:
; 1 - принято,
; 2 - отправлено,
; 3 - всего.
Func _Net_InterfaceBytes($sInterfaceName, $iFlag = 3)
Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2"), $iBytes=0
Local $colItems = $objWMIService.ExecQuery("SELECT Name,BytesReceivedPersec,BytesSentPersec FROM Win32_PerfRawData_Tcpip_NetworkInterface", "WQL", 0x30)
If Not(IsObj($colItems)) Then Return SetError(1, 0, -1) ; Ошибка WMI
For $objItem In $colItems
If StringInStr($objItem.Name, $sInterfaceName) Then
If BitAND($iFlag, 1) Then $iBytes += $objItem.BytesReceivedPersec
If BitAND($iFlag, 2) Then $iBytes += $objItem.BytesSentPersec
Return $iBytes
EndIf
Next
Return SetError(2, 0, -1) ; Ошибка: интерфейс не найден
EndFunc ; --> _Net_InterfaceBytes
Creat0R, Оказывается, любая обработка строк (функции String*) будет в несколько раз замедлена если вы используете «Opt("ExpandEnvStrings", 1)» или «Opt("ExpandVarStrings", 1)» »Ну... в принципе, логично. Т.е. нужно в UDF-ах выставлять только при необходимости и не забывать возвращать обратно...
Кстати (не могу пробиться к тебе в ПМ) если разберешься насчет BeginPaint / EndPaint маякни сюда или в ПМ... а то зацепило :)
amel27, в принципе, логично
Согласен, но об этом нужно было самому догадаться, мне пришлось распотрашить весь скрипт (более 5000 строк!), пока не дошёл до самого верху, где выставил вызов функции уже перед всеми Opt и Include, там то я и понял, что именно Opt и вызывает такую задержку. Нужно бы разработчикам на заметку кинуть мои доводы :), чтобы где нибудь в справке написали об этом. Теперь я начинаю понимать Valik'а, он постоянно возмущается, мол зачем внедрили Opt изначально...
нужно в UDF-ах выставлять только при необходимости и не забывать возвращать обратно...
Так и сделал ;)
не могу пробиться к тебе в ПМ
Немного почистил, на днях удалю все ПМ, нужно бы сначала сохранить всё, нативная функция кстати работает некорректно :(
если разберешься насчет BeginPaint / EndPaint маякни сюда или в ПМ
Хорошо, если ты не против, я на оф. форуме оставлю в моей теме твоё решение, и как бы между прочим спрошу об этой проблеме :), правда если честно не успел разобраться какой именно...
Creat0R
если ты не против, я на оф. форуме оставлю в моей теме твоё решение »не против, все равно некогда - везде не поспеешь...
если честно не успел разобраться какой именно »сравни обработку WM_PAINT у меня и в примере из книги для Hello1 - тот что в книге у меня не прокатил
DENoszone
07-04-2008, 11:37
amel27, а что у тебя он делает???
он делает заход на нигм...прописывает там тайтл из яндекса...и и делает поиск?
где флаг не видимости?=)
что у тебя он делает??? »так понятней?#include <IE.au3>
; Открытие окна Yandex (снял флаг невидимости и поставил ожидание загрузки - смотри справку!)
$oIE = _IECreate("http://www.yandex.ru/yandsearch?random=071215722&stype=www&randomtext=1&lr=187", 0, 1, 1, 0)
MsgBox(0, "Открытие окна Yandex", "Шаг 1 выполнен, проверьте результат!")
; Обновление окна IE
_IEAction ($oIE, "refresh")
MsgBox(0, "Обновление окна IE", "Шаг 2 выполнен, проверьте результат!")
; Читаем титул
$sTitle = _IEPropertyGet($oIE, "title")
MsgBox(0, "Читаем титул", 'Шаг 3 выполнен, титул окна: "'& $sTitle &'"')
; Выдергиваем из титула искомую фразу
$sTextFind = StringStripWS(StringReplace(_IEPropertyGet($oIE, "title"),"Яндекс:", ""), 3)
MsgBox(0, "Выдергиваем из титула искомую фразу", 'Шаг 4 выполнен, фраза: "'& $sTextFind &'"')
; Открытие окна Nigma
$oIE = _IECreate("http://nigma.ru", 0, 1, 0, 0)
WinSetState("", "", @SW_MAXIMIZE)
_IELoadWait($oIE)
MsgBox(0, "Открытие окна Nigma", "Шаг 5 выполнен, проверьте результат!")
; Вставка в элемент формы найденной фразы
$oForm = _IEFormGetCollection($oIE, 0)
$oElement = _IEFormElementGetObjByName($oForm, "s")
_IEFormElementSetValue($oElement, $sTextFind)
MsgBox(0, "Вставка в элемент формы найденной фразы", "Шаг 6 выполнен, проверьте результат!")
; Выполнение поиска
_IEFormSubmit($oForm)
MsgBox(0, "Выполнение поиска", "Шаг 7 выполнен, проверьте результат!")
DENoszone
07-04-2008, 23:46
круто.а проверку можешь сделать?
ну что бы при заходе авторизовалося...
и что бы проверялось что какое мыло написано в профеле если к примеру qwe@mail.ru то продолжать работу..если нет..то заканчивать
Нужно бы разработчикам на заметку кинуть мои доводы
Вроде кинул (http://www.autoitscript.com/forum/index.php?s=&showtopic=62035&view=findpost&p=502999) :)
сравни обработку WM_PAINT у меня и в примере из книги для Hello1 - тот что в книге у меня не прокатил
Сравнил, кажется понял что имеется в виду, но у меня не полчилось, пробовал примерно так:
; Код оконной процедуры нашего оконного класса
Func MsgHelloWndProc($hWnd, $uMsg, $wParam, $lParam)
Local $aRet, $stPaint, $ahDC, $tRect, $sDrawText = "Hello, World!"
Switch $uMsg
Case $WM_PAINT
$stPaint = DllStructCreate("int;int;long;long;long;long;int;int;byte[32]")
$ahDC = DllCall("user32.dll", "int", "BeginPaint", "hwnd", $hWnd, "ptr", _
DllStructGetPtr($stPaint))
_WinAPI_DrawText($ahDC[0], $sDrawText, $stPaint, BitOR($DT_SINGLELINE, $DT_CENTER, $DT_VCENTER))
DllCall("user32.dll", "int", "EndPaint", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPaint))
; освобождаем контекст устройства
_WinAPI_ReleaseDC($hWnd, $ahDC[0])
Case $WM_CLOSE
_WinAPI_DestroyWindow($hWnd)
Case $WM_DESTROY
; $aRet = DllCall("user32.dll", "none", "PostQuitMessage", "int", 0 )
Case Else
Return _WinAPI_DefWindowProc($hWnd, $uMsg, $wParam, $lParam) ; передаем "чужие" сообщение дальше на обработку
EndSwitch
Return 0
EndFunc ; ==> MsgHelloWndProc
На оф. форуме оставил (http://www.autoitscript.com/forum/index.php?s=&showtopic=67572&view=findpost&p=503162) твой пример.
amel27,
Во, так вроде работает:
; Код оконной процедуры нашего оконного класса
Func MsgHelloWndProc($hWnd, $uMsg, $wParam, $lParam)
Local $aRet, $stPaint, $ahDC, $tRect, $sDrawText = "Hello, World!"
Switch $uMsg
Case $WM_PAINT
$stPaint = DllStructCreate("int;int;long;long;long;long;int;int;byte[32]")
$ahDC = DllCall("user32.dll", "int", "BeginPaint", _
"hwnd", $hWnd, "ptr", DllStructGetPtr($stPaint))
$tRect = _WinAPI_GetClientRect($hWnd) ; получаем координаты клиентской области
_WinAPI_DrawText($ahDC[0], $sDrawText, $tRect, BitOR($DT_SINGLELINE, $DT_CENTER, $DT_VCENTER))
DllCall("user32.dll", "int", "EndPaint", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPaint))
Case $WM_CLOSE
_WinAPI_DestroyWindow($hWnd)
Case $WM_DESTROY
; $aRet = DllCall("user32.dll", "none", "PostQuitMessage", "int", 0 )
Case Else
Return _WinAPI_DefWindowProc($hWnd, $uMsg, $wParam, $lParam) ; передаем "чужие" сообщение дальше на обработку
EndSwitch
Return 0
EndFunc ; ==> MsgHelloWndProc
:)
Ну или я неверно понял о чём вообще речь http://files.myopera.com/Creat0R/Opera_AC/Icons/Kolobki/blush2.gif
DENoszone
увы, я не телепат - продолжать работу чего?... в каком профиле?..
слишком много мест, где можно хранить мыло - свойства учетки локальной, доменной, аутглюк, бат, etc.
Creat0R
или я неверно понял о чём вообще речь »не, у тебя как раз все правильно, это я накосячил в определении структуры PAINTSTRUCT (не заметил размерности [32]) :tomato2: так что вопрос снимается - одна голова хорошо, а две лучше... зато узнал роль BeginPaint и чем ее можно заменить. :)
DENoszone
08-04-2008, 09:27
amel27,
http://www.nigma.ru/index_menu.php?action=authorization&display=login - авторизация
http://www.nigma.ru/index_menu.php?action=authorization&display=userinfo - тут в поле проверить какое мыло если к примеру qwe@mail.ru то дальше продолжить работу... если что то другое то закрывать IE и дальше не чего не выполнять
TERMINAL
08-04-2008, 09:35
Помогите написать условие, если сегодня суббота-тогда выдаётся сообщение (при условии что эта суббота через 2 недели-тоесть сегодня 8.04.08-нужно чтобы выдалось сообщение не 12.04.08, а 19.04.08, потом 03.05.08 и т.д.) Заранее спс !
TERMINAL,
Помогите написать условие, если сегодня суббота-тогда выдаётся сообщение (при условии что эта суббота через 2 недели-тоесть сегодня 8.04.08-нужно чтобы выдалось сообщение не 12.04.08, а 19.04.08, потом 03.05.08 и т.д.) »
Не знаю верно ли понял (долго вникал в суть вышесказанного http://files.myopera.com/Creat0R/Opera_AC/Icons/Kolobki/book.gif ).. но вот:
#include <Date.au3>
$sDate = "2008/04/08"
$sNowDate = _NowCalcDate()
If @WDAY = 7 Then
If _DateDiff("w", $sDate, $sNowDate) >= 2 Then
$sMsg_Data = StringFormat("Сегодня Суббота (%s), прошло две недели с момента последней проверки:\n\n%s", $sNowDate, $sDate)
MsgBox(64, "Суббота наступила!", $sMsg_Data)
EndIf
EndIf
Хочу вставить в форму диалог выбора файла (каталога). Возможно ли реализовать это на автоите?
TERMINAL
08-04-2008, 10:40
Creat0R, Спасибо огромное ! Чуть подправил под себя и получилось то что хотел...Не ожидал что так быстро поможешь...
Mogidin, вставить в форму диалог выбора файла
FileOpenDialog() (http://www.autoitscript.com/autoit3/docs/functions/FileOpenDialog.htm) / FileSelectFolder() (http://www.autoitscript.com/autoit3/docs/functions/FileSelectFolder.htm)?
Воистину могат и богуч AutoIt Help.
Сколько ни смотри, что-нибудь да пропустишь.
Креатору спасибо.
DENoszone
08-04-2008, 18:01
$sTextFind = StringStripWS(StringReplace(_IEPropertyGet($oIE, "title"),"Яндекс:", ""), 3)
как тут сделать что бы уберался весь текст после Яндекс:
DENoszone
тут в поле проверить какое мыло если к примеру qwe@mail.ru то дальше продолжить работу... если что то другое то закрывать IE и дальше не чего не выполнять »к сожалению твоя NIGMA не хочет меня регистрировать, поэтому проверить нет возможности :tongue:
как тут сделать что бы уберался весь текст после Яндекс: »ты хоть понял что спросил?... собственно ответ: $sTextFind = "Яндекс:" (все что после него убрал) :biggrin:
TERMINAL
09-04-2008, 11:58
Возможно ли такое, на одном компе работают юзеров 15...Хотелось бы между ними сделать простенький час...т.е. определяется юзер примерно так If @UserName="User11" Then ....от которого идёт сообщение и передаётся другому юзеру...???
TERMINAL
на оффсайте навалом вариантов разной степени сложности, к примеру:
Proper Telnet Chat (http://www.autoitscript.com/forum/index.php?showtopic=54147)
P2P-Style Chat, Serverless Chat Client for LANs (http://www.autoitscript.com/forum/index.php?showtopic=60085)
TCP Chat (http://www.autoitscript.com/forum/index.php?showtopic=52121)
если хочешь поваять сам могу предложить простой алгоритм а-ля Web-чат без сетевых приблуд:
- расшарить для всех папку, где создается один файл блога...
- юзер запускает чат, если он первый, то инициализирует текстовик;
- окно разделено на две части: одна для набора сообщений, вторая отображает текстовик;
- по клику "отправить" сообщение добавляется в конец файла;
- все клиенты периодически обновляют текст на экране.
главное, чтобы клиент не занимал долго файл при отправке сообщения (с правами записи) - добавил текст и сразу освободил файл
KillHunter
10-04-2008, 12:14
Подскажите плз что нужно прописать что бы снять галочку "Desktop Shortcut"???
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.