Имя пользователя:
Пароль:
 | Правила  

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

Закрытая тема
Настройки темы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

(*.*)


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


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

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


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



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


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

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

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по 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 <WinAPI.au3>
#include <GUIConstants.au3>

Global Const $CS_VREDRAW = 1
Global Const $CS_HREDRAW = 2
Global Const $IDI_APPLICATION = 32512
Global Const $WHITE_BRUSH = 0
Global Const $CW_USEDEFAULT = 0x80000000

Global $hMsgHelloWndProc ; переменная для хранения хэндла CallBack-функции класса
; Тестовый ГУИ
$hWndMain = GUICreate("My GUI")
GUISetState (@SW_SHOW)
; Создаем и регистрируем класс
$iRet = MsgHelloReg("HelloMsg", $hMsgHelloWndProc)
; Создаем и активизируем экземпляр класса
$hWndHello = _WinAPI_CreateWindowEx(0, "HelloMsg", "Hello Application", $WS_OVERLAPPEDWINDOW, $CW_USEDEFAULT, 0, $CW_USEDEFAULT, 0, $hWndMain, 0, _WinAPI_GetModuleHandle(""), 0)
$iRet = _WinAPI_ShowWindow($hWndHello)

While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
; Разрегистрируем класс перед выходом
$iRet = MsgHelloUnReg("HelloMsg", $hMsgHelloWndProc)

; UDF для создания и регистрации нашего класса

Func MsgHelloReg($sClassName, ByRef $hWndProc)
    ; Выбираем иконки и курсоры (тут способов много)
    Local $aIcon = DllCall("user32.dll", "hwnd", "LoadIcon", "hwnd", 0, "int", $IDI_APPLICATION)
    Local $aCursor = DllCall("user32.dll", "hwnd", "LoadCursor", "hwnd", 0, "int", $IDC_ARROW)
    ; Регистрируем оконную процедуру, как CallBack-функцию
    $hWndProc = DLLCallbackRegister ("MsgHelloWndProc", "int", "hwnd;int;wparam;lparam")
    ;Создаем и инициализируем структуры класса
    Local $tWndClassEx = DllStructCreate("uint cbSize;uint style;ptr lpfnWndProc;int cbClsExtra;int cbWndExtra;hwnd hInstance;hwnd hIcon;hwnd hCursor;hwnd hbrBackground;ptr lpszMenuName;ptr lpszClassName;hwnd hIconSm")
    Local $tClassName = DllStructCreate("char["& StringLen($sClassName)+1 &"]")
    DllStructSetData($tClassName, 1, $sClassName)

    DllStructSetData($tWndClassEx, "cbSize", DllStructGetSize($tWndClassEx) )
    DllStructSetData($tWndClassEx, "style", BitOR($CS_VREDRAW, $CS_HREDRAW) )
    DllStructSetData($tWndClassEx, "lpfnWndProc", DllCallbackGetPtr($hWndProc))
    DllStructSetData($tWndClassEx, "hInstance", _WinAPI_GetModuleHandle(""))
    DllStructSetData($tWndClassEx, "hIcon", $aIcon[0])
    DllStructSetData($tWndClassEx, "hCursor", $aCursor[0])
    DllStructSetData($tWndClassEx, "hbrBackground", _WinAPI_GetStockObject($WHITE_BRUSH))
    DllStructSetData($tWndClassEx, "lpszClassName", DllStructGetPtr($tClassName))
    DllStructSetData($tWndClassEx, "hIconSm", $aIcon[0])
    ; Собственно процедура регистрации
    Local $aRet = DllCall("user32.dll", "dword", "RegisterClassExA", "ptr", DllStructGetPtr($tWndClassEx) )
    Return $aRet[0]
EndFunc ; ==> MsgHelloReg

; UDF для разрегистрации класса (не должно быть экземпляров класса)

Func MsgHelloUnReg($sClassName, ByRef $hWndProc)
    DllCallbackFree($hWndProc)
    Local $aRet = DllCall("user32.dll", "int", "UnregisterClassA", "str", $sClassName, "hwnd", _WinAPI_GetModuleHandle(""))
    Return $aRet[0]
EndFunc ; ==> MsgHelloUnReg

; Код оконной процедуры нашего оконного класса

Func MsgHelloWndProc($hWnd, $uMsg, $wParam, $lParam)
    Local $aRet, $iRet, $hDC, $tRect, $sDrawText = "Hello, World!"
    Switch $uMsg
        Case $WM_PAINT
            $hDC = _WinAPI_GetDC($hWnd) ; получаем контекст устройства
            $tRect = _WinAPI_GetClientRect($hWnd) ; получаем координаты клиентской области
            $aRet = DllCall("user32.dll", "int", "ValidateRect", "hwnd", $hWnd, "ptr", DllStructGetPtr($tRect) ) ; делаем область "валидной"
            ; здесь код рисования окна
            $aRet = DllCall("user32.dll", "int", "FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($tRect), "hwnd", _WinAPI_GetStockObject($WHITE_BRUSH) )
            $iRet = _WinAPI_DrawText($hDC, $sDrawText, $tRect, BitOR($DT_SINGLELINE, $DT_CENTER, $DT_VCENTER))
            ; освобождаем контекст устройства
            _WinAPI_ReleaseDC($hWnd, $hDC)
        Case $WM_CLOSE
            _WinAPI_DestroyWindow($hWnd)
        Case $WM_DESTROY
;           $aRet = DllCall("user32.dll", "none", "PostQuitMessage", "int", 0 )
        Case Else
            Return _WinAPI_DefWindowProc($hWnd, $uMsg, $wParam, $lParam) ; передаем "чужие" сообщение дальше на обработку
    EndSwitch
    Return 0
EndFunc ; ==> MsgHelloWndProc
З.Ы. Есть одна проблемка... почему-то стандартный ход для WM_PAINT (пара ф-ций BeginPaint / EndPaint) у меня не заработал, а именно BeginPaint не возвращает контекст и не заполняет структуру PAINTSTRUCT, поэтому пришлось делать все за нее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:54, 03-04-2008 | #371



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

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


Googler


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

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


N0rB,
Цитата:
Эт наверное из-за пробелов.....???? »
если в батнике все работает, а в AutoIT нет, значит дело не в пробелах...
NETSH работает с OEM-кодировкой, а AutoIT с ANSI... поэтому нельзя передавать русский текст из AutoIT "как есть" сразу в NETSH. Решений проблемы много, я к примеру использую UDF, предварительно преобразующий текст команды в OEM-кодировку:
Код: Выделить весь код
$strANSI= "Подключение по локальной сети"
$strOEM = _StringToOEM($strANSI)
MsgBox(0,'',"Текст в ANSI: "& $strANSI &@CRLF& _
            "Текст в OEM : "& $strOEM )

Func _StringToOEM($strText)
    Local $oem = DllStructCreate("char["& StringLen($strText)+1 &"]")
    Local $ret = DllCall("User32.dll", "int", "CharToOem", "str", $strText, "ptr", DllStructGetPtr($oem))
    If Not(IsArray($ret)) Then Return SetError(1, 0, '') ; ошибка DLL
    If $ret[0]=0 Then Return SetError(2, $ret[0], '') ; ошибка функции
    Return DllStructGetData($oem, 1)
EndFunc  ;==> _StringToOEM
FYI: еще возможные варианты: преобразование в самом CMD через командные утилиты (есть такие); правка параметров в реестре с последующим вызовом NETSH int ip reset, etc.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:22, 03-04-2008 | #372


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Низкий поклон! я уже подумал что это нереально добиться средствами AutoIt'а.
Буду разбирать что к чему, я просто обязан понять как оно работает, ведь столько времени было потрачено на попытки реализовать это самому... а за коменты отдельное спасибо .

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

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

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


Отправлено: 07:27, 03-04-2008 | #373


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


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

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


Здравствуйте.
Цитата Creat0R:
Вот так должно сработать:
Код:
ControlClick("[CLASS:TWizardForm]", "", "TRadioButton1") »
Ну блин,Спасибо!! Так сработало,а то я уже голову сломал. Вся фишка в " [CLASS:TWizardForm] !

Цитата Creat0R:
ControlCommand() требует как минимум 4 параметра, я только не понял зачем там нужна эта команда? »
Теперь понятное дело не нужна.

Отправлено: 08:44, 03-04-2008 | #374


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


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

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


Пока только читал, но вот появились вопросы и хочу их задать: (AutoIt 3.2.11.5)
1. Функция _GUICtrlStatusBar_SetBkColor($hWnd, $iColor) не устанавливает цвет у фона строки статуса,
это только у меня так или ...
2. Возможно ли сделать так чтобы вкладки TabControl controlа создавались вертикально (ну это можно с помощью $TCS_VERTICAL)
но надписи были горизонтальными ???
3. Как перехватить нажатие на кнопку в другом приложении ?

Отправлено: 09:46, 03-04-2008 | #375


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


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

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


Мне кто скажет?

не могу логинится на http://www.nigma.ru и ещё на этом сайте надо что бы проверялось что написанно в поле email , если там qwe@mail.ru то продолжать работу. елси нет то закрывать окно


как запустить ссылку www.ya.ru/staemme.php? переменая &screen=main переменая =build переменая

Отправлено: 10:16, 03-04-2008 | #376


Googler


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

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


Creat0R,
Цитата:
Буду разбирать что к чему, я просто обязан понять как оно работает, ведь столько времени было потрачено на попытки реализовать это самому »
крайне рекомендую почитать книгу Ю.Щупака "Win32 API. Эффективная разработка приложений", там все основательно разжевано... вся (!) книга так или иначе посвящена твоему вопросу... собственно, я лишь перевел первый пример из книги с Си на AutoIT.

P.S. пару линков кину в PM, но сам я по старинке предпочитаю бумажный вариант
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:52, 03-04-2008 | #377


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

Ветеран


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

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


amel27
Если найдётся время посмотри пожалуйста где ошибка.
Пытаюсь реализовать вот такой хинт:
Код: Выделить весь код
#include <GuiConstants.au3>

Global Const $HH_DISPLAY_TEXT_POPUP = 0xE
Global Const $HH_CLOSE_ALL = 0x12

Global $DllRet

$hGUI = GUICreate("Test GUI", 300, 200, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_CONTEXTHELP)

$hInput1 = GUICtrlCreateInput("", 50, 50, 200, 20)

$hInput2 = GUICtrlCreateInput("Input text here", 50, 100, 200, 20)

$HelpButton = GUICtrlCreateButton("Help", 20, 160, 60, 25)

$HH_POPUP = DllStructCreate("int Size;hwnd Dll;int String;char Text[256];ptr Top;int Foreground;int Background;int Margins;str Font")

DllStructSetData($HH_POPUP, "Size", DllStructGetSize($HH_POPUP))
DllStructSetData($HH_POPUP, "String", 0)
DllStructSetData($HH_POPUP, "Text", "Help Popup")
DllStructSetData($HH_POPUP, "Top", 200)
DllStructSetData($HH_POPUP, "Foreground", -1)
DllStructSetData($HH_POPUP, "Background", -1)
DllStructSetData($HH_POPUP, "Margins", -1)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case -3
            ExitLoop
        Case $HelpButton

            $DllRet = DllCall("HHCtrl.ocx", "hwnd", "HtmlHelp", "hwnd", $hGUI, "str", 0, _
            "int", $HH_DISPLAY_TEXT_POPUP, "ptr", DllStructGetPtr($HH_POPUP))

            $DllRet = $DllRet[0]
            ConsoleWrite($DllRet & @LF)
    EndSwitch
WEnd

DllCall("HHctrl.ocx", "hwnd", "HtmlHelp", "hwnd", $DllRet, "str", "", "int", $HH_CLOSE_ALL, "int", 0)
Источники: 1; 2; 3

Отправлено: 10:56, 03-04-2008 | #378


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


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

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


и ещё как с каждым циклом увеличивать переменую на 10 ?

Отправлено: 11:00, 03-04-2008 | #379


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

Ветеран


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

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


amel27
Нашёл неплохой пример на PowerBasic-e, но реализовать этот пример на AutoIt-е не получается
Код: Выделить весь код
#include <GuiConstants.au3>
#include <WinAPI.au3>

Global Const $HH_DISPLAY_TEXT_POPUP = 0xE
Global Const $HH_CLOSE_ALL = 0x12

Global $DllRet

$hGUI = GUICreate("Test GUI", 300, 200, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_CONTEXTHELP)

$hInput1 = GUICtrlCreateInput("", 50, 50, 200, 20)

$hInput2 = GUICtrlCreateInput("Input text here", 50, 100, 200, 20)

$HelpButton = GUICtrlCreateButton("Help", 20, 160, 60, 25)

$HH_POPUP = DllStructCreate("int Size;hwnd Dll;int String;char Text[128];ptr Coord[2];int Foreground;int Background;int Margins;str Font")

$aPos = MouseGetPos()

$tpoint = DllStructCreate("int X;int Y")
DllStructSetData($tpoint, "X", $aPos[0])
DllStructSetData($tpoint, "Y", $aPos[1])

DllStructSetData($HH_POPUP, "Size", DllStructGetSize($HH_POPUP))
DllStructSetData($HH_POPUP, "hwnd", _WinAPI_GetWindowLong($hGUI, $GWL_HINSTANCE))
DllStructSetData($HH_POPUP, "String", 0)
DllStructSetData($HH_POPUP, "Text", "Help Popup")
DllStructSetData($HH_POPUP, "Coord", DllStructGetPtr($tpoint, 1), 1)
DllStructSetData($HH_POPUP, "Coord", DllStructGetPtr($tpoint, 2), 2)
DllStructSetData($HH_POPUP, "Foreground", 0)
DllStructSetData($HH_POPUP, "Background", 0xFF0000)
DllStructSetData($HH_POPUP, "Margins", -1)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case -3
            ExitLoop
        Case $HelpButton

            $DllRet = DllCall("HHCtrl.ocx", "hwnd", "HtmlHelp", "hwnd", $hGUI, "str", 0, _
            "int", $HH_DISPLAY_TEXT_POPUP, "dword*", DllStructGetPtr($HH_POPUP))

            $DllRet = $DllRet[0]
            ConsoleWrite($DllRet & @LF)
    EndSwitch
WEnd

DllCall("HHctrl.ocx", "hwnd", "HtmlHelp", "hwnd", $DllRet, "str", "", "int", $HH_CLOSE_ALL, "int", 0)

Отправлено: 11:59, 03-04-2008 | #380



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 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




 
Переход