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

Компьютерный форум 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
Цитата:
Или что-то другое имеется в виду? покажи плиз на примере »
ура, дошло! ...извиняюсь, невнимательно читал твой код
провел вот такой эксперимент:
Код: Выделить весь код
#include <GUIConstants.au3>
#include <GuiTreeView.au3>
Opt("GuiOnEventMode", 1)

$Gui = GUICreate("Test", 300, 200)
GUISetOnEvent(-3, "OnExit")

$TreeView = GUICtrlCreateTreeView(20, 20)
$hTreeView= IDToHwnd($Gui, $TreeView) ; хэндл $TreeView

$TV_ID1 = GUICtrlCreateTreeViewItem("Created1", $TreeView)
$hItem = _GUICtrlTreeViewInsertItem($TreeView, "Inserted1")
$TV_ID2 = GUICtrlCreateTreeViewItem("Created2", $TreeView)

GUISetOnEvent(-3, "OnExit")
GUISetState()

; отсюда видно что элемент, вставленный через _GUICtrlTreeViewInsertItem()
; не получает своего ControlID (нумерация ID сквозная)
ConsoleWrite($TreeView&@CRLF) ; ControlID $TreeView
ConsoleWrite($TV_ID1  &@CRLF) ; ControlID $TV_ID1
                              ; тут должен был быть ControlID $hItem
ConsoleWrite($TV_ID2  &@CRLF) ; ControlID $TV_ID2

; это просто хэндл $TreeView
ConsoleWrite(@CRLF)
ConsoleWrite('0x'&Hex($hTreeView)&@CRLF)

; видно, что Hwnd элементов TreeView не являетя Hwnd окна:
ConsoleWrite(@CRLF)
ConsoleWrite('0x'&Hex(IDToHwnd($Gui, 4))&@CRLF)
ConsoleWrite('0x'&Hex(IDToHwnd($Gui, 5))&@CRLF)
; или даже так, один фиг:
ConsoleWrite(@CRLF)
ConsoleWrite('0x'&Hex(IDToHwnd($hTreeView, 4))&@CRLF)
ConsoleWrite('0x'&Hex(IDToHwnd($hTreeView, 5))&@CRLF)

While 1
    Sleep(100)
WEnd

Func HwndToID($hWnd)
    Local $iRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hWnd)
    Return $iRet[0]
EndFunc

Func IDToHwnd($hWndMain, $CtrlID)
    Local $iRet = DllCall("user32.dll", "int", "GetDlgItem", "hwnd", $hWndMain, "int", $CtrlID)
    Return $iRet[0]
EndFunc

Func OnExit()
    Exit
EndFunc
Цитата:
ведь если поставить событие для TreeView, то оно не срабатывает как таковое »
Хм... вот это странно, ведь ControlID у него есть... можно было и сделать для случая клика на любом пункте TreeView

Цитата:
но с ограничением в количестве создаваемых элементов »
откуда инфа и чем ограничено количество?...
может ограничение как раз и связано с присвоением пунктам ControlID?

так глядишь и сам начну понимать кой-чего в ГУИ

Отправлено: 13:23, 28-10-2007 | #651



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

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


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
ура, дошло!


Цитата:
Хм... вот это странно, ведь ControlID у него есть... можно было и сделать для случая клика на любом пункте TreeView
С ListView подобна структура срабатывает, видимо потому что у него есть заголовок.

Цитата:
откуда инфа и чем ограничено количество?
Инфа из справки как ни странно
Цитата AutoIt3 Help:
Maximum number of GUI controls per window: 4096
Но как говорится, «Доверяй но проверяй», вот я и проверяю:

Код: Выделить весь код
#include <GUIConstants.au3>
Opt("GuiOnEventMode", 1)

$Gui = GUICreate("Test", 300, 200)
GUISetOnEvent(-3, "OnExit")

$TreeView = GUICtrlCreateTreeView(20, 20)

GUISetState()

For $i = 1 To 4100
    $Item = GUICtrlCreateTreeViewItem("Item " & $i, $TreeView)
    If $Item Then
        PrintF("Created Item: " & $i)
    Else
        PrintF("Oops, we have reached the limit on Item: " & $i-1)
        ExitLoop
    EndIf
Next

While 1
    Sleep(100)
WEnd

Func PrintF($Str, $Line=@ScriptLineNumber)
    ConsoleWrite(@LF & "+======================================================" & @LF & _
                "--> Script Line (" & $Line & "):" & @LF & "!" & @TAB & $Str & @LF & _
                "+======================================================")
EndFunc

Func OnExit()
    Exit
EndFunc
Создание останавливается на 4095 потому что создание самого TreeView это уже первый контрол.

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

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

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

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

Отправлено: 17:42, 28-10-2007 | #652


Аватара для TERMINAL

Ветеран


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

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


какая команда делает печать?

-------
Автоматизация прежде всего....


Отправлено: 11:15, 29-10-2007 | #653


Googler


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

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


Creat0R
может через GUIRegisterMsg() типа такого?
Код: Выделить весь код
#include <GUIConstants.au3>
#include <A3LConstants.au3>
#include <GuiTreeView.au3>

Opt("GuiOnEventMode", 1)

$Gui = GUICreate("Test", 300, 200)
GUISetOnEvent(-3, "OnExit")
$nTreeView = GUICtrlCreateTreeView(20, 20)
$hTreeView = IDToHwnd($Gui, $nTreeView)
$nTV1_ID = _GUICtrlTreeViewInsertItem($nTreeView,"Inserted1")
$nTV2_ID = _GUICtrlTreeViewInsertItem($nTreeView,"Inserted2")

GUIRegisterMsg ($WM_NOTIFY, "TV_Event")
GUISetState()

While 1
    Sleep(100)
WEnd

Func TV_Event($hWnd, $Msg, $wParam, $lParam)
    If $Msg = $WM_NOTIFY Then
        Local $NMHDR = DllStructCreate("hwnd;uint;short", $lParam)
        If DllStructGetData($NMHDR, 1)=$hTreeView And DllStructGetData($NMHDR,3)=-451 Then
            ConsoleWrite(_GUICtrlTreeViewGetTree($nTreeView,'\')&@CRLF)
        EndIf
    EndIf
    Return $GUI_RUNDEFMSG
 EndFunc

Func OnExit()
    Exit
EndFunc

Func HwndToID($hControlID)
    $iRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hControlID)
    Return $iRet[0]
EndFunc

Func IDToHwnd($hWnd, $CtrlID)
    $iRet = DllCall("user32.dll", "int", "GetDlgItem", "hwnd", $hWnd, "int", $CtrlID)
    Return $iRet[0]
EndFunc
З.Ы. я уже сталкивался ранее с контролами без ControlID при установке специфического софта... вот я с ними тогда помучился... собсно из-за них и пришлось лезть в дебри
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:44, 29-10-2007 | #654


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


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

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


как передать строку?
вобщем есть вот это:
$file = FileOpen("c:\1.txt", 0)
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
Run ("notepad.exe")
WinWait("Untitled - Notepad","")
If Not WinActive("Untitled - Notepad","") Then WinActivate("Untitled - Notepad","")
WinWaitActive("Untitled - Notepad","")
Send(GUICtrlRead($line))
но в нотпаде пишет НОЛЬ вместо определенного ключа . есть ли возможность вставить этот ключ в окно программы желательно посимвольно через SEND т.к. 4 окна.
и еше хотелось бы удалять использованный ключ

Отправлено: 15:53, 29-10-2007 | #655


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

Ветеран


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

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


mikola1983
Цитата:
Send(GUICtrlRead($line))
Это что?
Как я понял ты хочешь выслать строку в блокнот?
Сделай так:
Код: Выделить весь код
ControlSend("Untitled - Notepad", "", "Edit1", $line)

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


Отправлено: 16:57, 29-10-2007 | #656


Аватара для Creat0R

Must AutoIt


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

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


TERMINAL,
Цитата:
какая команда делает печать?
Конкретной такой команды нет, но для печати документа с файла можно использовать ShellExecute()....

Код: Выделить весь код
ShellExecute("MyFile.txt", "", @ScriptDir, "Print")
amel27,
Цитата:
может через GUIRegisterMsg() типа такого?
О, оно работает получше чем все мои попытки (я пробовал через другие сообщения, например улавливал нажатия мышки, но не всегда срабатывало).
Спасибо!

P.S
Функция IDToHwnd() не обязательна в этом случае, можно просто использовать GUICtrlGetHandle($nTreeView)

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

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

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:04, 29-10-2007 | #657


Googler


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

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


Creat0R
Цитата:
Конкретной такой команды нет
Как же нет?.. по справке как минимум две: _FilePrint() и _WordDocPrint()
первая по сути тот же ShellExecute(), а вторая специально для печати документов MS Word, пример:
Код: Выделить весь код
#include <Word.au3>

$sDocPath = @ScriptDir & "\Test.doc" ; путь к документу Word

$oWordApp = _WordCreate ("") ; создаем объект MS Word
$oDoc = _WordDocOpen ($oWordApp, $sDocPath) ; открываем существующий файл
_WordDocPrint ($oDoc) ; печатаем документ
_WordQuit ($oWordApp, 0) ; закрываем окно и освобождаем объект
необязательные параметры:

$b_Background - ожидать или нет завершения печати;
$i_Copies - количество экземпляров;
$i_Orientation - ориентация страницы (книга/альбом);
$b_Collate - разобрать по копиям;
$s_Printer - выбор принтера (имя);
$i_Range - выбор страниц для печати;
$i_From - с какой страницы (для $i_Range=3);
$i_To - по какую страницу печатать (для $i_Range=3);
$s_Pages - список страниц через запятую (для $i_Range=4);
$i_PageType - все/четные/нечетные;
$i_Item - печать дополнительных элементов.

Цитата:
оно работает
угу, только я не совсем понял насчет сообщения $TVN_SELCHANGED - в "A3LTreeView.au3" определен $TVN_SELCHANGEDA = $TVN_FIRST-2 (-402), а по факту приходит $TVN_SELCHANGEDW = $TVN_FIRST-51 (-451)

Отправлено: 04:09, 30-10-2007 | #658


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
по справке как минимум две: _FilePrint() и _WordDocPrint()
Я про UDF'ы забыл, прошёлся поиском по обычной справке, а там только ShellExecute всплыл как вариант.

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

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

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


Отправлено: 05:49, 30-10-2007 | #659


Новый участник


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

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


Добрый вечер.
Вот есть 2 вопроса:

1 Как сделать чтобы можно было скомпилированому файлу автоита передавать даные через ключи, например так:
Код: Выделить весь код
script.exe /f "list.txt"
или так
Код: Выделить весь код
script.exe /h /d /s
?

2 Как сделать так чтобы результат выполнения например функции ProcessList(выводит массив со списком процесов) выдавался в командную строку windows?

Отправлено: 22:22, 31-10-2007 | #660



Компьютерный форум 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




 
Переход