Что нового

FWT_UDF.au3 - Вывод текста в полноэкранное приложение (OpenGL)

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
AutoIt: v3 и больше
Версия: 1.0

Категория: Окна и диалоги, Элементы GUI

Описание: Давно мучал этот вопрос, все же получилось это реализовать с помощью обычных окон.
UDF позволяет выводить текст в полноэкранное приложение.

В этом UDF используются 2 окна ( одно дочернее по отношению к окну полноэкранного приложения, а другое само по себе и будет отображаться только, когда приложение свернуто или не запущено ). Сделано это для того, чтобы приложение не сворачивалось при нажатии на окно с текстом. Текст будет отображаться нормально, даже если разрешение приложения будет отличаться от разрешения рабочего стола.

Функции:
_FWT_Initialization() - функция инициализации. Эту функцию нужно выполнить 1 раз в начале кода Вашей программы перед кодом, в котором создается GUI

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

_FWT_ShowText($text, $timeout, $WithWin1 = True) - показывает текст в полноэкранном приложении в течении некоторого времени (параметр $timeout, в мс), а также вне этого приложения (в случае, когда приложение свернуто или не запущено), если параметр $WithWin1 = True

_FWT_HideText() - скрывает текст

_FWT_SetPos($left = Default, $top = Default, $width = Default, $height = Default) - подготавливает позицию и размеры окна, в котором будет отображен текст. Если один параметров равен Default, то этот параметр не будет затронут. Если будете использовать макросы, то заключайте в кавычки. Если $left = -1, то окно с текстом будет отцентрировано по горизонтали, если $top = -1, то по вертикали

Код/Пример:
Код:
#Include "FWT_UDF.au3"

_FWT_Initialization() ; инициализация
_FWT_SetParent( WinGetHandle("[CLASS:Valve001]") ) ; получение хэндла окна CS 1.6
_FWT_ShowText("Привет", 10000, True) ; будет показан текст в течении 10 сек

While 1
    Sleep(1000)
WEnd

Снимок:

Автор(ы): hunter


К сожалению, поддержки DirectX (Direct3d) не будет
При использовании UDF по завершению скрипта может быть загрузка процессора до 100% (это баг в АвтоИте)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: [Окна, Диалоги] Вывод текста в полноэкранное приложение

Ты разделом не ошибься случайно?
Оформи тему под UDF и я перенесу её в соот-ющий раздел.
 
Автор
K

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Re: [Окна, Диалоги] Вывод текста в полноэкранное приложение

Переоформил
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Код:
WinMove($__FWT_hWin1, "", Execute($__FWT_Left) , Execute($__FWT_Top), Execute($__FWT_Width), Execute($__FWT_Height))


:wacko:

Зачем так много Execute()?
 
Автор
K

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Я это сделал, т.к. разрешение полноэкранного приложения может отличается от разрешения на рабочем столе. И чтобы текст был по центру и там и там, то использовал Execute. Для всех параметров использовал Execute, т.к. мало ли, может нужно, чтобы размеры окна динамически меняли размеры в зависимости от от разрешения экрана.

UDF пока не совсем стабильный. Как будет время, попробую потестить получше и подправить.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Код:
WinMove($__FWT_hWin2, "", (@DesktopWidth - $__FWT_Width) / 2, 0.85 * @DesktopHeight, $__FWT_Width, $__FWT_Height)


Нет смысла в Execute()...
 
Автор
K

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Раз добавил, значит должен быть смысл :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Вот я и хочу понять этот смысл. Может мне тоже стоит все перевести на Execute()...
 
Автор
K

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Допустим, на рабочем столе разрешение 1024 на 768, а в игре 800 на 600.
И в UDF стоит:
Global $__FWT_Width = 230
Global $__FWT_Height = 29
Global $__FWT_Left = (@DesktopWidth - $__FWT_Width) / 2
Global $__FWT_Top = @DesktopHeight*0.85

вместо
Global $__FWT_Width = 230
Global $__FWT_Height = 29
Global $__FWT_Left = "(@DesktopWidth - $__FWT_Width) / 2"
Global $__FWT_Top = "@DesktopHeight*0.85"

То при вызове _FWT_ShowText на рабочем столе текст будет нормально отображен, а в игре он вообще не будет виден, т.к. $__FWT_Top будет равен 768 * 0.85 = 652 (окно будет находится вне игры), а надо чтобы он был равен 600*0.85 = 510.

Вот этот $__FWT_Top и будет вычисляться с помощью Execute в зависимости от текущего разрешения.

Yashied сказал(а):
Может мне тоже стоит все перевести на Execute()...
У Вас тоже есть UDF, выполняющий задачу данного плана? Хотелось бы взглянуть :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Так я так и написал раньше.

Код:
WinMove($__FWT_hWin2, "", (@DesktopWidth - $__FWT_Width) / 2, 0.85 * @DesktopHeight, $__FWT_Width, $__FWT_Height)


Тоже самое, тлько без лишнего вызова Execute(), который здесь IMHO совсем не нужен.
 
Автор
K

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Так конечно будет работать, но только вместо всего этого стоят $__FWT_Left, $__FWT_Top, $__FWT_Width, $__FWT_Height, имеющие значения, которые когда-то были присвоены, и из-за этого и добавил Execute, чтобы пересчитать реальные значения из строки в зависимости от текущего разрешения
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

kzru_hunter, выложи пожалуйста рабочий пример.

Я попробывал применить его к StarCraft 2, и ничего не получилось... В Explorer'е надпись отлично показывается, а в игре - нет.

Код:
#Include <FWT_UDF.au3>

_FWT_Initialization()
_FWT_SetParent(WinGetHandle('StarCraft II'))
_FWT_ShowText('Привет', 1000000, 1)

While 1
	Sleep(1000)
WEnd
 
Автор
K

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Вообщем, борода пока что.
На Direct3d не хочет выводить, на OpenGL выводит.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

kzru_hunter
А в каких случаях вывод текста в окне игры может пригодиться. Можно узнать, для каких конкретных целей вы задумывали вашу UDF.
Чисто для понимания практического применения. Мне просто не приходилось с такой задачей сталкиваться.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: FWT_UDF.au3 - Вывод текста в полноэкранное приложение

Garrett сказал(а):
А в каких случаях вывод текста в окне игры может пригодиться. Можно узнать, для каких конкретных целей вы задумывали вашу UDF.

Лично я хотел прикрутить вывод текущего времени через каждый час. Сейчас играю в StarCraft II и совсем не замечаю времени.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Yashied [?]
Лично я хотел прикрутить вывод текущего времени через каждый час. Сейчас играю в StarCraft II и совсем не замечаю времени.
Поддерживаю)) Точно такая же беда :smile:
 
Автор
K

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Поддержку Direct3d не смогу сделать, т.к. придётся всё по-другому делать и в добавок я не занимался 3d графикой, нет интереса

Для CS 1.6 только может подойти :smile: Возможно и для других игр, поддерживающих OpenGL
 

masteor

Новичок
Сообщения
1
Репутация
0
добрый день

а где, собственно сам FWT_UDF.au3 файл с функциями?
Мне тоже надо реализовать подобную задачу.
 
Верх