Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты
Creat0R,
rasphone.exe /?
Пример
XXXler
Спасибо, но выдаётся следующее сообщение:
http://img65.imageshack.us/img65/330/connecterrmi3.th.png (http://img65.imageshack.us/my.php?image=connecterrmi3.png)
Может я неверное ввожу имя? где получить точное имя подключения?
И кстати, у меня там пусто в этой книге, создал подключение, но ошибка та же :(
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
amel27
Спасибо за функции, но почему то функция для подключения пишет что соеденение установлено, хотя на самом деле оно не подключается.
Я пробовал (как и на оф форуме советуют) предварительно пооткрывать Dll'ки, но результат тот же.
А функция _InetDisconnect() вообще выпадает с фатальной ошибкой:
http://img264.imageshack.us/img264/7662/connectdllerrdq2.th.png (http://img264.imageshack.us/my.php?image=connectdllerrdq2.png)
В принципе отсоедениться не проблема через Rasdial /Disconnect - главное подсоеденится обратно.
С флагами игрался по всевозможному, а параметры вызова Dll я не осмелился менять, если честно понятия не имею что там должно быть (хотябы приблизительно).
Creat0R почему то функция для подключения пишет что соеденение установлено, хотя на самом деле оно не подключаетсяв параметрах подключения браузера должно стоять "всегда использовать принятое по умолчанию подключение"
функция _InetDisconnect() вообще выпадает с фатальной ошибкойисправил :rolleyes:
если честно понятия не имею что там должно быть дык для этого и дал линки
Creat0R
Хм... По идее, если rasdial отключает, то он должен и подключать но при этом необходимо указывать логин и пароль.
rasdial 012 UserName Password
Если логин и пароль у подключения отсутствуют или неизвестны то я думаю правильное решение дал XXXler - использовать rasphone.exe
amel27
в параметрах подключения браузера должно стоять "всегда использовать принятое по умолчанию подключение"
Во! так работает! :yahoo: большое спасибо!
Diamond
если rasdial отключает, то он должен и подключать но при этом необходимо указывать логин и пароль.
И это работает! я раньше не писал ни логин ни пароль, думал раз я админ на компе, значит это не требуется! :up: - Спасибо!
В 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
Creat0R
думал раз я админ на компе, значит это не требуется
...не совсем понял... :wacko: а при чём здесь админ... :) - я имел ввиду не системные пароль и имя, а те что требует провайдер при подключении, и если я правильно понял, то в качестве имени и пароля в твоём случае можно ввести что угодно, думаю, это также сработает. ;)
Diamond
а при чём здесь админ
Я думал что раз при подключении (ручном) мне не нужно вводить ни логин, ни пароль, значит оно как бы уже запомнилось, и если зайти не под админом, то пароль и логин придётся вводить заного... но видимо я ошибься :sorry:
я имел ввиду не системные пароль и имя, а те что требует провайдер при подключении
Я понял ;)
в качестве имени и пароля в твоём случае можно ввести что угодно, думаю, это также сработает
Хм, потому что я админ? :unsure: надо будет проверить... спасибо.
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
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 сканнер?
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 сканнер?
А подробнее можно? “использовать” можно понять по разному ;)
amel27
Есть ещё проблема с функцией _FileOpenDialog() :shuffle: - Если использовать флаг 4 (возможность выделения более одного файла), то функция возвращает очень много символов | и иногда между ними проскакивают разные цифры...
Это лечится?
Товарищи, подскажите кто знает формат командной строки утилиты Exe2aut.exe кот. идет в комплекте с дистрибутивом?
В старых версиях было Exe2aut.exe /in файлю.exe /out файл.au3 . Видимо формат сменился или от комстроки совсем отказались.
EgOrus,
или от комстроки совсем отказались
Точнее забыли (http://www.autoitscript.com/forum/index.php?showtopic=46786&hl=Exe2aut.exe) про неё :biggrin:
В 3.2.5.0 её вернули как я понял.
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. честно говоря пока не понял как сравнивать бинарные данные, но вроде работает
Creat0R
благодарю, бэтку даже и не заметил
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.