Что нового

Развитие русской справки

Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
UDFs3.7z
Переведено 42 примера _GUICtrlHeader_...

CustomUDFs.7z
Добавлено описание объекта Scripting.Dictionary

OffTopic:
Жаль что сообщение добавляется к предыдущему сообщению и тема не поднимается на вверх. Пришлось удалить предыдущее
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Список _WinAPI_... функций для которых нет примеров.
Всего 52, может у кого есть желание создать выборочно.
_WinAPI_AttachConsole
_WinAPI_AttachThreadInput
_WinAPI_BitBlt
_WinAPI_CallNextHookEx
_WinAPI_CommDlgExtendedError
_WinAPI_CreateBitmap
_WinAPI_CreateCompatibleBitmap
_WinAPI_CreateCompatibleDC
_WinAPI_CreateEvent
_WinAPI_CreateFontIndirect
_WinAPI_CreateProcess
_WinAPI_DefWindowProc
_WinAPI_DeleteDC
_WinAPI_FlushFileBuffers
_WinAPI_FormatMessage
_WinAPI_GetAsyncKeyState
_WinAPI_GetCurrentProcess
_WinAPI_GetCurrentThread
_WinAPI_GetDIBits
_WinAPI_GetGuiResources
_WinAPI_GetLastErrorMessage
_WinAPI_GetObject
_WinAPI_GetOverlappedResult
_WinAPI_GetProcessAffinityMask
_WinAPI_GetStdHandle
_WinAPI_GetTextExtentPoint32
_WinAPI_GetWindowRgn
_WinAPI_GUIDFromString
_WinAPI_GUIDFromStringEx
_WinAPI_InvalidateRect
_WinAPI_LocalFree
_WinAPI_MakeQWord
_WinAPI_RedrawWindow
_WinAPI_RegisterWindowMessage
_WinAPI_ReleaseCapture
_WinAPI_SetCapture
_WinAPI_SetCursor
_WinAPI_SetDefaultPrinter
_WinAPI_SetDIBits
_WinAPI_SetEvent
_WinAPI_SetFont
_WinAPI_SetHandleInformation
_WinAPI_SetProcessAffinityMask
_WinAPI_SetWindowLong
_WinAPI_SetWindowPos
_WinAPI_StringFromGUID
_WinAPI_UpdateLayeredWindow
_WinAPI_UpdateWindow
_WinAPI_WaitForInputIdle
_WinAPI_WaitForMultipleObjects
_WinAPI_WaitForSingleObject
_WinAPI_WriteConsole
 

asdf8

Скриптер
Сообщения
564
Репутация
152
Несколько примеров :
_WinAPI_MsgBox
Код:
#include <WinAPI.au3>

$iFlags = 4 + 64 + 256; см. функцию MsgBox
_WinAPI_MsgBox($iFlags, 'Заголовок', 'Текст сообщения')


_WinAPI_MoveWindow
Код:
#include <WinAPI.au3>

$hGui = GUICreate("Тест", 350, 150, -1, -1)
GUISetState(@SW_SHOW)
Sleep(1000)
_WinAPI_MoveWindow($hGui, 0, 0, 350, 150)
While GUIGetMsg() <> -3
WEnd


_WinAPI_SetFocus
Код:
#include <WinAPI.au3>
#Include <GUIConstantsEx.au3>

$hGui = GUICreate("Переключить фокус ввода", 370, 80, -1, -1)
$Input1 = GUICtrlCreateInput("Текст 1", 12, 28, 121, 21)
$Input2 = GUICtrlCreateInput("Текст 2", 232, 28, 121, 21)
$Button1 = GUICtrlCreateButton("<", 148, 24, 27, 25)
$Button2 = GUICtrlCreateButton(">", 184, 24, 27, 25)
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			_WinAPI_SetFocus(GUICtrlGetHandle($Input1))
		Case $Button2
			_WinAPI_SetFocus(GUICtrlGetHandle($Input2))
	EndSwitch
WEnd


_WinAPI_InProcess
Код:
#include <WinAPI.au3>

$hWnd = WinGetHandle(AutoItWinGetTitle())
$hGui = GUICreate("Тест", 350, 150, -1, -1)
GUISetState(@SW_SHOW)

If _WinAPI_InProcess($hGui, $hWnd) Then
	MsgBox(0, 'Сообщение', 'Окно "Тест" принадлежит текущему процессу', 0, $hGui)
Else
	MsgBox(0, 'Сообщение', 'Окно "Тест" не принадлежит текущему процессу', 0, $hGui)
EndIf


_WinAPI_FindWindow
Код:
#include <WinAPI.au3>

MsgBox(0, 'Сообщение', 'Индефикатор окна "Рабочий стол" : ' & _WinAPI_FindWindow('Progman', 'Program Manager'))


_WinAPI_ShowWindow
Код:
#include <WinAPI.au3>

$hGui = GUICreate("Тест", 350, 150, -1, -1)
_WinAPI_ShowWindow($hGui, @SW_SHOW)
While GUIGetMsg() <> -3
WEnd
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
asdf8
Кстати, для двух из них я уже тоже сделал.
_WinAPI_GetWindowRect.au3
_WinAPI_ShowCursor.au3
_WinAPI_ShowError.au3
_WinAPI_ShowMsg.au3
_WinAPI_MsgBox.au3
_WinAPI_PostMessage.au3

asdf8
А зачем в _WinAPI_MsgBox флаг 4? Я поигрался с параметрами, функция не возвращает ID кнопок. В описании меня ещё смущает текст "(IMO)" это случаем не "(IMHO)".

Посмотрите MsgBox, таблицы сделал по удобней.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO [?]
Кстати, для двух из них я уже тоже сделал.
Может вычеркивать из списка уже сделанные?


А зачем в _WinAPI_MsgBox флаг 4? Я поигрался с параметрами, функция не возвращает ID кнопок.
Посмотрел исходник этой функции - не понял, зачем это вообще было включать в UDF.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
asdf8
Список обновлён. Хотя я не тороплюсь быстрей отписывать, сейчас на одном только _WinAPI_SetFocus застрял, несколько раз перепроверил, не возвращает он предыдущий фокус ввода, как сказано в описании.
_WinAPI_MoveWindow переделал из WinMove, там более точнее заметно не только перемещение, но и изменение размера окна.
 

SyDr

Сидра
Сообщения
651
Репутация
158
AZJIO
VarGetType возвращает именно внутренний тип (то, отчего зависит, как выражение будет обрабатываться интерпретатором). Ну в любом случае, то, что сейчас написано - выглядит нормально (http://azjio.narod2.ru/autoit3_docs/functions/VarGetType.htm).
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
asdf8
Посмотрел исходник этой функции - не понял, зачем это вообще было включать в UDF.
Код:
Func _WinAPI_MsgBox($iFlags, $sTitle, $sText)
	BlockInput(0)
	MsgBox($iFlags, $sTitle, $sText & "      ")
EndFunc   ;==>_WinAPI_MsgBox

Да уж, я тоже не понял...

Меня ещё удивила функция _WinAPI_LoadShell32Icon, ну добавить туда в параметры имя файла и получится _WinAPI_LoadIcon, но извлекает иконку из любого файла. А то получается удобной функции нет, зато есть "ExtractIcon" только для файла Shell32.dll.

3 примера сделано
_WinAPI_SetWindowText
_WinAPI_GetWindowHeight
_WinAPI_GetWindowWidth

AutoIt3.7z
 

asdf8

Скриптер
Сообщения
564
Репутация
152
Еще пример :
_WinAPI_GetWindow (также _WinAPI_GetWindowLong, _WinAPI_GetWindowText, _WinAPI_GetClassName)
Код:
#Include <Constants.au3>
#Include <WindowsConstants.au3>
#Include <Array.au3>
#Include <WinAPI.au3>

Dim $aWinList[1][4] = [['Индификатор', 'Заголовок', 'Класс', 'Видимость']]
Global $iNum = 0

$hWnd = DllCall("user32.dll", "hwnd", "FindWindow", "int", 0, "int", 0)
If Not @Error Then
	$hWnd = $hWnd[0]
EndIf
While $hWnd
	$iNum += 1
	If $iNum >= UBound($aWinList) Then
		ReDim $aWinList[2 * $iNum][4]
	EndIf
	$aWinList[$iNum][0] = $hWnd ;Индификатор
	$aWinList[$iNum][1] = _WinAPI_GetWindowText($hWnd) ;Заголовок
	$aWinList[$iNum][2] = _WinAPI_GetClassName($hWnd) ;Класс
	If BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), $WS_VISIBLE) Then
		$aWinList[$iNum][3] = 'Видимо'
	Else
		$aWinList[$iNum][3] = 'Скрыто'
	EndIf
	$hWnd = _WinAPI_GetWindow($hWnd, $GW_HWNDNEXT)
WEnd
If $iNum Then
	ReDim $aWinList[$iNum + 1][4]
EndIf
_ArrayDisplay($aWinList)
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
16 примеров сделано.
_WinAPI_MulDiv
_WinAPI_GetWindow
_WinAPI_GetWindowLong
_WinAPI_CopyIcon
_WinAPI_DestroyIcon
_WinAPI_CreateWindowEx
_WinAPI_DestroyWindow
_WinAPI_GetWindowRect
_WinAPI_MakeLong
_WinAPI_LoadImage
_WinAPI_FillRect
_WinAPI_GetStockObject
_WinAPI_GetSysColorBrush
_WinAPI_GetParent
_WinAPI_SystemParametersInfo
_WinAPI_MultiByteToWideCharEx

UDFs3.7z

asdf8
Добавил последний.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
Еще пример :
_WinAPI_OpenProcess, _WinAPI_ReadProcessMemory, _WinAPI_WriteProcessMemory
Код:
#Include <ProcessConstants.au3>
#Include <WinAPI.au3>

If Not FileExists(@SystemDir & '\winmine.exe') Then
	MsgBox(16, 'Ошибка', 'Не найден файл :' & @SystemDir & '\winmine.exe')
	Exit
EndIf
$iPid = Run(@SystemDir & '\winmine.exe')
$hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, 0, $iPid)
If $hProcess Then
	Local $iAddress = 0x100579C ; адрес таймера "Сапера"
	Local $iRead, $iWrite, $t = DllStructCreate('WORD')
	While ProcessExists($iPid)
		; Чтение значения таймера
		_WinAPI_ReadProcessMemory($hProcess, $iAddress, DllStructGetPtr($t), 2, $iRead)
		$iTimerWinmine = DllStructGetData($t, 1)
		ConsoleWrite('-> Прочитано : ' & $iRead & ' байта   Результат : ' & $iTimerWinmine & @CRLF)
		If $iTimerWinmine > 2 Then
			DllStructSetData($t, 1, 2)
			; Запись значения таймера
			_WinAPI_WriteProcessMemory($hProcess, $iAddress, DllStructGetPtr($t), 2, $iWrite)
		EndIf
		Sleep(1000)
	WEnd
	; Открытый процесс необходимо закрывать
	; (в данном случае процесса уже не будет)
	; _WinAPI_CloseHandle($hProcess)
EndIf
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Добавить ExtMsgBox?
; Имя функции ...: _ExtMsgBox
; Версия AutoIt ..: v3.2.12.1 и выше
; Описание ........: Создает пользовательсое диалоговое окно (MsgBox) в центре родительского окна, в центре экрана или в указанных координатах.
; Синтаксис.......: _ExtMsgBox ($vIcon, $vButton, $sTitle, $sText, [$iTimeout, [$hWin, [$iVPos]]])
; Параметры:
; $vIcon -> Используемая иконка: 0 - без иконки, 8 - UAC или следующие константы $MB_ICON... :
; 16 - СТоп, 32 - Вопрос, 48 - Восклицательный знак, 64 - Информация
; Любое другое число возвращает -1, ошибка 1
; Если указано имя exe-файла, то его иконка будет отображаться
; Если указано имя иконки, то эта иконка будет отображаться
; $vButton -> Текст кнопок, разделённый символом "|".
; Амперсанд (&) перед текстом кнопки указывает на кнопку по умолчанию (вызываемая по Enter).
; Два фокусирующих амперсанда (&) возвращает -1, ошибка 2. Только одна кнопка может быть по умолчанию
; Нажатие Enter или Space (пробел) активируют кнопу по умолчанию.
; Можно использовать числовые константы кнопок $MB_... : 0 = "OK", 1 = "&OK|Отмена",
; 2 = "&Прервать|Повтор|Пропустить", 3 = "&Да|Нет|Отмена", 4 = "&Да|Нет", 5 = "&Повтор|Отмена",
; 6 = "&Отмена|Повторить|Продолжить". Другие значения возвращают -1, ошибка 3
; По умолчанию максимальная ширина 370 дает 1-4 кнопки шириной 80 или 5 кнопок шириной 60 или 6 кнопок шириной 50
; Минимальная ширина кнопки 50, поэтому установка 7 кнопок возвращает -1, ошибка 4
; $sTitle -> Заголовок окна
; $sText -> Текст окна. Длинные строки переносятся. размер окна подгоняется по заполнению
; Установки максимальной ширины может увеличиться до абсолютного значения, если потребуется
; $iTimeout -> Время ожидания (в секундах), по истечении которого EMB (ExtMsgBox) закроется. 0 = без таймаута (по умолчанию)
; $hWin -> Дескриптор родительского окна, относительно которого центрируется EMB
; Если окно скрыто или не указан дескриптор, то EMB в центре экрана (по умолчанию)
; Если параметр не является дескриптором окна, то значение интерпретируется как координата левого края EMB
; $iVPos -> Координата верхнего края EMB, только если параметр $hWin интерпретируется iкак координата левого края. (по умолчанию = 0)
; Возвращаемое значение: Успешно: Возвращает индекс нажатой кнопки, отсчёт слева, начиная с 1.
; Возвращает 0 если закрыто кнопкой "CloseGUI" (то есть нажатием [X] в окне или нажатием клавиши Esc (Escape) на клавиатуре)
; Возвращает 9 если выход по таймауту
; Неудачно: Возвращает -1 и устанавливает @error:
; 1 - Неверно указана иконка
; 2 - Попытка установить несколько кнопок по умолчанию
; 3 - Button constant error
; 4 - Количество кнопок превышено (более 6-ти), чтобы уместить в GUI
; 5 - Ошибка StringSize
; 6 - Ошибка создания GUI
; Автор ...........: Melba23, на основе некоторых оригинальных кодах сделанных photonbuddy & YellowLab
; Примечания ..: Положение EMB автоматически корректируется, чтобы появится полностью видимым на экране
; Пример.........: Есть

; Имя функции ...: _ExtMsgBoxSet
; Версия AutoIt ..: v3.2.12.1 и выше
; Описание ........: Устанавливает стили GUI, выравнивание, цвет и шрифт для последующих вызовов функциии _ExtMsgBox
; Синтаксис.......: _ExtMsgBoxSet($iStyle, $iJust, [$iBkCol, [$iCol, [$sFont_Size, [$iFont_Name]]]])
; Параметры:
; $iStyle -> 0 (по умолчанию) - Кнопка на панели задач, стиль "поверх всех окон" (TOPMOST), использование выбранного шрифта для кнопок.
; Это может быть комбинацией следующих изменений:
; 1 = Кнопка не появляется на панели задач
; 2 = Не устанавливаеть стиль "поверх всех окон" (TOPMOST
; 4 = Кнопки используют шрифт по умолчанию
; >>>>>>>>>> Если этот параметр является ключевым словом 'Default', то это сбрасывает ВСЕ параметры в значения по умолчанию <<<<
; $iJust -> 0 = Выравнивание по левому краю (по умолчанию), 1 = по центру , 2 = по правому краю
; + 4 = Единственную кнопку делает в центре. Примечание: несколько кнопок всегда выравниваются по центру
; (Также могут использоваться $SS_LEFT, $SS_CENTER, $SS_RIGHT)
; $iBkCol -> Цвет фона окна. По умолчанию = системный цвет
; $iCol -> Цвет текста окна. По умолчанию = системный цвет
; Опустив параметры цвета или используя -1, оставляет цвет без изменений
; Установка параметра цвета в ключевое слово Default сбрасывает в системные установки цвета
; $iFont_Size -> Размер шрифта в points. По умолчанию = системный размер шрифта
; $sFont_Name -> Название шрифта. По умолчанию = системный шрифт
; Опустив параметры шрифта и размер шрифта или используя размер шрифта -1 или название шрифта "", оставляет без изменений
; Установка параметра шрифта в ключевое слово Default сбрасывает в системные установки шрифт и размер
; Возвращаемое значение: Успешно: - Возвращает 1
; Неудачно - Возвращает 0 и устанавливает @error равным 1, а в @extended устанавливает порядковый номер параметра вызвавшего сбой
; Remarks .......;
; Author ........: Melba23
; Example........; Есть

Код:
; Пример ExtMsgBox

#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <StaticConstants.au3>

#include "ExtMsgBox.au3"


$hTest_GUI = GUICreate("EMB Тест",200, 490, 100, 100)
$hButton1 = GUICtrlCreateButton("Тест 1", 20, 20, 60, 30)
$hButton2 = GUICtrlCreateButton("Тест 2", 120, 20, 60, 30)
$hButton3 = GUICtrlCreateButton("Тест 3", 20, 70, 60, 30)
$hButton4 = GUICtrlCreateButton("Тест 4", 120, 70, 60, 30)
$hButton5 = GUICtrlCreateButton("Тест 5", 20, 120, 60, 30)
$hButton6 = GUICtrlCreateButton("Тест 6", 120, 120, 60, 30)
$hButton7 = GUICtrlCreateButton("Exit", 70, 450, 60, 30)

$sMsg  = "Перемещайте это окно по экрану, чтобы увидеть как центрируются дочерние окна вызываемые тестовыми кнопками." & @CRLF & @CRLF
$sMsg &= "Если вы поместите это окно слишком близко к краю экрана, то координаты дочерних окон будут скорректированы так, чтобы не быть скрытыми частично за край экрана."
If @Compiled = 0 Then $sMsg &= @CRLF & @CRLF & "Посмотрите в консоли SciTE, чтобы увидеть возвращаемые значения нажатых кнопок"

GUICtrlCreateLabel($sMsg, 10, 160, 180, 270, $SS_CENTER)
	GUICtrlSetFont(-1, 10)
GUISetState(@SW_SHOW, $hTest_GUI)

While 1

	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE, $hButton7

			_ExtMsgBoxSet(1)
			$nTest = _ExtMsgBox(32, "Да|&Нет", "Подтверждение", "Вы уверены?", 0, $hTest_GUI)
			_ExtMsgBoxSet(Default)
			ConsoleWrite("The 'Exit' EMB returned: " & $nTest & @CRLF)
			If $nTest = 1 Then Exit

		Case $hButton1

			; Установка выравнивание по центру, размер шрифта, оставив цвет без изменений
			_ExtMsgBoxSet(2, $SS_CENTER, -1, -1, 9)

			$sMsg =  "Это по центру родительского окна 'EMB Тест', с иконкой AutoIt, 4 кнопки, с выравниванием текста по центру, кнопка на панели задач и не установленый стиль 'поверх всех окон' (TOPMOST)" & @CRLF & @CRLF
			$sMsg &= "Ширина устанавливается максимально необходимая, чтобы вместить 4-х кнопки и текст будет переносится по строкам при необходимости чтобы уместиться" & @CRLF & @CRLF
			$sMsg &= "Кнопка 4 устанавливается по умолчанию и будет активирована при нажатии 'Enter' или 'Space' (пробел)" & @CRLF & @CRLF
			$sMsg &= "Время ожидания действия от пользователя не используется"
			$iRetValue = _ExtMsgBox (@AutoItExe, "1|2|3|&4", "Тест 1", $sMsg, 0, $hTest_GUI)
			ConsoleWrite("Тест 1 возвратил: " & $iRetValue & @CRLF)

			; Сброс по умолчанию
			_ExtMsgBoxSet(Default)

		Case $hButton2

			; Скрывает родительский GUI, чтобы показать диалоговое окно в центре экране
			GUISetState(@SW_HIDE, $hTest_GUI)

			; Изменяет шрифт и выравнивание, оставив цвет без изменений
			_ExtMsgBoxSet(5, $SS_LEFT, -1, -1, 12, "Arial")

			$sMsg = "Скрывает 'EMB Test', и появляется в центре экрана" & @CRLF & @CRLF
			$sMsg &= "Текущие установки:" & @CRLF
			$sMsg &= @TAB & "Иконка 'Информация'" & @CRLF
			$sMsg &= @TAB & "Одна смещённая кнопка"  & @CRLF
			$sMsg &= @TAB & "Выравнивание по левому краю" & @CRLF
			$sMsg &= @TAB & "Default button text" & @CRLF
			$sMsg &= @TAB & "Отсутствует на панели задач" & @CRLF
			$sMsg &= @TAB & "Стиль 'поверх всех окон'" & @CRLF& @CRLF
			$sMsg &= "Ширина устанавливается по длине максимальной строки" & @CRLF & @CRLF
			$sMsg &= "(которая меньше чем максимальная ширина окна сообщения)" & @CRLF & @CRLF
			$sMsg &= "Время ожидания действия от пользователя 20 сек"

			; Использование констант $MB_... и установка таймаута
			$iRetValue = _ExtMsgBox ($MB_ICONASTERISK, "Шрифт умолч.", "Тест 2", $sMsg, 20, $hTest_GUI)
			ConsoleWrite("Тест 2 возвратил: " & $iRetValue & @CRLF)

			; Сброс по умолчанию
			_ExtMsgBoxSet(Default)

			; Показывает родительский GUI снова
			GUISetState(@SW_SHOW, $hTest_GUI)
			WinSetOnTop($hTest_GUI, "", 1)
			WinSetOnTop($hTest_GUI, "", 0)

		Case $hButton3

			; Устанавливает выравнивание по правому краю, цвет (жёлтый текст на иснеем фоне) и изменяет шрифт
			_ExtMsgBoxSet(1, 2, 0x004080, 0xFFFF00, 10, "Comic Sans MS")

			$sMsg  = "Это по центру родительского окна 'EMB Тест', с иконкой восклицательного знака, 2 кнопки, перенос строк, выравнивание цветного текста по правому краю, "
			$sMsg &= "на цветном фоне, отсутствует на панели задач, и установлен стиль 'поверх всех окон' (TOPMOST)"& @CRLF & @CRLF
			$sMsg &= "Обратите внимание, вы можете получить && в тексте кнопки" & @CRLF & @CRLF
			$sMsg &= "Время ожидания действия от пользователя не используется"

			; Использование констант $MB_...
			$iRetValue = _ExtMsgBox ($MB_ICONEXCLAMATION, "1 способ|&Да && Нет", "Тест 3", $sMsg, 0, $hTest_GUI)
			ConsoleWrite("Тест 3 возвратил: " & $iRetValue & @CRLF)

			; Сброс по умолчанию
			_ExtMsgBoxSet(Default)

		Case $hButton4

			; Единственная кнопка в центре
			_ExtMsgBoxSet(1, 4, -1, -1, 11)

			$sMsg  = "Дескриптор родительского окна не передан, поэтому диалог по центру экрана" & @CRLF & @CRLF
			$sMsg &= "Иконка 'Стоп', одна кнопка по центру, текст выравнивается по левому краю, большой шрифт (?), отсутствует на панели задач, установлен стиль 'поверх всех окон' (TOPMOST)" & @CRLF & @CRLF
			$sMsg &= "Здесь несколько очень длинных строк, поэтому ширина окна сообщения установлена в максимальное по умолчанию и текст принудительно переносится на новую строку, так как строки слишком длинные, чтобы уместится" & @CRLF & @CRLF
			$sMsg &= "Время ожидания действия от пользователя 15 сек" & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF
			$sMsg &= "Обратите внимание, что диалоговое окно автоматически подстраивается, чтобы отобразить необходимые строки, даже если они перенесены несколько раз!"

			$iRetValue = _ExtMsgBox (16, "OK", "Тест 4", $sMsg, 15)
			ConsoleWrite("Тест 4 возвратил: " & $iRetValue & @CRLF)

			; Сброс по умолчанию
			_ExtMsgBoxSet(Default)

		Case $hButton5

			$sMsg  = "Здесь переданы координаты окна, а не дескриптор, "
			$sMsg &= "поэтому окно находится в координатах 200, 200." & @CRLF & @CRLF
			$sMsg &= "Иконка 'Вопрос', кнопка на панели задач, установлен стиль 'поверх всех окон' (TOPMOST) и используется шрифт по умолчанию" & @CRLF & @CRLF
			$sMsg &= "Время ожидания действия от пользователя не используется"

			$iRetValue = _ExtMsgBox ($MB_ICONQuery, $MB_OK, "Тест 5", $sMsg, 0, 200, 200)
			ConsoleWrite("Тест 5 возвратил: " & $iRetValue & @CRLF)

		Case $hButton6

			; Устанавливает выравнивание по правому краю, цвет (оранжевый текст на зелёном фоне) и изменяет шрифт
			_ExtMsgBoxSet(3, 0, 0x008000, 0xFF8000, 12, "MS Sans Serif")

			$sMsg  = "Здесь переданы координаты окна, а не дескриптор, "
			$sMsg &= "поэтому окно находится в координатах 100, 500." & @CRLF & @CRLF
			$sMsg &= "Не имеет иконки, отсутствует на панели задач, не установлен стиль 'поверх всех окон' (TOPMOST), цветной текст и фон "
			$sMsg &= "Время ожидания действия от пользователя 20 сек"

			$iRetValue = _ExtMsgBox (0, "Да|Нет", "Тест 6", $sMsg, 20, 100, 500)
			ConsoleWrite("Тест 6 возвратил: " & $iRetValue & @CRLF)

			; Сброс по умолчанию
			_ExtMsgBoxSet(Default)

	EndSwitch

WEnd
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
asdf8
На официальном сайте запрещено создавать темы обсуждения ботов. Не будет ли этот пример противоречить правилам? В итоге я хочу чтобы справка была добавлена для скачивания с официального сайта, а значит всё в ней должно быть легитимно.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AZJIO [?]
На официальном сайте запрещено создавать темы обсуждения ботов
Скорее всего имеется в виду игровые боты.
 

gora

Знающий
Сообщения
315
Репутация
19
AZJIO [?]
Этот пример не нужно включать в справку, ибо он не работает на win7. Не работающий пример в справке - не помощник новичку. ИМХО
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
gora
Этот пример не нужно включать в справку, ибо он не работает на win7
Всвязи с этим я хотел ещё некоторые примеры поменять, например "[CLASS:SciCalc]" для кальклятора Win7 другой (обнаружено 7 функций). Или "Автоматизация блокнота", заголовок "Безымянный - Блокнот" тире в WinXP и длинное тире в Win7.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO [?]
На официальном сайте запрещено создавать темы обсуждения ботов. Не будет ли этот пример противоречить правилам?
Думаю, что тот пример не противоречит правилам. Так можно любой скрипт с функцией MouseClick, тоже к ботам отнести.

gora [?]
Этот пример не нужно включать в справку, ибо он не работает на win7.
Сейчас нет под рукой семерки с установленным сапером, найду - переделаю.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
asdf8
Ключевое слово "игра", остальное не важно. Кроме создания своей игры. Вообщем чит. А так пример идеальный.

На счёт Win7 просто добавлять проверку @OSVersionи изменять некоторые значения. Это будет показывать, что на разных системах бывают отличия в автоматизации.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO [?]
Ключевое слово "игра"

Переписал пример :
Код:
#Include <ProcessConstants.au3>
#Include <WinAPI.au3>
#Include <EditConstants.au3>
#Include <GUIConstantsEx.au3>

If StringInStr($CmdLineRaw, '--TestRun') Then
	_ReadWriteMemory()
	Exit
EndIf

$iVal = 100
$t = DllStructCreate('WORD')
DllStructSetData($t, 1, $iVal)

$hForm = GUICreate("Тестовая программа", 274, 97, -1, -1)
GUICtrlCreateLabel("Адрес памяти :", 60, 24, 81, 17)
GUICtrlCreateInput(DllStructGetPtr($t), 160, 20, 89, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_READONLY,$ES_NUMBER))
GUICtrlCreateLabel("Значение памяти :", 44, 60, 98, 17)
$Input = GUICtrlCreateInput(DllStructGetData($t, 1), 160, 56, 89, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_READONLY,$ES_NUMBER))
GUISetState(@SW_SHOW)

Sleep(1000)
If @Compiled Then
	Run('"' & @ScriptFullPath & '" --TestRun')
Else
	Run(FileGetShortName(@AutoItExe) & ' /AutoIt3ExecuteScript "' & FileGetShortName(@ScriptFullPath) & '" --TestRun')
EndIf

$begin = TimerInit()
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	If TimerDiff($begin) > 200 Then
		$tmp = DllStructGetData($t, 1)
		If $iVal <> $tmp Then
			$iVal = $tmp
			GUICtrlSetData($Input, $iVal)
		EndIf
		$begin = TimerInit()
	EndIf
WEnd

Func _ReadWriteMemory()
	$hWnd = WinGetHandle('[Title:Тестовая программа; Class:AutoIt v3 GUI]')
	If $hWnd Then
		$iPid = WinGetProcess($hWnd)
		If $iPid Then
			$iAddress = ControlGetText($hWnd, '', '[Class:Edit; Instance:1]')
			If $iAddress > 0 Then
				$iAddress = Int($iAddress);адрес памяти внешнего процесса
				$hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, 0, $iPid)
				If $hProcess Then
					Local $iRead, $iWrite, $t = DllStructCreate('WORD')
					For $i = 1 To 10
						If ProcessExists($iPid) Then
							; Чтение значения памяти
							_WinAPI_ReadProcessMemory($hProcess, $iAddress, DllStructGetPtr($t), 2, $iRead)
							$iVal = DllStructGetData($t, 1)
							$iVal += 5
							; Запись значения в память
							DllStructSetData($t, 1, $iVal)
							_WinAPI_WriteProcessMemory($hProcess, $iAddress, DllStructGetPtr($t), 2, $iWrite)
						Else
							ExitLoop
						EndIf
						Sleep(1000)
					Next
					If ProcessExists($iPid) Then
						_WinAPI_CloseHandle($hProcess); Открытый процесс необходимо закрывать
					EndIf
				Else
					MsgBox(16+4096, 'Ошибка', 'Не удалось открыть память тестовой программы')
				EndIf
			Else
				MsgBox(16+4096, 'Ошибка', 'Не найден адрес памяти тестовой программы')
			EndIf
		Else
			MsgBox(16+4096, 'Ошибка', 'Не найден процесс тестовой программы')
		EndIf
	Else
		MsgBox(16+4096, 'Ошибка', 'Не найдено окно тестовой программы')
	EndIf
EndFunc
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Обновил
AutoIt3.7z
UDFs3.7z

Поправил примеры не работающие на Win7 (отписываёте если что не работает)
Частичный перевод _IEPropertyGet и _IEPropertySet и добавлены вышеуказанные примеры WinAPI.
 
Верх