Войти

Показать полную графическую версию : [Архив - Часть 3] 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

TERMINAL
01-04-2008, 10:48
Creat0R, вопрос !
делаю такую фишку
RegWrite("HKEY_CURRENT_USER\Software\Data","Key","REG_SZ",@MDAY)
$dat = RegRead("HKEY_CURRENT_USER\Software\Data","Key")
$dates=$dat+1
нужно чтобы выдавалось значение 02 а не 2 и как сделать чтобы когда делаешь $dates=$dat-1 получалось 31 или 30 (взависимости от месяца) а не результат 0?

Maza Faka
01-04-2008, 15:38
TERMINAL
Попробуй так:
#include <Date.au3>

Dim $Date

RegWrite("HKCU\Software\Data", "Key", "REG_SZ", @MDAY)
$Date = RegRead("HKCU\Software\Data", "Key")

$Date = _DateAdd("D", -1, _NowCalcDate())

$Date = StringRegExpReplace($Date, "^.*/", "")

MsgBox(0, "", StringFormat("%02i", $Date))

Ded Vova
01-04-2008, 22:41
Доброе время суток. Помогите с проблемой.Мучаюсь второй день, нужно выбраьт чебокс в окне, клавиши выбора "TAB" и "8" или стрелка вверх. "TAB" срабатывает, а вот вторая нет. Пробую по ID; clas; radiobutton. Результат 0. Останавливается на этом окне .Какой выход? Спасибо.

Vadikan
02-04-2008, 00:15
Ded Vova, это InnoSetup (http://oszone.net/2766#inno), оно не ставится с ключами, раз вы Autoit пытаетесь прикрутить?

Creat0R
02-04-2008, 03:25
Ded Vova,
Пробую по ID; clas; radiobutton. Результат 0
Можно увидеть код пробы? :) и по всей видимости (судя по скрину) там класс «TNewCheckListBox».

Кликать примерно так:

ControlClick("Установка - Фото МИКСЕР", "", "TNewCheckListBox")

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

N0rB
02-04-2008, 13:24
Меняю с помощью скрипта IP на локальном компе через вызов cmd
netsh interface ip set address Local static 192.168.0.2 255.255.255.0
где Local - имя подключения. При замене имени подключения на стандартное Подключение по локальной сети эта конструкция перестает работать.не подскажет ли кто что можно сделать??Эт наверное из-за пробелов.....????

Ded Vova
02-04-2008, 16:05
Спасибо за советы. С ключами " /VERYSILENT /SP- " не ставится, других не знаю , :) .
Класс «TWizardForm», button «TRadioButton 1», ID:983410.
Ошибку не выводит, при запуске останавливается на этом окне и ...тишина.
Пробывал "ControlClick" и "MouseClick", "text ""Я &принимаю условия соглашения"".
Сейчас попробую "ControlShow" и "MouseClick".
А голова уже квадратная!
P.S. А вот как указать MouseClick("left",x,y,1)? Я ,чайник, не знаю. Пробую только,всего три дня.
Блин! пробыва,получил см. 4рис.

Ded Vova
02-04-2008, 16:53
Вот такая ерунда!

Creat0R
02-04-2008, 20:05
Ded Vova, Класс «TWizardForm», button «TRadioButton 1», ID:983410.

Вот так должно сработать:

ControlClick("[CLASS:TWizardForm]", "", "TRadioButton1")

Вот такая ерунда!
ControlCommand() требует как минимум 4 параметра, я только не понял зачем там нужна эта команда?

amel27
03-04-2008, 06:54
Creat0R
Я уже пару часов сижу »пары часов маловато будет... :huh:
нужно создать окно с собственным именем класса. »этот код вроде работает:#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, поэтому пришлось делать все за нее.

amel27
03-04-2008, 07:22
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.

Creat0R
03-04-2008, 07:27
amel27,
Низкий поклон! :pray: я уже подумал что это нереально добиться средствами AutoIt'а.
Буду разбирать что к чему, я просто обязан понять как оно работает, ведь столько времени было потрачено на попытки реализовать это самому... а за коменты отдельное спасибо :).

Ded Vova
03-04-2008, 08:44
Здравствуйте.
Вот так должно сработать:
Код:
ControlClick("[CLASS:TWizardForm]", "", "TRadioButton1") »

Ну блин,Спасибо!! Так сработало,а то я уже голову сломал. Вся фишка в " [CLASS:TWizardForm] !

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

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

DENoszone
03-04-2008, 10:16
Мне кто скажет?=)

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


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

amel27
03-04-2008, 10:52
Creat0R, Буду разбирать что к чему, я просто обязан понять как оно работает, ведь столько времени было потрачено на попытки реализовать это самому »крайне рекомендую почитать книгу Ю.Щупака "Win32 API. Эффективная разработка приложений" (http://www.ozon.ru/context/detail/id/2768771/), там все основательно разжевано... вся (!) книга так или иначе посвящена твоему вопросу... собственно, я лишь перевел первый пример из книги с Си на AutoIT. =)

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

Maza Faka
03-04-2008, 10:56
amel27
Если найдётся время посмотри пожалуйста где ошибка.
Пытаюсь реализовать вот такой хинт: http://new-page.info/archives/htmlhelp.jpg
#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 (http://support.microsoft.com/kb/q241218/); 2 (http://msdn2.microsoft.com/en-us/library/ms524362(VS.85).aspx); 3 (http://msdn2.microsoft.com/en-us/library/ms670082(VS.85).aspx)

DENoszone
03-04-2008, 11:00
и ещё как с каждым циклом увеличивать переменую на 10 ?

Maza Faka
03-04-2008, 11:59
amel27
Нашёл неплохой пример (http://www.powerbasic.com/support/forums/Forum7/HTML/000675.html) на 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)




© OSzone.net 2001-2012