Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
amel27,
Тот же SciTE поддерживает полный список всех служебных слов - в том числе системных UDF, а эти списки сильно меняются от версии к версии. »
Я понял о чём ты, просто под UDF я понимаю User Defined Function, но никак не встроенные функции.
Как вариант - восстановить список используемых UDF из самого скрипта »
Имхо, это может быть очень длительный процесс, мне кажется всё же лучше будет использовать полный список встроенных функции, это будет намного проще. Я слежу за всеми изменениями в новых версиях AutoIt'а, поэтому по части обновления проблем не будет. Можно даже сделать автопроверку на обновление этого списка, я просто буду куда нибудь заливать файл со списком, а программа будет сверять его с тем что на диске, и если требуется, будет обновлять его (всё это чтобы пользователь не загружал программу каждый раз по новой).
Примеры UDF, с помощью которых можно это реализовать: »
Полезные UDF, спасибо! :)
P.S
Я запустил этот скрипт под 3.2.8.1, и действительно понял почему разработчики изменили состав стандартных библиотек (убрали из них лишнее), там слишком много всего, только у одного Array.au3 сколько функции... кстати, а эти UDF не ищят больше чем на один уровень? я натравил их на скрипт с GuiConstants.au3, и они выдали список только первого уровня...
amel27,
Нашёл на оф. сайте по теме: Highlight syntax help.. (http://www.autoitscript.com/forum/index.php?showtopic=79675) и AutoIt Editor (http://www.autoitscript.com/forum/index.php?showtopic=37901)
В первом не предусмотрена раскраска объектов (к примеру $oObject.Name), скобок, и встроенных функции, но это уже начало. А во-втором я просто не могу понять что используется для раскраски, вроде Dll'ка SciLexer.dll, но не уверен.
mikola1983
16-10-2008, 12:06
как можно проверить версию ос .. проблемма в следующем нужен файл с:\program но на Win64 он лежит в х86 и естественно скрипт его не видит... как можно решить подобный недостаток
Creat0R
эти UDF не ищят больше чем на один уровень? я натравил их на скрипт с GuiConstants.au3, и они выдали список только первого уровня »гм... у меня вроде ищет по всем уровням - проверил цепочку на GuiButton.au3... а какие там вложения?
Нашёл на оф. сайте по теме »
- 1-й вариант имхо сыроват... возможности RegExp использованы лишь частично, хотя инфа для размышлений есть
- насчет Scintilla думаю ты прав, на оффсайте есть примеры (http://www.autoitscript.com/forum/index.php?showtopic=40372&hl=SciLexer.dll) использования, но это уже целый редактор получается...
mikola1983, смотри макрос @ProcessorArch
mikola1983
16-10-2008, 13:26
amel27, а как использовать эти макросы на удаленных компьютерах .. есть такая возможность.
amel27, у меня вроде ищет по всем уровням »
Извиняюсь, у меня тоже. Мне почему то казалось что там должны быть все вложения и Array, и ListView :sorry: ...
на оффсайте есть примеры использования »
Хорошие примеры, там даже файлы с таблицами синтаксиса прилагаются, правда немного устарелые. Нужно будет попробовать что-то начать...
Creat0R
у меня тоже »
тут подумал - если развить эти UDF можно сформировать список всех используемых скриптом ресурсов - констант и функций, потом отследить зависимости и оставить только используемые... т.е. что-то типа упаковки скрипта в один файл, где собрано все только действительно необходимое... как ты думаешь, повлияет ли это на размер скомпилированного скрипта?.. На оффсайте вроде обсуждался этот вопрос... давно попадался, ничего нового случайно не встречал?
Нужно будет попробовать что-то начать
я так понимаю эта DLL существенная часть SciTE, не потянет ли она за собой те же проблемы?.. К примеру, #cs/#ce подсвечивется неправильно при использовании вложенных комментариев.
mikola1983
как использовать эти макросы на удаленных компьютерах
Все зависит от способа удаленного доступа - при удаленном запуска скрипта (через PsExec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx)) все работает так же как на локальном. Получить тип архитектуры удаленного компьютера можно через WMI - вот CMD-пример, то же самое можно сделать через объекты:WMIC /Node:"COMP01" CPU Get Architecture
возвращаемые значения:
----
0 - x86
1 - MIPS
2 - Alpha
3 - PowerPC
6 - Itanium
9 - x64
amel27,
повлияет ли это на размер скомпилированного скрипта? »
Повлияет, но не намного... это конечно ещё зависит от используемых библиотек, чем их больше, тем влияние соответственно больше :)
я так понимаю эта DLL существенная часть SciTE
Да, но я не конкретно её имел в виду, и вообще если честно уже не вижу как сама dll'ка поможет в раскраске, ведь нам нужен BBCode (кстати, в итоге хотелось бы иметь опцию раскраски и в Html, чтобы предпросмотр можно было осуществить), а там вывод в текстовое поле. Мне больше присмотрелись файлы с таблицами, это думаю будет хорошее начало...
P.S
Немного о другом...
Ты случаем не вкурсе, возможно ли запустить файл (приложение) с любым именем процесса? т.е чтобы после запуска имя процесса отличалось от имени самого файла. Ну или поменять имя процесса после запуска. Я на оф. форуме спросил про это (http://www.autoitscript.com/forum/index.php?s=&showtopic=82467&view=findpost&p=590544), но что-то путного решения так и не поступило (кроме метода ADS (http://www.wikistc.org/wiki/Alternate_data_streams), который поддерживается как я понял, только на NTFS).
Creat0R
Ты случаем не вкурсе, возможно ли запустить файл (приложение) с любым именем процесса?»
Не в курсе, но судя по параметрам функции CreateProcess (http://msdn.microsoft.com/en-us/library/ms682425(printer).aspx) нельзя, т.е. имя процесса привязано к имени файла образа и все триксы будут упираться в файловую систему... Кстати, на NTFS можно еще использовать жесткие ссылки (Hard Links) через FileCreateNTFSLink(), при этом не создается физической копии файла - только ссылка на тот же файл... файл будет существовать на диске пока не будет удалена последняя ссылка на него.
amel27,
судя по параметрам функции CreateProcess нельзя »
А как на счёт CopyProcess? я где то читал что возможно скопировать процесс под другим именем, вот только где читал найти немогу :( Или я неверно понял и оно не реально?
Creat0R
А как на счёт CopyProcess? »
Не знаю такой функции. В системной структуре, описывающей процесс (EPROCESS (http://download.microsoft.com/download/5/b/3/5b38800c-ba6e-4023-9078-6e9ce2383e65/C06X1116607.pdf)), нет никакого "имени процесса" - есть только путь к файлу образа ("Image Filename"). Операционной системе "имя процесса" не нужно - ей достаточно PID... Поэтому думаю то, что называется "именем процесса", есть на самом деле "имя файла" образа. Даже если бы такая функция и была, ей пришлось бы продублировать "имя файла" для копии процесса.
З.Ы. AFAIK в операционках с поддержкой виртальной памяти процесс никогда не теряет связь с файлом образа, или другими словами - никогда "полностью" на загружается в оперативную память. Файл образа лишь проецируется на виртуальную память процесса, а уж какая часть этой памяти находится в RAM, а какая на диске знает только ОС. Возможно, если бы оперативная (быстрая) память стоила дешевле внешней (медленной), ОС имели бы совсем другую архитектуру и процессы могли иметь свои виртуальные имена, никак не связанные с файлами образов.
тебе не кажется, что мы ушли в сторону от темы? :)
morgan1991
22-10-2008, 23:36
Привет всем! Скажите плиз ктонить, как с помощью Autoit отправить письмо на мыло с файлом? Только с авторизацией.
Допустим есть смтп сервер mail.hoster.ru есть ящик support@m-sait.ru, логин: support@m-sait.ru и пароль: пароль
Помогите чем можете весь инэт перешерстил не могу найти.
Заранее спасибо.
Maza Faka
23-10-2008, 07:32
morgan1991
Здесь (http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=1980#6) обсуждалось.
morgan1991
23-10-2008, 09:12
Помогите хочу получитьработающий этот код
$BlatArgs = 'letter.txt -t delta2-greit[support@]m-sait.ru -f delta-greit[support@]m-sait.ru -s "спасибо за помощь" -server mail.hoster.ru -u delta-greit -password здесь походу пароль? "Windows-1251" -attach 1.txt'
_SendMail($BlatArgs)
Func _SendMail($CMDstring)
$BlatDLL = DllOpen ("blat.dll")
Do
$result=DllCall($BlatDLL,"int","Send","str",$CMDstring)
Select
Case $result[0] = 13
MsgBox(16,"Ошибка. Код ошибки " & $result[0], "Не могу открыть временный файл во временной папке")
Case $result[0] = 12
MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не указаны или не найдены в реестре аргументы -server или -f")
Case $result[0] = 3
MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не могу прочитать файл с текстом письма или приложенный файл")
Case $result[0] = 2
MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Почтовому серверу не понравился адрес отправителя; или он отказал нам в подключении; или неверный пароль; или не найден файл с текстом письма")
Case $result[0] = 1
MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не могу открыть SMTP сокет. Проверьте подключение к Интернету; либо неверные аргументы")
Case $result[0] <> 0
MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Неизвестная ошибка")
EndSelect
Until $result[0] = 0
ConsoleWrite ("Письмо отправлено :-)" & @CRLF)
DllClose ($BlatDLL)
EndFunc ; ==> _SendMail
Но он не пашет пишет: Не могу открыть SMTP сокет. Проверьте подключение к Интернету; либо неверные аргументы
вариант для аутглюка:_OESetMAPIWarn(0) ; Отключаем предупреждения Outlook Express
$res = _OESendMail("mail@mail.ru", "Theme", "TEXT", "c:\boot.ini")
Func _OESendMail($sMailTo, $sSubj="", $sText="", $sFile="")
Local $tSession = DllStructCreate("hwnd hSession")
Local $pSession = DllStructGetPtr ($tSession)
Local $tMAPIMessage = DllStructCreate("long Rsvr;ptr Subj;ptr Text;ptr Type;ptr DateRcv;ptr CnvrsID;long Flags;long Orig;long RcpCount;ptr Rcps;long FileCount;long Files")
Local $tMAPIRecip = DllStructCreate("long Rsvr;long Class;ptr Name;ptr Addr;long EIDSize;long EntryID")
Local $tMAPIFile = DllStructCreate("long Rsvr;long Flags;long Pos;ptr Path;ptr Name;ptr Type")
Local $tMAPIRecipAddr = DllStructCreate("char["& StringLen($sMailTo)+1 &"]")
Local $pMAPIRecipAddr = DllStructGetPtr($tMAPIRecipAddr)
DllStructSetData($tMAPIRecipAddr, 1, $sMailTo)
DllStructSetData($tMAPIRecip, "Addr",$pMAPIRecipAddr)
Local $tMAPIMessageSubj = DllStructCreate("char["& StringLen($sSubj)+1 &"]")
Local $pMAPIMessageSubj = DllStructGetPtr($tMAPIMessageSubj)
DllStructSetData($tMAPIMessageSubj, 1, $sSubj)
DllStructSetData($tMAPIMessage, "Subj",$pMAPIMessageSubj)
Local $tMAPIMessageText = DllStructCreate("char["& StringLen($sText)+1 &"]")
Local $pMAPIMessageText = DllStructGetPtr($tMAPIMessageText)
DllStructSetData($tMAPIMessageText, 1, $sText)
DllStructSetData($tMAPIMessage, "Text",$pMAPIMessageText)
Local $tMAPIFilePath = DllStructCreate("char["& StringLen($sFile)+1 &"]")
Local $pMAPIFilePath = DllStructGetPtr($tMAPIFilePath)
DllStructSetData($tMAPIFilePath, 1, $sFile)
DllStructSetData($tMAPIFile, "Path",$pMAPIFilePath)
DllStructSetData($tMAPIMessage, "RcpCount", 1)
DllStructSetData($tMAPIMessage, "FileCount", 1)
DllStructSetData($tMAPIMessage, "Rcps", DllStructGetPtr($tMAPIRecip))
DllStructSetData($tMAPIMessage, "Files", DllStructGetPtr($tMAPIFile))
DllStructSetData($tMAPIRecip, "Class", 1)
$Ret = DllCall(@ProgramFilesDir &"\Outlook Express\MSOE.DLL", "int", "MAPISendMail", _
"hwnd", 0, "hwnd", 0, "ptr", DllStructGetPtr($tMAPIMessage), "int", 0, "int", 0 )
Return $Ret[0]
EndFunc
Func _OESetMAPIWarn($iFlag = True)
Local $iRes, $sKey
Local Const $sRoot = "HKEY_CURRENT_USER\Identities"
Local Const $sMail = "\Software\Microsoft\Outlook Express\5.0\Mail"
If $iFlag <>0 Then $iFlag=1
For $i= 1 to 10
$sKey = RegEnumKey($sRoot, $i)
If @error then ExitLoop
$iRes = RegWrite($sRoot &"\"& $sKey & $sMail, "Warn on Mapi Send","REG_DWORD", $iFlag)
Next
Return $iRes
EndFunc
morgan1991
23-10-2008, 13:04
Нее.... Мне нужно отправить письмо с авторизацией на своём домене. Ну на своем мыле типо с логином и паролем. И + в скрытом режиме без дополнительных программ, только чтобы после отправки вылетело сообщение типо письмо отправлено.
без дополнительных программ » ну аутглюк как раз встроенный ;)
он не пашет пишет: Не могу открыть SMTP сокет »без пароля нормально, проверь сначала из командной строки: http://www.blat.net/syntax/syntax.html
morgan1991
23-10-2008, 13:58
Цитата morgan1991:
без дополнительных программ »
ну аутглюк как раз встроенный »
Я имел ввиду чёб не какие проги не открывались кроме самого Autoit да и аутлу не у всех стоит у меня например нету я его удалил.
А что значит без пароля нормально? Тоесть можно отправить письмо без пароля? Можно поподробнее?
Мне нужно просто отправить письмо с файлом с помощью Autoit.
Помогите?
Grammaton Cleric
28-10-2008, 08:18
Народ. Один раз форум уже помог... теперь возникла еще одна проблема...
надо во время работы программы проверить наличие определенного файла на вставленной дискете. Если он есть, тогда дальше делать...
У меня вот так:
While FileExists ( 'A:\gk.db3') = 0
if MsgBox ( 36, 'Автоустановка программы, Перед продолжением установки ТРЕБУЕТСЯ вставить в Floppy дисковод,'&@CRLF&' дискету пользователя, в противном случае работа не будет продолжена.'&@CRLF&'Вы хотите продолжать работу?') = 7 Then
ExitLoop
EndIf
WEnd
Но если дискеты нету в дисководе, вылазит ошибка, которая пугает пользователя... :) Вот как сделать чтобы при отсутствии дискеты, можно было попросить ее затолкать куда надо...?
morgan1991,
Есть функция _InetSmtpMailCom на оф. форуме (http://www.autoitscript.com/forum/index.php?showtopic=23860), там не используется внешнее приложение.
как сделать чтобы при отсутствии дискеты, можно было попросить ее затолкать куда надо...? »
Вот так:
While DriveStatus('A:\') <> 'Ready' Or Not FileExists('A:\gk.db3')
If MsgBox(36, 'Автоустановка программы', _
'Перед продолжением установки ТРЕБУЕТСЯ вставить в Floppy дисковод,' & @CRLF & _
'дискету пользователя, в противном случае работа не будет продолжена.' & @CRLF & _
'Вы хотите продолжать работу?') = 7 Then ExitLoop
WEnd
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.