#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <WinAPIEx.au3>;Yashied, http://autoit-script.ru/index.php/topic,47.0.html
Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)
Global $aGUI, _ ;массив с нужными данными, см. ниже;
$iCount, _ ;счетчик окон;
$sStringControl = '|', _ ;строка для проверки уникальности рандомного числа;
$iMaxTimeShowWin = 60000, _ ;максимальное время показа окна (ms);
$iX_Num = 6, _ ;кол-во окон по горизонтали;
$iY_Num = 12, _ ;кол-во окон по вертикали;
$iMaxWin = $iX_Num * $iY_Num, _ ;макс. кол-во окон, открытых одновременно;
$aMsg
Dim $aGUI[$iMaxWin + 1][5] = [[$iMaxWin, '', Int(@DesktopWidth / $iX_Num - 20), Int(@DesktopHeight / $iY_Num - 20)]]
;[0][0] - макс. кол-во окон, открытых одновременно;
;[0][2] - ширина всех окон;
;[0][3] - высота всех окон;
;[1-n][0] - для Handle создаваемых окон;
;[1-n][1] - для ID создаваемых кнопок(иконок) на окнах;
;[1-n][2] - координата X окна [1-n][0];
;[1-n][3] - координата Y окна [1-n][0];
;[1-n][4] - начальное время открытия окна [1-n][0].
For $i = 1 To $aGUI[0][0]
If $i = 1 Then
$aGUI[$i][2] = 10
$aGUI[$i][3] = 10
ElseIf Mod($i - 1, $iX_Num) Then
$aGUI[$i][2] = $aGUI[$i - 1][2] + 20 + $aGUI[0][2]
$aGUI[$i][3] = $aGUI[$i - 1][3]
Else
$aGUI[$i][2] = 10
$aGUI[$i][3] = $aGUI[$i - 1][3] + 20 + $aGUI[0][3]
EndIf
Next
HotKeySet('3', '_Create_GUI');3 - создать окно
HotKeySet('{Esc}', '_Exit');Esc - выход
_WinAPI_EmptyWorkingSet()
While 1
If $iCount Then
$aMsg = GUIGetMsg(1)
For $i = 1 To $aGUI[0][0]
If $aGUI[$i][0] Then
If TimerDiff($aGUI[$i][4]) >= $iMaxTimeShowWin Or _
($aMsg[1] = $aGUI[$i][0] And $aMsg[0] = $aGUI[$i][1]) Then
HotKeySet('3')
For $j = 255 To 0 Step -5
WinSetTrans($aGUI[$i][0], '', $j)
Sleep(5)
Next
GUIDelete($aGUI[$i][0])
$iCount -= 1
If Not $iCount Then
_WinAPI_EmptyWorkingSet()
EndIf
$aGUI[$i][0] = 0
$sStringControl = StringRegExpReplace($sStringControl, '(?<=\|)(' & $i & '\|)', '')
HotKeySet('3', '_Create_GUI')
EndIf
EndIf
Next
Else
Sleep(20)
EndIf
WEnd
Func _Create_GUI()
Local $i_Random, $a_Message[6][3] = [['Привет', 0xFFE4B5, 0xDC143C], _
['Пока', 0x00FFFF, 0x0000FF],['Доброе утро', 0xDCDCDC, 0x4B0082], _
['Добрый день', 0xFFFF00, 0xFF0000],['Добрый вечер', 0xFFDAB9, 0x800080], _
['Пошли все на фиг', 0xFF00FF, 0x8B4513]], _
$s_Pic_File = @SystemDir & '\user32.dll', $h_Rgn, $i_Mess = Random(0, 5, 1)
HotKeySet('3')
$iCount += 1
If $iCount <= $iMaxWin Then
While 1
$i_Random = Random(1, $iMaxWin, 1)
If Not StringInStr($sStringControl, '|' & $i_Random & '|') Then
$sStringControl &= $i_Random & '|'
ExitLoop
EndIf
WEnd
Else
$iCount = $iMaxWin
TrayTip('Error', 'Максимальное кол-во окон (' & $iMaxWin & ') уже открыто.', 3, 3)
AdlibRegister('_Kill_TrayTip', 3000)
HotKeySet('3', '_Create_GUI')
Return
EndIf
$aGUI[$i_Random][0] = GUICreate($i_Random, $aGUI[0][2], $aGUI[0][3], _
$aGUI[$i_Random][2], $aGUI[$i_Random][3], $WS_POPUP, $WS_EX_TOOLWINDOW)
GUISetBkColor($a_Message[$i_Mess][1], $aGUI[$i_Random][0])
$h_Rgn = _WinAPI_CreateRoundRectRgn(0, 0, $aGUI[0][2], $aGUI[0][3], 12, 12)
_WinAPI_SetWindowRgn($aGUI[$i_Random][0], $h_Rgn)
_WinAPI_DeleteObject($h_Rgn)
$aGUI[$i_Random][1] = GUICtrlCreateIcon($s_Pic_File, 103, $aGUI[0][2] - 18, 2, 16, 16)
GUICtrlSetCursor(-1, 0)
GUICtrlCreateLabel('№ ' & $i_Random & ', ' & $a_Message[$i_Mess][0], 0, Int(($aGUI[0][3] - 15) / 2), _
$aGUI[0][2], 15, $SS_CENTER)
GUICtrlSetColor(-1, $a_Message[$i_Mess][2])
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
WinSetTrans($aGUI[$i_Random][0], '', 0)
GUISetState(@SW_SHOWNOACTIVATE, $aGUI[$i_Random][0])
WinSetOnTop($aGUI[$i_Random][0], '', 1)
For $i = 0 To 255 Step 5
WinSetTrans($aGUI[$i_Random][0], '', $i)
Sleep(5)
Next
$aGUI[$i_Random][4] = TimerInit()
HotKeySet('3', '_Create_GUI')
EndFunc ;==>_Create_GUI
Func _Kill_TrayTip()
TrayTip('', '', 0)
AdlibUnRegister('_Kill_TrayTip')
EndFunc ;==>_Kill_TrayTip
Func _Exit()
Exit
EndFunc ;==>_Exit