[архив - Часть 2] AutoIt скрипты

Ответить
 • Просмотры: 25
Аватара пользователя
Diamond

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Diamond »

Функция, которая позволяет замостить фон GUI текстурой или небольшими изображениями

Код:

Код: Выделить всё

;~ Использование:
;~ Tiled_BgImage("Путь к изображению с текстурой","ширина изображения", "высота изображения")
Func Tiled_BgImage($ImagePath,$width,$height)
  $yTile=Round(@DesktopHeight/$height)
  $xTile=Round(@DesktopWidth/$width)
  For $y=0 To $yTile
    For $x=0 To $xTile
      GUICtrlCreatePic($ImagePath,$width*$x,$height*$y,$width,$height)
      GUICtrlSetResizing(-1,802) ; $GUI_DOCKALL
      GUICtrlSetState(-1,128) ; $GUI_DISABLE
    Next
  Next
EndFunc
Аватара пользователя
gregaz

Re: [архив - Часть 2] AutoIt скрипты

Сообщение gregaz »

Спасибо Diamond за помощь по Winrarу

Действительно есть,оказывается - там все прописано .



Можно пару вопросов на другую тему ?

1.Как ввести данные в Интернет страницу ( типа Логин,пароль )или текст поиска (для Google)

2.Как найти на Интернет странице нужный текст (Ссылку и .т.п.)

Вопрос поиска текстового фрагмента в файле рассматривался здесь на форуме ,а как это сделать на ВЕБ- странице ?
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

gregaz


Цитата:



Как ввести данные в Интернет страницу



Мне кажется нужно смотреть в сторону функции _IE... (в справке).




Цитата:



Как найти на Интернет странице нужный текст



Примерно так:





Код:

Код: Выделить всё

#include 
$WebPage = "http://www.autoitscript.com"
$WhatToFind = "autoit"
$Source = _INetGetSource($WebPage)
$FindPos = StringInStr($Source, $WhatToFind)
If $FindPos  0 Then MsgBox(64, "", "Текст  найден в позиции: " & $FindPos)

Можно также в файл сохранить иточник ($Source), и уже делать поиск по файлу (с учотом регистра, не латинских букв и т.д).
Аватара пользователя
proxy

Re: [архив - Часть 2] AutoIt скрипты

Сообщение proxy »

привет всем Изображение)

если честно сижу ещё в офисе, после напрженного рабочего дня, глаза "в кучку" - и даже не могу найти кнопку "создать новую тему"

в общем если не влом "киньте" ею в меня ))





а вот сам вопрос:

дле элемента GUICtrlCreateList очень хорошо работае функция GUICtrlSetOnEvent

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



а вот для элемента GUICtrlCreateListView функция GUICtrlSetOnEvent - не работает, как быть?

добиться я хочу все того же: т.е. когда кликаю мышкой по таблице GUICtrlCreateListView, мне необходимо, что бы

на это сыбите таблица "реагировала" и вызывала мою функцию.



и как то же самое произвести для элимента GUICtrlCreateTab .



пользуюсь autoIT v3.2.4.0
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

proxy


Цитата:



как быть?



Если для GUICtrlCreateListView поставить GUICtrlSetOnEvent, то оно срабатывать будет при нажатии на заголовок (Column), для того чтобы срабатывало при нажатии в пустом (точнее в любом) месте ListView, нужно совместить события (нажатие мышки и наведение курсора мышки над ListView контролем)...





Код:

Код: Выделить всё

#include 
Opt("GuiOnEventMode", 1)
$GUI = GUICreate("Test")
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "LV_Event")
$ListViewID = GUICtrlCreateListView("Column", 20, 40)
GUISetState()
While 1
    Sleep(10)
WEnd
Func LV_Event()
    Local $CursorInfoArr = GUIGetCursorInfo($GUI)
    If $CursorInfoArr[4] = $ListViewID Then MsgBox(0, "", "Ok, List View was Clicked")
EndFunc
Func Quit()
    Exit
EndFunc

точно также и с табами:





Код:

Код: Выделить всё

#include 
Opt("GuiOnEventMode", 1)
$GUI = GUICreate("Test")
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "Tab_Event")
$TabID = GUICtrlCreateTab(20, 40)
GUICtrlCreateTabItem("Tab Item")
GUISetState()
While 1
    Sleep(10)
WEnd
Func Tab_Event()
    Local $CursorInfoArr = GUIGetCursorInfo($GUI)
    If $CursorInfoArr[4] = $TabID Then MsgBox(0, "", "Ok, Tab control was Clicked")
EndFunc
Func Quit()
    Exit
EndFunc
Аватара пользователя
Diamond

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Diamond »

объект: "Scripting.Dictionary" - Сортировка данных в словаре

Использование:

SortDictionary($objDict, flag)

$objDict - словарь (как объект)

flag - 0 сортировка по ключам(key); 1 сортировка по элементам(item)

Код:

Код: Выделить всё

$Dict = ObjCreate("Scripting.Dictionary")
;~ Наполняем словарь неотсортированными данными:
$Dict.Add ("3", "Delta")
$Dict.Add ("1", "Foxtrot")
$Dict.Add ("4", "Bravo")
$Dict.Add ("2", "Echo")
$Dict.Add ("6", "Alpha")
$Dict.Add ("5", "Charlie")
;~ Сортировка:
SortDictionary($Dict, 0)
;~ Просмотр результатов сортировки:
For $o In $Dict
	MsgBox(0+262144 ,$o, $Dict($o) )
Next
;~ Эта функция основана на:
;~ http://support.microsoft.com/support/kb/articles/q246/0/67.asp
Func SortDictionary(ByRef $objDict, $intSort=0)
	Local Const $dictKey  = 0
	Local Const $dictItem = 1
	Local $strDict[1]
	Local $objKey
	Local $strKey, $strItem
	Local $intCount, $i, $j
	$intCount = $objDict.Count
	If $intCount > 1 Then
		ReDim $strDict[$intCount][2]
		$i = 0
		For $objKey In $objDict
			$strDict[$i][$dictKey]  = String($objKey)
			$strDict[$i][$dictItem] = String($objDict($objKey))
			$i = $i + 1
		Next
		For $i = 0 To $intCount-2
			For $j = $i To $intCount-1
				If StringCompare($strDict[$i][$intSort], $strDict[$j][$intSort]) > 0 Then
					$strKey  = $strDict[$i][$dictKey]
					$strItem = $strDict[$i][$dictItem]
					$strDict[$i][$dictKey]  = $strDict[$j][$dictKey]
					$strDict[$i][$dictItem] = $strDict[$j][$dictItem]
					$strDict[$j][$dictKey]  = $strKey
					$strDict[$j][$dictItem] = $strItem
				EndIf
			Next
		Next
		$objDict.RemoveAll
		For $i = 0 To $intCount-1
		$objDict.Add ($strDict[$i][$dictKey], $strDict[$i][$dictItem])
		Next
	EndIf
EndFunc

P.S. "Scripting.Dictionary" имеет свойства и методы которые делают его функциональней обычных массивов, плюс простота использования и высокая скорость обработки. А с этой функцией сортировки, словарь может стать серьёзным конкурентом для одномерных массивов.

Для тех кто не знаком с принципами работы этого объекта, есть хорошая ссылка, котрую дал мне Creat0R :
http://www.autoitscript.com/forum/in...56?entry352256


Также, описание свойств и методов можно найти на
MSDN.
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

На офф. форуме
нашел функцию
, которая казалось бы, воплотит в реальность мою давнюю “хотелку” Изображение ...



Вот функция:





Код:

Код: Выделить всё

Func SetParent($hWndChild, $hWndNewParent)
    Local $vRtn = DllCall("USER32.DLL", "hwnd", "SetParent", "hwnd", $hWndChild, "hwnd", $hWndNewParent)
    Return $vRtn[0]
EndFunc

Судя по её назваению и содержанию, я предположил что она позволяет присваивать одно окно к другому (в соотношении родительское-дочернее), и делая как бы дочернее окно “прикреплённым” к родительскому, но после долгих тестировании, присваивании якобы родительскому окну атрибута @SW_DISABLE и т.п, так ничего и не вышло Изображение.

Окно однако становится дочерним/родительским, но не так как мне этого хотелось...



В общем вопрос вот в чём: Возможно ли переделать эту функцию (или написать новую), которая позволит прикреплять одно окно к другому, также как это происходит при вызове подобной фкункции MsgBox...





Код:

Код: Выделить всё

$Hwnd = WinGetHandle(WinGetTitle(""))
_MsgBox(0, "", "", $Hwnd)
Func _MsgBox($MsgBoxType, $MsgBoxTitle, $MsgBoxText, $mainGUI="")
    $ret = DllCall ("user32.dll", "int", "MessageBox", _
            "hwnd", $mainGUI, _
            "str", $MsgBoxText , _
            "str", $MsgBoxTitle, _
            "int", $MsgBoxType)
    Return $ret [0]
EndFunc
Аватара пользователя
amel27

Re: [архив - Часть 2] AutoIt скрипты

Сообщение amel27 »

Diamond

ИМХО у "Scripting.Dictionary" только одно преимущество перед массивами AutoIT - индекс может быть не только числовым, но и текстовым... другими словами это означает штатную поддержку _ArraySearch(), которая в AutoIT доступна только через UDF... Во всех остальных случаях не вижу причин для замены ими штатных массивов... Между прочим функция SortDictionary() по большому счету ничем не отличается от _ArraySort() (кроме отсутствия контроля ошибок), поэтому быстрей она работать не может по определению...

Подробно:
http://www.osp.ru/win2000/2006/07/3643019




Creator
Цитата:



На офф. форуме нашел функцию



угу, видел эту функцию, только это не совсем то... а точней совсем не то:
Цитата:



прикладная программа обычно использует дочерние окна, чтобы поделить рабочую область родительского окна на функциональные области



т.е. грубо говоря применение это функции превращает окно в контрол другого окна, источник:
http://www.firststeps.ru/mfc/winapi/win/r.php?18
Аватара пользователя
schel4ok

Re: [архив - Часть 2] AutoIt скрипты

Сообщение schel4ok »

А кто-нибудь знает как запускать inf файлы при помощи AutoIt?
Аватара пользователя
schel4ok

Re: [архив - Часть 2] AutoIt скрипты

Сообщение schel4ok »

Цитата:



Вообще-то, WinWaitActive() по умолчанию работает только с видимым текстом



Тогда я вообще ничего не понимаю Изображение.

Почему такая проверка:



Код:

Код: Выделить всё

if WinWaitActive('Мастер новых подключений', 'Выберите, надо ли автоматически подключаться к Интернету','5' )==1 Then
      Send ( '{UP}{ENTER}' ) 
EndIf

не срабатывает

Если это окно не появляется, то нажатие стрелки вверх и энтера всё равно производится. В чем ошибаюсь, может как-то проверять надо другим способом?
Ответить

Вернуться в «AutoIt»