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

» AutoIT

Автор: ViSiToR
Дата сообщения: 12.10.2007 22:16
euheny

Цитата:
что ты думаеш по моим предложениям по поводу процессов и дисковых операций ?

Думаю это можно сделать через API-вызовы, но я не спец в этом... да и вообще смутно поредставляю задачу.
Автор: euheny
Дата сообщения: 13.10.2007 00:14
ViSiToR

Цитата:
да и вообще смутно поредставляю задачу.

ну с корректным завершением процесса вроде всё тебе понятно


А подкинуть поближе к станку можеш (так как я и написал) ?

Автор: ViSiToR
Дата сообщения: 13.10.2007 17:23
euheny

Цитата:
подкинуть поближе к станку можеш

В смысле написать Feature Request разработчикам?
Написать могу, но они мне ответят то же что и я ответил (на счёт API).
Автор: euheny
Дата сообщения: 14.10.2007 23:23

Цитата:
написать Feature Request разработчикам

Буду премного благодарен
Автор: ViSiToR
Дата сообщения: 15.10.2007 03:26
euheny

Цитата:
надо сделать что-то типа

FileOpenShare ( "filename", mode ) - совместный доступ
где "filename" может принимать вид типа \\?\Device\Harddisk1\Partition0

FileRead(Write) ( filehandle или "filename" [, count] [,seek] [,block]) т.е. определить место

Я немного недопонимаю каков тут будет результат... обычный FileRead() не читает то что нужно?
А читать сектора... зачем? зачем считывать диски?
Это уже точно не задачи для AutoIt (учить C++ нужно для подобных задачь), я написал в контакты, там обычно быстро отвечает Jon личной персоной ...

Но мне нужно знать подробнее, а то наверняка нужно будет разъяснить свои намерения.
Автор: euheny
Дата сообщения: 15.10.2007 07:57
ViSiToR

Цитата:
обычный FileRead() не читает то что нужно?


Цитата:
каков тут будет результат

да нет - то что нужно + дополнительные возможности
к примеру ведь есть уже поддержка чтения дисков (запись вида \\.\А: - FileOpen). Не хватает поддержки физических дисков (\\?\Device\Harddisk1\Partition0). Также FileRead имеет опцию count, а FileWrite - нет. Для обоих (FileRead и FileWrite) нужна опция seek, чтобы была возможность работать с размерными блоками, а не скажем сразу с 300Гб (и более), которым может быть \\.\С:

Цитата:
А читать сектора... зачем? зачем считывать диски

И записывать тоже нужно, потомучто ФС не даёт доступа ко всем секторам
К примеру мне нужна возможность доступа к физическому диску чтобы сделать его загрузочным, ставить и проверять наличие каких либо меток, которые иногда оставляют некоторые проги (та же автоматизация), делать buckup и восстановление, проверять на скорость работы.

Цитата:
учить C++ нужно для подобных задачь

интересно - а на чём AutoIt написан ?

Цитата:
там обычно быстро отвечает Jon личной персоной

интересно будет узнать ответ.




Автор: NIKZZZZ
Дата сообщения: 15.10.2007 08:04
ViSiToR

Цитата:
Я немного недопонимаю каков тут будет результат... обычный FileRead() не читает то что нужно?

По всей видимости, имеется ввиду добавление в FileRead при работе в bin-mode (FileOpen("filename", 16 )) параметра "seek" - смещения, откуда начинается чтение. Несомненно полезная вещь при работе в этом режиме, например для модификации не текстовых файлов.
При последовательном чтении при прямом работе с диском проблем не видел.

Цитата:
зачем считывать диски?

Ну, я, например использовал это для создания образа диска, и довольно удачно.
А то, что надо пользовать C++ или Delphi для данных задач - совершенно правильно, никто не мешает написать на них простенькую библиотеку, вызываться которая может из того-же Autoit.

Автор: euheny
Дата сообщения: 16.10.2007 01:05

Цитата:
никто не мешает написать на них простенькую библиотеку

такая библиотека есть, имя ей - kernel32.dll
вот только как подступится к ней
Автор: Chaynick
Дата сообщения: 17.10.2007 10:39
Подскажите пожалуйста как с помощью Autoit сделать скриншот экрана и сохранить его в файле?
Автор: Madness
Дата сообщения: 17.10.2007 17:05
euheny

Цитата:
такая библиотека есть, имя ей - kernel32.dll
вот только как подступится к ней

http://www.autoitscript.com/autoit3/docs/functions/DllCall.htm

Добавлено:
>интересно - а на чём AutoIt написан ?
На ms vc.
Автор: ViSiToR
Дата сообщения: 17.10.2007 19:11
Chaynick

Цитата:
как с помощью Autoit сделать скриншот экрана и сохранить его в файле?

Вот примеры:


Код: ;Пимер сохранения определённого окна:
#include <A3LScreenCap.au3>

$CaptureFile = @ScriptDir & "\CBCapture.jpg"
$Window_Handle = WinGetHandle("") ;Идентификатор текущего окна

_ScreenCap_CaptureWnd($CaptureFile, $Window_Handle)

$RunPID = Run('MSPaint.exe "' & $CaptureFile & '"', '', @SW_MAXIMIZE)
Автор: euheny
Дата сообщения: 18.10.2007 07:51
ViSiToR

Цитата:
Оба примера нуждаются в библиотеке A3LLibrary.

откуда качать ? (куча ссылок )

А вот есть что-нибудб для работы с SplashTextOn ?

Есть ли простенький редактор на AutoIT ?

Автор: Kauffman
Дата сообщения: 18.10.2007 08:33
Как сделать, чтобы при открытии текстового файла в Edit можно было менять его кодировку? Например, с Win-1251 на ANSI.
Автор: ViSiToR
Дата сообщения: 18.10.2007 09:44
euheny

Цитата:
откуда качать ? (куча ссылок )

Ссылка там одна - Download Auto3Lib Installer


Цитата:
есть что-нибудб для работы с SplashTextOn ?

Если честно, считаю эту недофичу бесполезной, легче самому построить ГУИ с более продвинутыми возможностями показа текста на экране.

Kauffman

Цитата:
чтобы при открытии текстового файла в Edit можно было менять его кодировку?

Это где? подробнее опиши суть задачи.
Автор: NIKZZZZ
Дата сообщения: 18.10.2007 10:50
euheny

Цитата:
Есть ли простенький редактор на AutoIT ?

RunWait("notepad.exe " & $file)

ViSiToR
Вопросик :
DllCall полностью останавливает скрипт, блокируются даже функции, включенные с помощью AdlibEnable. Можно ли как-то обойти это ограничение?


Автор: ViSiToR
Дата сообщения: 18.10.2007 11:41
NIKZZZZ

Цитата:
Можно ли как-то обойти это ограничение?

Да, не так уж давно, один из главных мозгов AutoIt Community (piccaso) , сделал прорыв в сфере CallBack на AutoIt, библиотека лижит тут, там же и методы использования, применении море - одно из главных, это запуск функции по таймеру (a.k.a внешний AdlibEnable без ограничении остановки под/функции всего скрипта).
Автор: Kauffman
Дата сообщения: 18.10.2007 12:20

Цитата:
Это где? подробнее опиши суть задачи.

Как сделать, чтоб при считывании текста из файла в Едит-контрол его кодировка автоматом менялась с UNIX, Mac на Windows/Dos.
Автор: ViSiToR
Дата сообщения: 18.10.2007 22:25
Kauffman
Я не знаком с кодировкой Unix/Mac, но можно попробовать функцию для конвертирования UTF в Ansi или в юникод, или строку в UTF-8 а потом в ansi...


Код: Func _Utf8ToUnicode($Utf8String)
Local $BufferSize = StringLen($Utf8String) * 2
Local $Buffer = DllStructCreate("byte[" & $BufferSize & "]")
Local $Return = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
"int", 65001, _
"int", 0, _
"str", $Utf8String, _
"int", StringLen($Utf8String), _
"ptr", DllStructGetPtr($Buffer), _
"int", $BufferSize)
Local $UnicodeBinary = DllStructGetData($Buffer, 1)
$UnicodeHex1 = StringReplace($UnicodeBinary, "0x", "")
$StrLen = StringLen($UnicodeHex1)
Local $UnicodeString
For $i = 1 To $StrLen Step 4
$UnicodeHex2 = StringMid($UnicodeHex1, $i, 4)
$UnicodeHex3 = StringMid($UnicodeHex2,3,2) & StringMid($UnicodeHex2,1,2)
$UnicodeString &= ChrW(Dec($UnicodeHex3))
Next
$Buffer = 0
Return $UnicodeString
EndFunc

Func
_Utf8ToAnsi($utf8string)
Local $len = StringLen($utf8string)
Local $buf = DllStructCreate("byte[" & $len*2 & "];byte[2]")
Local $ret = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
"int", 65001, "int", 0, _
"str", $utf8string, "int", -1, _
"ptr", DllStructGetPtr($buf), "int", $len*2+2)
Local $out = DllStructCreate("char[" & $len & "];char")
$ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
"int", 0, "int", 0, _
"ptr", DllStructGetPtr($buf), "int", -1, _
"ptr", DllStructGetPtr($out), "int", $len+1, _
"int", 0, "int", 0)
Return DllStructGetData($out,1)
EndFunc

Func
StringToUTF($String)
Dim $sResult = ""
$VarUTFArr = StringSplit($String, "")

For $i = 1 To $VarUTFArr[0]
$code = Asc($VarUTFArr[$i])

Select
Case
$code >= 192 And $code <= 239
$VarUTFArr[$i] = Chr(208) & Chr($code - 48)
Case $code >= 240 And $code <= 255
$VarUTFArr[$i] = Chr(209) & Chr($code - 112)
Case $code = 168
$VarUTFArr[$i] = Chr(208) & Chr(129)
Case $code = 184
$VarUTFArr[$i] = Chr(209) & Chr(145)
Case Else
$VarUTFArr[$i] = Chr($code)
EndSelect

$sResult = $sResult & $VarUTFArr[$i]
Next

Return
$sResult
EndFunc
Автор: euheny
Дата сообщения: 19.10.2007 00:00
ViSiToR

Цитата:
Есть ли простенький редактор на AutoIT ?

я про некую замену обычных редакторов - может проскакивало что похожее

Цитата:
Download Auto3Lib Installe

успокоил

Цитата:
считаю эту недофичу бесполезной

ну тогда пример

Цитата:
AutoIt написан на C++.

А вот интересно - на чём LEXI свои лоадеры пишет

Автор: ViSiToR
Дата сообщения: 19.10.2007 00:54
euheny

Цитата:
я про некую замену обычных редакторов - может проскакивало что похожее

Редактор чего, обычного текста? Есть их кучу на оф. форуме (вот для AutoIt'а кстати), я даже сам пытался написать, выкладывать не буду, т.к проэкт заброшен


Цитата:
ну тогда пример


Набросок...


Код: #include <GuiConstants.au3>

$Splash_hWnd = _SplshTxtOn("Title", "Some Splash Text", 400, 300, -1, -1, "Tahoma", 16, 800, 4, 0xFF0000, _
$WS_CAPTION+$WS_POPUP)

Sleep(3000)

SplshTxtOff($Splash_hWnd)

Func _SplshTxtOn($Title,$Txt,$W=800,$H=600,$X=-1,$Y=-1,$FntNm="",$FntSz="",$FntWd=-1,$FntAt=0,$FntCr=-1,$Styl=-1,$ExStyl=-1)
Local $Splash_Gui = GuiCreate($Title, $W, $H, $X, $Y, $Styl, $ExStyl)
Local $Label_ID = GUICtrlCreateLabel($Txt, 0, ($H/2)-20, $W, 40, 1)
GUICtrlSetFont(-1, $FntSz, $FntWd, $FntAt, $FntNm)
GUICtrlSetColor(-1, $FntCr)

GUISetState(@SW_SHOW, $Splash_Gui)
Return $Splash_Gui
EndFunc

Func
SplshTxtOff($Splash_hWnd)
GUIDelete($Splash_hWnd)
EndFunc
Автор: Kauffman
Дата сообщения: 19.10.2007 13:25
Помогите!
Никак не могу понять как возвратить текст из Scintilla на русском языке. Получаются только вопросы(Например: аутоит -> ??????)!
Автор: NIKZZZZ
Дата сообщения: 19.10.2007 13:35
ViSiToR

Цитата:
CallBack на AutoIt

Интересная штука. Как работает - до конца не понял, но работает
Автор: ViSiToR
Дата сообщения: 19.10.2007 14:24
Kauffman

Цитата:
как возвратить текст из Scintilla на русском языке

А в чём проблема:


Код: ;Аутоит

$GetText = ControlGetText("[CLASS:SciTEWindow]", "", "Scintilla1")

MsgBox(64, "", $GetText)
Автор: Kauffman
Дата сообщения: 20.10.2007 17:02
Спасибо, теперь всё отображает. Просто пытался через GUICtrlGetData

Добавлено:
А чё это AutoItWrapper? Где взять и как использовать?
Автор: ViSiToR
Дата сообщения: 21.10.2007 01:01
Kauffman

Цитата:
Просто пытался через GUICtrlGetData

Чтобы проверить, нужно открыть справку и ввести в поиск запрос, есть ли подобная команда или нет - и кстати, если использовать SciTE который идёт вместе с аутоитом, то выделив команду (или просто поставив куроср на ней), и нажав F1, откроется справка на том месте где есть подобная команда (если есть), а также нужно обращать внимание на подсветку, существующая команда по умолчанию подсвечивается тёмно синим цветом + выпадет список команд по мере набора букв с которых начинается та или иная команда.


Цитата:
чё это AutoItWrapper

Это инструмент для компиляции с дополнительными возможностями (присвоение екзешнику иконки, описание, и т.п).


Цитата:
Где взять

На оф. сайте как ни странно
Автор: Fess3
Дата сообщения: 21.10.2007 14:36
Помогите разобраться пожалуйста,есть скрипт-но по завершению работы он так и остается висеть в процессах.Добавил строчку на его убийство-но это все равно не помогает(.Возможно помогла бы проверка на активность процесса-но к сожалению для меня это сложно пока.Вот код

Код: Opt("WinTitleMatchMode",4)
Run('C:\Program Files\Free Download Manager\fdm.exe')
WinWait("Добавить закачку","Требуются имя пользо")
If Not WinActive("Добавить закачку","Требуются имя пользо") Then WinActivate("Добавить закачку","Требуются имя пользо")
WinWaitActive("Добавить закачку","Требуются имя пользо")
Send("{ENTER}")
ProcessWaitClose("fdm.exe")
Exit
Автор: Maza Faka
Дата сообщения: 21.10.2007 16:50
Fess3
Пример на блокноте:

Код:
$title = "Безымянный - Блокнот"
Run("notepad")
WinWait($title)
ControlSend($title, "", "Edit1", "{ENTER}")
ProcessWaitClose("notepad.exe")
Автор: ViSiToR
Дата сообщения: 21.10.2007 17:09
Fess3

Цитата:
по завершению работы он так и остается висеть в процессах

Он проосто не завершает работу

В скрипте есть ожидание появления окна и закрытия процесса, видимо окно так и не появляется, а скрипт продолжает “ждать”, а также ProcessWaitClose() ставить перед выходом скрипта нет смысла...

Нужно задать сколько времени команда будет дожидаться окна:


Код: Opt("WinTitleMatchMode", 4)
Run('C:\Program Files\Free Download Manager\fdm.exe')
WinWait("Добавить закачку", "Требуются имя пользо", 15)
If Not WinActive("Добавить закачку", "Требуются имя пользо") Then WinActivate("Добавить закачку", "Требуются имя пользо")
WinWaitActive("Добавить закачку", "Требуются имя пользо", 15)
Send("{ENTER}")
Exit
Автор: euheny
Дата сообщения: 22.10.2007 01:07
ViSiToR

Auto3Lib.exe у меня не ставится - утверждает что у меня аутоит версии 0

Есть ли способ напрямую открыть элемент панели управления ?

Можно-ли как-то автоматизировать работу с TreeView ?
Автор: ViSiToR
Дата сообщения: 22.10.2007 01:22
euheny

Цитата:
утверждает что у меня аутоит версии 0

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


Цитата:
Есть ли способ напрямую открыть элемент панели управления ?

Да. Run("control.exe")


Цитата:
Можно-ли как-то автоматизировать работу с TreeView ?

Полагаю что тоже да.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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