PDA

Показать полную графическую версию : [архив - Часть 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
18-07-2007, 03:45
amel27
применительно к DllStructGetData() можно использовать этот пример, для файлов будет аналогично:

А что должно возвращаться? я так понял размер файла/байтового массива должен соответствовать размеру данных в файле/массиве?

Т.е всё что нужно так это делить на два и отнимать 2? :unsure:

Я правда их достал уже баг репортами :tomato2: ... лично JdeB'а точно достал :biggrin: ...

... and as far as updating ALL UDF's that possibly use this older method of concatenation of strings: No promises from my site .....

:(

Он не считает это багом.

amel27
18-07-2007, 05:33
Creat0RОн не считает это багом.да мне все равно как назвать, лишь бы поправили...
когда скрипт от одной UDF уходит в даун я это воспринимаю как багЯ правда их достал уже баг репортамиладно, спасибо - пойду по твоему линку и сам накляузничаю - мне терять нечего :)

ADD: я там тебя поддержал vs JdeB ;)
Как я понял про чтение бинарных данных - это не баг, а фича... вот уж завернули :ohmy:
теперь напрямую без дополнительных преобразований в текст работать с такими данными не получится

_atta_
18-07-2007, 15:09
Приветствую.

Вопрос по FileReadLine в autoit 3, необходимо сделать так, чтобы считывались все строки в файле по одной, но с таким условием, чтобы это было возможно после закрытия файла FileClose и повторного открытия. Грубо говоря брутфорс атака по словарю, но с закрытием исполняемого файла программы и повторным запуском, где в поле для ввода пароля заносится следующая строка из текстового файла.

Приму любую помощь и воздам по заслугам :) . Стучите асю 111296.

P.S. - нет, аналог брутуса я не пишу.

Creat0R
18-07-2007, 18:42
amel27
я там тебя поддержал vs JdeB
Спасибо :)

теперь напрямую без дополнительных преобразований в текст работать с такими данными не получится
Я так понимаю нужно в бинарные данные преобразовывать чтобы получить размер, а потом чтобы получить нормальный текст преобразовывать обратно в String? (BinaryToString()).

Это скажется и при обычной работе с файлами? или в основном при работе с функциями Dll?

_atta_
необходимо сделать так, чтобы считывались все строки в файле по одной, но с таким условием, чтобы это было возможно после закрытия файла FileClose и повторного открытия

А в чём проблема? считываем в массив весь файл, и перебираем строки...

$ReadFileArr = StringSplit(FileRead("C:\File.txt"), @LF)

For $i = 1 To $ReadFileArr[0]
;$ReadFileArr[$i] содержит текущую строку (от первой и к последней), с ней можно делать что угодно ;)
Next

Creat0R
19-07-2007, 11:43
amel27
Ещё одна беда в новом аутоите :( - Измученная функция _FileSelectFolderOldStyle() отказывается работать при использовании фичи для которой она и была изначально задуманна - если указать что либо в параметре InitDir (всё кроме нуля (0) ), то функция “убивает” весь скрипт.

Я уже и :cdecl пробовал подставлять под возвращаемое значение, и делил данные на два и отнимал 2... вобщем в итоге ничего не получилось... смог только узнать что функция вызывает сбой на этой строке:

$pidl = DllCall ("shell32.dll", "ptr", "SHBrowseForFolder", "ptr", DllStructGetPtr ($ubi))

Сколько я ни химичил с этой строкой, ничего не вышло :(

Palych64
20-07-2007, 03:53
To Sanja Alone and all

Прикол хотите?

Я откомпилировал скрипт набортным компилятором и погонял его на своих компах -- всё нормально. Мой KAV на .exe не ругался.
Ладно. Отослал этот экзешник своему коллеге, чтобы он посмотрел и заценил. И тут он мне по аське пишет, что его Dr.WEB детектит этот экзешник, как BackDoor.IRC.FFbot

Я сразу загнал этот файлик на virustotal.com. Там 29 антивирусных движков встроено в сайт. И присланный файл прогоняется через все 29. Потом юзеру показывается результат -- что каждый из антивирусов сказал про этот файл.

Посмотрел я на результат и -- точно Dr.WEB задетектил там бэкдор. Кроме доктора облажались ещё:
eSafe -- suspicious Trojan/Worm
VBA32 -- Trojan.Win32.Autoit.ao
Webwasher-Gateway -- Worm.Win32.ModifiedUPX.gen!90 (suspicious)

VBA32 вообще убил наповал. Мало того, что они этот безобидный екзешник в трояны записали, так они ещё и категорию такую придумали -- AutoIt.

А с кого перепуга они задетектили этот экзешник, как вредоносный -- вообще непонятно. Он же просто создаёт штатными виндовыми средствами учётную запись в ОЕ. Просто эмулирует нажатие кнопок и имеет при этом видимые окна. Чего тут криминального?

Я написал письмо в Dr.WEB. Описал кратко ситуацию, приложил скрипт и экзешник.
Ответили довольно быстро. Подтвердили, что, дескать, -- да, ложное срабатывание и что сигнатуры исправлены.

При последующей проверке на VirusTotal Dr.WEB уже ничего не детектил.

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

А ещё у кого-нибудь были случаи, что бы антивири ругались на скрипты AutoIt или откомпилированные экзешники?

amel27
20-07-2007, 11:14
Creat0RЭто скажется и при обычной работе с файлами? или в основном при работе с функциями Dll?Если бинарные данные содежат текст в известной кодировке, то никаких проблем (кроме дополнительных преобразований), а вот для других целей их использовать пока не получится - функций для непосредственной работы с бинарниками пока явно недостаточно - только BinaryMid() и BinaryLen().
Сколько я ни химичил с этой строкой, ничего не вышлода, печально... у меня тоже некоторые давно скачанные с офсайта проги перестали запускаться. Проблема кстати в другом месте - там, где ищется адрес оконной процедуры, именно он и передается в SHBrowseForFolder() вместо CallBack-функции. Если закомментировать вторую строку ошибка исчезнет, но соответственно и председселект перестанет работать: $ret = DllCall ("user32.dll", "ptr", "GetWindowLong", "hwnd", $hwnd, "int", -4)
DllStructSetData ($ubi, 6, $ret[0])
попробую еще помучить Piccaso, хотя сам понимаш никаких гарантий... все-таки на сегодня единственный "легальный" способ - использовать вспомогательные DLL-ки, а наче опять - до очередной смены версий.

Palych64А ещё у кого-нибудь были случаи, что бы антивири ругались на скрипты AutoIt или откомпилированные экзешники?на офсайте по этому поводу есть ветка: Are my AutoIt EXE's really infected?, How and Why your EXE's have been deleted. (http://www.autoitscript.com/forum/index.php?showtopic=34658)

Diamond
21-07-2007, 23:30
Давно искал способ как определить наличие подключения к Интернет, наконец-то нашёл:
If IsConnected() Then
MsgBox(0,"","Соединение установлено")
Else
MsgBox(0,"","Соединение отсутствует")
EndIf

Func IsConnected()
Local $IsConnected = DllCall("wininet.dll","int","InternetGetConnectedState","int",0,"int",0)
Return $IsConnected[0]
EndFunc
Просьба проверить, всё ли правильно в функции?
Проверял на DialUp - работает!

Второй вопрос, как определить скорость подключения к Интернет?

Creat0R
22-07-2007, 04:56
Diamond
наконец-то нашёл
Хорошая находка, спасибо...

Правда уже довольно давно и я искал подобное, и amel27 привёл пример (http://forum.oszone.net/post-488300-378.html) (там также можно получить описание причины по которой не доступно соеденение, и ещё разную инфу).

Просьба проверить
У меня работает отлично, соеденение по локальной сети (Кабельное подключение через роутер).

как определить скорость подключения к Интернет?
Общую скорость я не знаю как получить (самому интересно), а вот (примерную) скорость закачки (Download) можно получить так (основа для примера взята с оф. форума (http://www.autoitscript.com/forum/index.php?s=&showtopic=1485&view=findpost&p=9438) - от самого Jon'а :) )....


#include <Inet.au3>

$TimerInit = TimerInit()
$Source = _INetGetSource("http://www.microsoft.com/default.asp")
$TimerDiff = TimerDiff($TimerInit)

$Size = StringLen($Source)
$speed = Int(($Size / 1024) / ($TimerDiff / 1000))

MsgBox(0, "Approximate Internet Download Speed", $Speed & " KB/s")

Diamond
22-07-2007, 20:24
Creat0R
Функции от amel27 и Jon'а пожалуй добавлю в свою коллекцию. Спасибо!
У меня работает отлично, соеденение по локальной сети (Кабельное подключение через роутер).
Отлично! :yahoo: Думаю, теперь этот способ можно смело использовать.

amel27
23-07-2007, 06:09
Creat0R
как и следовало ожидать, piccaso предложил свой новый безDLL'ный метод... хотя он и позволяет использовать все возможности диалоговых окон (в т.ч. Explorer style) по причине нехватки времени пока тупо перегнал _FileSelectFolderOldStyle()#include <GUIConstants.au3>
#include <DllCallBack.au3>

Global Const $BFFM_INITIALIZED = 1
Global Const $BFFM_SETSELECTION = $WM_USER + 102

Global Const $BIF_BROWSEFORCOMPUTER = 0x1000 ; Only return computers
Global Const $BIF_BROWSEFORPRINTER = 0x2000 ; Only allow the selection of printers
Global Const $BIF_BROWSEINCLUDEFILES = 0x4000 ; The browse dialog box will display files as well as folders
Global Const $BIF_DONTGOBELOWDOMAIN = 0x2 ; Do not include network folders below the domain level
Global Const $BIF_EDITBOX = 0x10 ; Include an edit control in the browse dialog box
Global Const $BIF_RETURNONLYFSDIRS = 0x1 ; Only return file system directories

Global Const $BIF_ALLOLDSTYLEFLAGS = BitOR ($BIF_BROWSEFORCOMPUTER, $BIF_BROWSEFORPRINTER, $BIF_BROWSEINCLUDEFILES, $BIF_DONTGOBELOWDOMAIN, $BIF_EDITBOX, $BIF_RETURNONLYFSDIRS)

; Simple GUI for sample
$hWndMain = GUICreate ("Test GUI", 200, 45, -1, -1)
$Button_1 = GUICtrlCreateButton ("Select folder", 55, 10)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
$res = _FileSelectFolderOldStyle ('Here the prompt', 0, $BIF_RETURNONLYFSDIRS, 'C:\_1', $hWndMain)
MsgBox (0, "Your choise:", $res)
EndSelect
Wend

; Initial folder procedure
Func _BrowseCallbackProc ($hWnd, $Msg, $wParam, $lParam)
If $Msg = $BFFM_INITIALIZED Then
$ret = DllCall ("user32.dll", "int", "SendMessage", _
"hwnd",$hWnd, "int", $BFFM_SETSELECTION, "int", 1, "ptr", $lParam )
EndIf
Return 0
EndFunc ;==> _BrowseCallbackProc

Func _FileSelectFolderOldStyle ($text = '', $root = 0, $flags = 0, $iniDir = '', $hwnd = 0)
Local $ret, $pidl, $res = ''
; Creating Structures
Local $ubi = DllStructCreate ("hwnd;ptr;ptr;ptr;int;ptr;ptr;int") ; BROWSEINFO
Local $utl = DllStructCreate ("char[512],char") ; Browse text
Local $urs = DllStructCreate ("char[260]") ; MAX_PATH
Local $ulf = BitAnd ($flags, $BIF_ALLOLDSTYLEFLAGS) ; Supported flags
; Filling structures
DllStructSetData ($utl, 1, $text)
DllStructSetData ($ubi, 1, $hwnd)
DllStructSetData ($ubi, 3, DllStructGetPtr($urs))
DllStructSetData ($ubi, 4, DllStructGetPtr($utl))
DllStructSetData ($ubi, 5, $ulf)
If ($iniDir <> '') And ($hwnd <> 0) Then
Local $udr = DllStructCreate ("char[" & StringLen ($iniDir)+1 & "]")
DllStructSetData ($udr, 1, $iniDir)
Local $pBrowseCallbackProc = _DllCallBack("_BrowseCallbackProc","hwnd;uint;long;ptr") ; return function pointer
DllStructSetData ($ubi, 6, $pBrowseCallbackProc)
DllStructSetData ($ubi, 7, DllStructGetPtr($udr))
EndIf
$ret = DllCall ("shell32.dll", "ptr", "SHGetSpecialFolderLocation", _
"int", 0 , "int", $root , "ptr", DllStructGetPtr($ubi, 2) )
If $ret[0]=0 Then
$pidl = DllCall ("shell32.dll", "ptr", "SHBrowseForFolder", "ptr", DllStructGetPtr ($ubi)) ; Start browse window
If $pidl[0] Then
$ret = DllCall ("shell32.dll", "int", "SHGetPathFromIDList", _
"ptr", $pidl[0], "ptr", DllStructGetPtr ($urs))
If $ret[0] Then $res = DllStructGetData ($urs, 1)
DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", $pidl[0]) ; clear memory
EndIf
DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", DllStructGetData ($ubi, 2))
EndIf
_DllCallBack_Free ($pBrowseCallbackProc) ; clear memory
Return $res
EndFunc ;==> _FileSelectFolderOldStyle

P.S. линк на DllCallBack.au3 от piccaso: http://www.autoitscript.com/forum/index.php?act=attach&type=post&id=15441

Creat0R
23-07-2007, 22:48
amel27
хотя он и позволяет использовать все возможности диалоговых окон (в т.ч. Explorer style)
Отлично... спасибо за то что узнал у picaso.
Правда теперь выбрать другой каталог практический невозможно :idontnow:

amel27
24-07-2007, 02:35
Правда теперь выбрать другой каталог практический невозможнодействительно... :rolleyes: исправил

Creat0R
24-07-2007, 04:31
amel27
исправил
Спасибо.

Я так понял теперь можно и стильный диалог отображать? какой флаг для этого используется? :shuffle: (перепробовал все стандартные, не один не подошел).

Diamond
теперь этот способ можно смело использовать
Не совсем :( ...
Сегодня у меня были траблы с инетом, интернет судя по настройкам (Папка “Сетевые подключения”) был подключен, однако не одно приложение не могло получить доступ в сеть - твоя функция вернула True, подключение есть, однако используя пример от amel27, я получил совсем другой результат (соеденение отсутствует), и при этом ещё получил описание ошибки в (не)доступе к сети ;).

Так что через объект winhttp.winhttprequest.5.1 намного надёжнее и функциональнее.... хотя у меня такое подозрение, что если с Internet Explorer в системе есть проблемы, то и эта функция провалится :shuffle:

amel27
24-07-2007, 07:45
Я так понял теперь можно и стильный диалог отображать? какой флаг для этого используется? (перепробовал все стандартные, не один не подошел).да не, вроде пашет... правда там отличие только в ресайзе:Global Const $BIF_NEWDIALOGSTYLE = 0x40 ; Use the new user interface
;...
Global Const $BIF_ALLOLDSTYLEFLAGS = BitOR ($BIF_BROWSEFORCOMPUTER, $BIF_BROWSEFORPRINTER, $BIF_BROWSEINCLUDEFILES, $BIF_DONTGOBELOWDOMAIN, $BIF_EDITBOX, $BIF_RETURNONLYFSDIRS, $BIF_NEWDIALOGSTYLE)

Diamond
24-07-2007, 08:11
Creat0R
Я не знаю, может тебе уже попадалась функция от Gafrost (http://www.autoitscript.com/forum/index.php?showtopic=25053&st=0&p=175749&#entry175749), но там с ней тоже какие-то проблемы. Лично у меня, она вернула "пусто" когда я был в offline.

Creat0R
24-07-2007, 08:35
amel27
:yahoo:
Работает!!!
Спасибо ещё раз.

Правда теперь стиль $BIF_RETURNONLYFSDIRS не действует если использовать стиль нового диалога :shuffle: - т.е при выборе папки компьютера к примеру, кнопка ОК не становится не активной... но это не страшно.... а, и ещё - в функции небольшая т.н программная опечатка ;) - Переменная $pBrowseCallbackProc не обьявляется в начале скрипта, а только в условии, что естественно в свою очередь вызывает ошибку (она используеться позже в функции вне условия).

Кстати, а это нормально что при выборе системной папки (к примеру Мой компьютер), возвращается пустое значение? в оригинальной функции возвращается имя выбранного элемента (“Мой компьютер”).

там отличие только в ресайзе
Что-то не заметил отличие :idontnow: .... а можно использовать новый вид диалога, но без кнопки “Создать папку”?

amel27
24-07-2007, 10:03
Creat0R теперь стиль $BIF_RETURNONLYFSDIRS не действует если использовать стиль нового диалогада, есть такой косяк... надо программировать средствами CallBack-функции, там есть такая возможность
Переменная $pBrowseCallbackProc не обьявляется в начале скриптаспасибо, исправил... там еще была неточность с закрытием хэндла при выходе
в оригинальной функции возвращается имя выбранного элемента (“Мой компьютер”).да, API-функция возвращает "пусто"... имхо это решаемо
а можно использовать новый вид диалога, но без кнопки “Создать папку”?используй флаг $BIF_NONEWFOLDERBUTTON = 0x200

DenchikK
24-07-2007, 14:46
Чудовищно туплю!
Надо сделать так, чтоб по нажатию клавиши, в поле вписывалась бы первая строчка текстового файла, повторное нажатие - 2 строчка, и.т.п. Вроде сделал как в хелпе описано и как мне показали ранее:


Case $Proxy

For $i = 1 To UBound($Proxy_Array)-1
ControlSetText ( 'Programs', '', 'Edit4', $proxy_Array[$i])
Next


Но получается - что все считанные данные промелькивают в поле заполнения!

Туплю по страшному, не знаю как исправить...

Maza Faka
24-07-2007, 18:35
Как отключить монитор используя WinApi?




© OSzone.net 2001-2012