Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


Сообщения: 36567
Благодарности: 6698


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 27-01-2008
Внимание!
Тема переведена в архивное состояние







(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.


Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).
Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).



Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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/in...=post&id=15441

Последний раз редактировалось amel27, 24-07-2007 в 09:45.

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:09, 23-07-2007 | #171



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
хотя он и позволяет использовать все возможности диалоговых окон (в т.ч. Explorer style)
Отлично... спасибо за то что узнал у picaso.
Правда теперь выбрать другой каталог практический невозможно

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:48, 23-07-2007 | #172


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Правда теперь выбрать другой каталог практический невозможно
действительно... исправил
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:35, 24-07-2007 | #173


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
исправил
Спасибо.

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

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

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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 04:31, 24-07-2007 | #174


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Я так понял теперь можно и стильный диалог отображать? какой флаг для этого используется? (перепробовал все стандартные, не один не подошел).
да не, вроде пашет... правда там отличие только в ресайзе:
Код: Выделить весь код
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)
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:45, 24-07-2007 | #175


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Creat0R
Я не знаю, может тебе уже попадалась функция от Gafrost, но там с ней тоже какие-то проблемы. Лично у меня, она вернула "пусто" когда я был в offline.

Отправлено: 08:11, 24-07-2007 | #176


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27

Работает!!!
Спасибо ещё раз.

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

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

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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 08:35, 24-07-2007 | #177


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:03, 24-07-2007 | #178


Аватара для DenchikK

Старожил


Сообщения: 288
Благодарности: 40

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
     Case $Proxy

          For $i = 1 To UBound($Proxy_Array)-1
          ControlSetText ( 'Programs', '', 'Edit4', $proxy_Array[$i])
          Next
Но получается - что все считанные данные промелькивают в поле заполнения!

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

Отправлено: 14:46, 24-07-2007 | #179


Аватара для Maza Faka

Ветеран


Сообщения: 604
Благодарности: 133

Профиль | Отправить PM | Цитировать


Как отключить монитор используя WinApi?

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 18:35, 24-07-2007 | #180



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход