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

XXXler
27-07-2007, 17:02
Creat0R,
rasphone.exe /?

Пример

Creat0R
27-07-2007, 17:43
XXXler
Спасибо, но выдаётся следующее сообщение:

http://img65.imageshack.us/img65/330/connecterrmi3.th.png (http://img65.imageshack.us/my.php?image=connecterrmi3.png)

Может я неверное ввожу имя? где получить точное имя подключения?
И кстати, у меня там пусто в этой книге, создал подключение, но ошибка та же :(

amel27
28-07-2007, 09:47
Creat0R

Вот еще вариант через API-функции InternetAutodial (http://msdn2.microsoft.com/en-us/library/aa384336.aspx) и InternetAutodialHangup (http://msdn2.microsoft.com/en-us/library/aa384340.aspx), правда они работают только с "подключением по умолчанию". Можно поиграть разными комбинациями флагов и в параметрах подключения покрутить настройки.Global Const $INTERNET_AUTODIAL_FORCE_ONLINE = 0x01
Global Const $INTERNET_AUTODIAL_FORCE_UNATTENDED = 0x02
Global Const $INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 0x04
Global Const $INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT = 0x08

If _InetConnect($INTERNET_AUTODIAL_FORCE_ONLINE + $INTERNET_AUTODIAL_FORCE_UNATTENDED) Then
MsgBox(0,'Сообщение','Подключение установлено')
Else
MsgBox(16,'Ошибка','В процессе подключения произошла ошибка')
EndIf
If _InetDisconnect() Then
MsgBox(0,'Сообщение','Подключение разорвано')
Else
MsgBox(16,'Ошибка','При разрыве подключения произошла ошибка')
EndIf

Func _InetConnect($iFlags = 0x01, $hWnd = 0)
Local $ret = DllCall('wininet.dll', 'int', 'InternetAutodial', 'dword', $iFlags, 'hwnd', $hWnd)
If Not $ret[0] Then
$ret = DllCall('kernel32.dll', 'int', 'GetLastError')
Return SetError(1, $ret[0], False)
EndIf
Return True
EndFunc

Func _InetDisconnect()
Local $ret = DllCall('wininet.dll', 'int', 'InternetAutodialHangup', 'dword', 0)
If Not $ret[0] Then
$ret = DllCall('kernel32.dll', 'int', 'GetLastError')
Return SetError(1, $ret[0], False)
EndIf
Return True
EndFunc

Creat0R
28-07-2007, 13:43
amel27
Спасибо за функции, но почему то функция для подключения пишет что соеденение установлено, хотя на самом деле оно не подключается.

Я пробовал (как и на оф форуме советуют) предварительно пооткрывать Dll'ки, но результат тот же.

А функция _InetDisconnect() вообще выпадает с фатальной ошибкой:

http://img264.imageshack.us/img264/7662/connectdllerrdq2.th.png (http://img264.imageshack.us/my.php?image=connectdllerrdq2.png)

В принципе отсоедениться не проблема через Rasdial /Disconnect - главное подсоеденится обратно.

С флагами игрался по всевозможному, а параметры вызова Dll я не осмелился менять, если честно понятия не имею что там должно быть (хотябы приблизительно).

amel27
28-07-2007, 14:58
Creat0R почему то функция для подключения пишет что соеденение установлено, хотя на самом деле оно не подключаетсяв параметрах подключения браузера должно стоять "всегда использовать принятое по умолчанию подключение"
функция _InetDisconnect() вообще выпадает с фатальной ошибкойисправил :rolleyes:
если честно понятия не имею что там должно быть дык для этого и дал линки

Diamond
28-07-2007, 15:15
Creat0R
Хм... По идее, если rasdial отключает, то он должен и подключать но при этом необходимо указывать логин и пароль.
rasdial 012 UserName Password
Если логин и пароль у подключения отсутствуют или неизвестны то я думаю правильное решение дал XXXler - использовать rasphone.exe

Creat0R
29-07-2007, 01:56
amel27
в параметрах подключения браузера должно стоять "всегда использовать принятое по умолчанию подключение"

Во! так работает! :yahoo: большое спасибо!

Diamond
если rasdial отключает, то он должен и подключать но при этом необходимо указывать логин и пароль.

И это работает! я раньше не писал ни логин ни пароль, думал раз я админ на компе, значит это не требуется! :up: - Спасибо!

Creat0R
29-07-2007, 02:42
В AutoIT есть известный баг (http://www.autoitscript.com/forum/index.php?showtopic=44370&hl=Year+2038) - когда в системе задан год на выше чем 2037, и используется макрос @Year, скрипт вылетает полностью.

Я предлагаю (временное?) решение:


MsgBox(64, "Get Year", "And the year is: " & Year())

Func Year()
Local $Code = ""
$Code &= 'Function GetYear()' & @LF
$Code &= ' MyDate = #January, 1#' & @LF
$Code &= ' GetYear = Year(MyDate)' & @LF
$Code &= 'End Function'

Local $VbsObj = ObjCreate("ScriptControl")
If @error Then Return SetError(1, 0, 0)

$VbsObj.Language = "vbscript"
$VbsObj.AddCode($Code)
Local $Ret = $VbsObj.Run ("GetYear")
If $Ret = 0 Then Return SetError(2, 0, 0)
Return $Ret
EndFunc

Diamond
29-07-2007, 04:59
Creat0R
думал раз я админ на компе, значит это не требуется
...не совсем понял... :wacko: а при чём здесь админ... :) - я имел ввиду не системные пароль и имя, а те что требует провайдер при подключении, и если я правильно понял, то в качестве имени и пароля в твоём случае можно ввести что угодно, думаю, это также сработает. ;)

Creat0R
29-07-2007, 05:12
Diamond
а при чём здесь админ
Я думал что раз при подключении (ручном) мне не нужно вводить ни логин, ни пароль, значит оно как бы уже запомнилось, и если зайти не под админом, то пароль и логин придётся вводить заного... но видимо я ошибься :sorry:

я имел ввиду не системные пароль и имя, а те что требует провайдер при подключении
Я понял ;)

в качестве имени и пароля в твоём случае можно ввести что угодно, думаю, это также сработает
Хм, потому что я админ? :unsure: надо будет проверить... спасибо.

Diamond
29-07-2007, 05:37
Creat0R
надо будет проверить... спасибо
Это может сработать если провайдер не требует конкретного имени и конкретного пароля, я почему-то решил что у локального подключения они отсутствуют...

Maza Faka
30-07-2007, 11:24
А как можно проиграть плейлист? Никак не получается, проигрывается первый трэк и скрипт завершается, кому не лень, гляньте плз.

#include <GUIConstants.au3>
$file = ""
GUICreate("Player", 300, 200, -1, -1, -1)
GUISetIcon(@ProgramFilesDir & "\Winamp\winamp.exe", 0)
GUICtrlCreateLabel("Simple player", 100, 5, 100, 15, -1)

;Progress
;$progress = GUICtrlCreateProgress(90, 25, 150, 15)
;GUICtrlSetLimit($progress, 100, 0)
;GUICtrlSetData($progress, 90)

;Menu
$menu = GUICtrlCreateMenu("File", -1)
$playlist = GUICtrlCreateMenuItem("Open playlist", $menu)
GUICtrlCreateMenuItem("", $menu)
$quit = GUICtrlCreateMenuItem("Quit", $menu)

;Button
$play = GUICtrlCreateButton("Play", 10, 115, 60)
$open = GUICtrlCreateButton("Open", 10, 10, 60)

;Slider
$slider = GUICtrlCreateSlider(83, 115, 100, 30, -1)
GUICtrlSetLimit($slider, 100, 0)
GuiCtrlSetData($slider, 100)

GUISetState()

While 1
$msg = GUIGetMsg()
Select
Case $msg = $open
$file = FileOpenDialog("Add selected file", "", "Sound files (*.mp3)", 1)
If @error = 0 Then SoundPlay($file, 0)
Case $msg = $play
If Not $file = "" Then
SoundPlay($file, 0)
Else
MsgBox(64, "Error", "Please open file")
EndIf
Case $msg = $slider
$Read_slider = GUICtrlRead($slider)
SoundSetWaveVolume($Read_slider)
Case $msg = $Gui_Event_Close
ExitLoop
Case $msg = $quit
Exit
Case $msg = $playlist
$list = FileOpenDialog("Add playlist", "", "Playlist (*.m3u)", 1)
$mp3_list = FileOpen($list, 0)
Prepare($mp3_list)
FileClose($mp3_list)
EndSelect
WEnd

Func Prepare($list)
While 1
$music = FileReadLine($mp3_list)
If @error <> 0 Then ExitLoop
Play($music)
WEnd
EndFunc

Func Play($music)
SoundPlay($music, 0)
EndFunc

Плейлист имеете такой формат:
\\ws10\d\Music\Scorpions\Scorpions - Destin.mp3
\\ws10\d\Music\Scorpions\SCORPIONS - EYE TO EYE.mp3
\\ws10\d\Music\Scorpions\Scorpions - Holiday.mp3

amel27
30-07-2007, 11:47
Creat0RКстати, а это нормально что при выборе системной папки (к примеру Мой компьютер), возвращается пустое значение? в оригинальной функции возвращается имя выбранного элемента (“Мой компьютер”). >>>
Исправленный вариант с расширенными комментариями,
чуть позже выложу CallBack-функцию для "нового стиля" с ограничением типов выбираемых объектов.#include <GUIConstants.au3>
#include <DllCallBack.au3>
; Сообщения, формируемые диалогом выбора
Global Const $BFFM_INITIALIZED = 1 ; Инициализация диалога завершена
Global Const $BFFM_SELCHANGED = 2 ; Выбор пользователем нового каталога
Global Const $BFFM_VALIDATEFAILEDA = 3 ; ANSI: в окно редактирования введен некорректный текст
Global Const $BFFM_VALIDATEFAILEDW = 4 ; WideChar: в окно редактирования введен некорректный текст
; Сообщения, принимаемые диалогом выбора
Global Const $BFFM_ENABLEOK = $WM_USER + 101 ; Включить/выключить кнопку "Ok"
Global Const $BFFM_SETOKTEXT = $WM_USER + 105 ; Задать текст кнопки "Ok"
Global Const $BFFM_SETEXPANDED = $WM_USER + 106 ; Раскрыть в дереве определенную папку
Global Const $BFFM_SETSTATUSTEXTA = $WM_USER + 100 ; ANSI: задать текст статусной строки
Global Const $BFFM_SETSTATUSTEXTW = $WM_USER + 104 ; WideChar: задать текст статусной строки
Global Const $BFFM_SETSELECTIONA = $WM_USER + 102 ; ANSI: переместить курсор к определенному каталогу в дереве
Global Const $BFFM_SETSELECTIONW = $WM_USER + 103 ; WideChar: переместить курсор к определенному каталогу в дереве

Global Const $BIF_NEWDIALOGSTYLE = 0x40 ; Вывести диалоговое окно "нового стиля" (IE 5.0)
; Флаги, применимые только для диалога в "старом стиле" (флаг $BIF_NEWDIALOGSTYLE сброшен)
Global Const $BIF_RETURNONLYFSDIRS = 0x1 ; Выбирать только объекты файловой системы
Global Const $BIF_STATUSTEXT = 0x4 ; Отображение дополнительного текстовое поля
Global Const $BIF_BROWSEFORCOMPUTER = 0x1000 ; Выбирать только компьютеры в сетевом окружении
Global Const $BIF_BROWSEFORPRINTER = 0x2000 ; Выбирать только принтеры в сетевом окружении
; Флаги, применимые только для диалога в "новом стиле" (флаг $BIF_NEWDIALOGSTYLE установлен)
Global Const $BIF_UAHINT = 0x100 ; Показывать текст "подсказки", недействителен для флага $BIF_EDITBOX (IE 6.0)
Global Const $BIF_NONEWFOLDERBUTTON = 0x200 ; Не отображать кнопку создания нового каталога (IE 6.0)
Global Const $BIF_SHAREABLE = 0x8000 ; Отображать специфические сетевые ресурсы: диски, принтеры, задания, etc. (IE 5.0)
; Флаги, примененимые к обоим стилям диалога
Global Const $BIF_DONTGOBELOWDOMAIN = 0x2 ; Не открывать домены в сетевом окружении
Global Const $BIF_BROWSEINCLUDEFILES = 0x4000 ; Позволить выбирать файлы (IE 5.0)
Global Const $BIF_EDITBOX = 0x10 ; Включить строку редактирования (IE 4.71)
Global Const $BIF_VALIDATE = 0x20 ; Посылать сообщение о наборе недопустимого имени (IE 4.71)
; Маска допустимых флагов для диалога "старого стиля"
Global Const $FSF_ALLOLDSTYLEFLAGS = BitOR ( _
$BIF_DONTGOBELOWDOMAIN, $BIF_BROWSEINCLUDEFILES, $BIF_EDITBOX, $BIF_VALIDATE, _
$BIF_BROWSEFORCOMPUTER, $BIF_BROWSEFORPRINTER, $BIF_RETURNONLYFSDIRS, $BIF_STATUSTEXT)
; Маска допустимых флагов для диалога "нового стиля"
Global Const $FSF_ALLNEWSTYLEFLAGS = BitOR ( $BIF_NEWDIALOGSTYLE, _
$BIF_DONTGOBELOWDOMAIN, $BIF_BROWSEINCLUDEFILES, $BIF_EDITBOX, $BIF_VALIDATE, _
$BIF_NONEWFOLDERBUTTON, $BIF_UAHINT, $BIF_SHAREABLE)

; $sText - текст приглашения;
; $iRoot - код корневого каталога (0 - "рабочий стол");
; $iFlags - набор флагов;
; $sIniDir - стартовый каталог;
; $hWnd - хэндл родительского окна;
; $sCallbackProc - имя CallBack-процедуры (или пустая строка)
Func _FileSelectFolder ($sText = '', $iRoot = 0, $iFlags = 0, $sIniDir = @ScriptDir, $hWnd = 0, $sCallbackProc = '_FileSFCallbackProc')
Local $ret, $pidl, $res='', $pCallbackProc=0, $iMask = $FSF_ALLOLDSTYLEFLAGS
; Контроль входных параметров
If $sIniDir<>'' Then $sIniDir = StringRegExpReplace($sIniDir, '([^\\])\\*$', '\1\\')
If StringRight($sIniDir, 2)=':\' Then $sIniDir &= '\'
If BitAND($iFlags, $BIF_NEWDIALOGSTYLE) Then $iMask = $FSF_ALLNEWSTYLEFLAGS
; Создание и инициализация основных структур данных
Local $uBI = DllStructCreate ("hwnd;ptr;ptr;ptr;int;ptr;ptr;int") ; BROWSEINFO
Local $uTX = DllStructCreate ("char[260];char") ; текст приглашения
Local $uMP = DllStructCreate ("char[260]") ; путь/имя выбранного объекта
Local $uCB = DllStructCreate ("char[260];int") ; CallBack структура
DllStructSetData ($uTX, 1, $sText)
DllStructSetData ($uCB, 1, $sIniDir)
DllStructSetData ($uCB, 2, $iFlags)
; Заполнение структуры BROWSEINFO
DllStructSetData ($uBI, 1, $hwnd)
DllStructSetData ($uBI, 3, DllStructGetPtr($uMP))
DllStructSetData ($uBI, 4, DllStructGetPtr($uTX))
DllStructSetData ($uBI, 5, BitAND($iFlags, $iMask))
DllStructSetData ($uBI, 7, DllStructGetPtr($uCB))
; Получение указателя на корневую папку (PIDL)
DllCall ("shell32.dll", "ptr", "SHGetSpecialFolderLocation", "int", 0 , "int", $iRoot , "ptr", DllStructGetPtr($uBI, 2))
; Получение указателя на CallBack-функцию
If $sCallbackProc<>'' Then DllStructSetData ($uBI, 6, _DllCallBack($sCallbackProc,'hwnd;uint;long;ptr'))
; Запуск системного диалога и обработка полученного указателя (PIDL)
$pidl = DllCall ("shell32.dll", "ptr", "SHBrowseForFolder", "ptr", DllStructGetPtr($uBI))
If IsArray($pidl) Then
$res = DllStructGetData ($uMP, 1) ; сохраняем имя объекта
If $pidl[0] Then
$ret = DllCall ("shell32.dll", "int", "SHGetPathFromIDList", "ptr", $pidl[0], "ptr", DllStructGetPtr($uMP))
If IsArray($ret) Then
If $ret[0] Then $res = DllStructGetData ($uMP, 1) ; сохраняем путь объекта
DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", $pidl[0]) ; чистим за собой
EndIf
EndIf
EndIf
If $pCallbackProc Then _DllCallBack_Free ($pCallbackProc) ; закрытие указателя
DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", DllStructGetData ($uBI, 2)) ; чистим за собой
Return $res
EndFunc ;==> _FileSelectFolder

; Функция обратного вызова для _FileSelectFolder по умолчанию
Func _FileSFCallbackProc ($hWnd, $iMsg, $wParam, $lParam)
Local $uTB = DllStructCreate("char[260];ptr"), $uCB = DllStructCreate ("char[260];int", $lParam)
Local Const $flg = BitOr($BIF_NEWDIALOGSTYLE, $BIF_RETURNONLYFSDIRS)
Local $ret, $tst = BitXOR(BitAnd(DllStructGetData($uCB,2), $flg), $flg)
Switch $iMsg
Case $BFFM_INITIALIZED
DllCall ("user32.dll","int","SendMessage", "hwnd", $hWnd, "int", $BFFM_SETSELECTIONA, "int", 1, "ptr", DllStructGetPtr($uCB,1))
$ret = DllCall ("shell32.dll", "int", "SHParseDisplayName", _
"wstr", DllStructGetData($uCB,1), "ptr", 0, "ptr", DllStructGetPtr($uTB,2), "int", 0, "ptr", 0)
If IsArray($ret) Then
If $ret[0]=0 Then
_FileSFCallbackProc($hWnd, $BFFM_SELCHANGED, DllStructGetData($uTB,2), $lParam)
DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", DllStructGetData($uTB,2)) ; чистим за собой
EndIf
EndIf
Case $BFFM_SELCHANGED
If $tst=0 Then
$ret = DllCall("shell32.dll", "int", "SHGetPathFromIDList", "ptr", $wParam, "ptr", DllStructGetPtr($uTB,1))
If IsArray($ret) Then
If $ret[0] Then
DllCall("user32.dll","int","SendMessage","hwnd",$hWnd,"int",$BFFM_ENABLEOK,"int",0,"ptr",1)
Else
DllCall("user32.dll","int","SendMessage","hwnd",$hWnd,"int",$BFFM_ENABLEOK,"int",0,"ptr",0)
EndIf
EndIf
EndIf
EndSwitch
EndFunc ;==> __FileSFCallbackProc

geka6pucT
30-07-2007, 22:27
Как можно с помощью AutoIt3 использовать обычный Twain сканнер?

Creat0R
31-07-2007, 04:04
Maza Faka
как можно проиграть плейлист?
Это не так уж просто, я сам начал давненько писать плеер, всё никак не осмелюсь его закончить, чтобы ты более менее представлял себе структуру подобного плеера (в моём стиле ;) ), вот тебе пример с добавлением в плей лист как отдельных треков, так и плейлист-файла (*.m3u) - для считывания плейлист-файла я написал функцию обработки строк (_M3uToArray()), все пути к файлам треков считываются в массив...


#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <Array.au3>

GUICreate("Player", 300, 200, -1, -1, -1)
GUISetIcon(@ProgramFilesDir & "\Winamp\winamp.exe", 0)

$Playlist = GUICtrlCreateListView("File Name|Path", 20, 50, 260, 120)

$Play = GUICtrlCreateButton("Play", 20, 10, 60)
$Open = GUICtrlCreateButton("Open", 110, 10, 60)

GUISetState()

While 1
$msg = GUIGetMsg()
Select
Case $msg = $Open
$OpenFile = FileOpenDialog("Add selected file", "", "Sound files (*.mp3;*.m3u)", 1)
If @error Then ContinueLoop

Local $FilesArray[2] = [1, $OpenFile]
If StringRight($OpenFile, 3) = "m3u" Then $FilesArray = _M3uToArray($OpenFile)

For $i = 1 To UBound($FilesArray)-1
$FileName = StringRegExpReplace($FilesArray[$i], "^.*\\", "")
GUICtrlCreateListViewItem($FileName & "|" & $FilesArray[$i], $PlayList)
Next
Case $msg = $Play
$Selected = _GUICtrlListViewGetItemText($PlayList, -1, 1)
If $Selected <> "" Then
SoundPlay($Selected, 0)
Else
MsgBox(64, "Error", "Please select file")
EndIf
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd

Func _M3uToArray($M3uPath)
If StringRight($M3uPath, 4) <> ".m3u" Or Not FileExists($M3uPath) Then Return -1
Local $OpenM3u = FileOpen($M3uPath, 0), $M3uArr[1]
While 1
$CurrentLine = FileReadLine($OpenM3u)
If @error = -1 Then ExitLoop
If StringLeft($CurrentLine, 4) <> "#EXT" Then _ArrayAdd($M3uArr, $CurrentLine)
WEnd
FileClose($OpenM3u)
$M3uArr[0] = UBound($M3uArr) - 1
Return $M3uArr
EndFunc


P.S
Чтобы после проигрывания одного трека начал проигрываться другой, нужно использовать библиотеку Sound.au3, там есть функции для определения статуса текущей песни, перемотка песни, ну и в принцепе все основные функции требуемые для примитивного плеера ;)

amel27
Исправленный вариант с расширенными комментариями
Биг сенкс! Возвращается имя обьекта как положенно! :up:

geka6pucT
Как можно с помощью AutoIt3 использовать обычный Twain сканнер?
А подробнее можно? “использовать” можно понять по разному ;)

Creat0R
31-07-2007, 04:39
amel27
Есть ещё проблема с функцией _FileOpenDialog() :shuffle: - Если использовать флаг 4 (возможность выделения более одного файла), то функция возвращает очень много символов | и иногда между ними проскакивают разные цифры...

Это лечится?

EgOrus
31-07-2007, 07:36
Товарищи, подскажите кто знает формат командной строки утилиты Exe2aut.exe кот. идет в комплекте с дистрибутивом?
В старых версиях было Exe2aut.exe /in файлю.exe /out файл.au3 . Видимо формат сменился или от комстроки совсем отказались.

Creat0R
31-07-2007, 08:15
EgOrus,
или от комстроки совсем отказались
Точнее забыли (http://www.autoitscript.com/forum/index.php?showtopic=46786&hl=Exe2aut.exe) про неё :biggrin:
В 3.2.5.0 её вернули как я понял.

amel27
31-07-2007, 13:03
Creat0RЭто лечится?опять танцы вокруг Binary :not-me:... замени кусок между If и EndIf: If BitAND ($iOpt, 4) Then
$i = 1
While 1
If Binary(DllStructGetData ($usFile, 1, $i))=0 Then
If Binary(DllStructGetData ($usFile, 1, $i+1))=0 Then
ExitLoop
Else
DllStructSetData ($usFile, 1, '|', $i)
EndIf
EndIf
$i += 1
Wend
EndIf

P.S. честно говоря пока не понял как сравнивать бинарные данные, но вроде работает

EgOrus
31-07-2007, 15:02
Creat0R
благодарю, бэтку даже и не заметил




© OSzone.net 2001-2012