Что нового

Цветы падающие сверху экрана вниз, потипу заставки Bubles

vanekzver

Новичок
Сообщения
91
Репутация
2
Можно ли сделать программу, при запуске которой в течении 5 минут падали цветы сверху экрана вниз. И чтобы рабочий стол было видно


Добавлено:
Сообщение автоматически объединено:

valentinesday7.gif
Допустим вот эта картинка по экрану в рандомных местах сверху экрана падала в низ, допустим 200 штук на экран
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Посмотри тут:
http://www.autoitscript.com/forum/topic/58665-snow-on-your-desktop/
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Хм, а картинку тут побольше в этом скрипте нельзя сделать?


Добавлено:
Сообщение автоматически объединено:

Которая падает) Скрипт огромный, пока обучился немногому буквально только начал
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Замени в скрипте строки:
Код:
$IV_Snowflakesize = 15 ; The size of 1 snowflake (to split them up out of the picture)
$IV_Snowflakecount = 12 ; The number of snowflakes in the image

на:
Код:
$IV_Snowflakesize = 30 ; The size of 1 snowflake (to split them up out of the picture)
$IV_Snowflakecount = 1 ; The number of snowflakes in the image
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
а можно как нибудь это преодалеть? сделать допустим GUI без рамок прозрачного цвета и чтобы в этом GUI были эти снежинки? За предыдущюю помощь спасибо.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Можно и на окнах сделать, вот только при передвижении процессор грузит

Код:
#Include <WindowsConstants.au3>
#Include <WinAPIEx.au3>
#Include <GDIPlus.au3>

HotKeySet('{ESC}', '_Exit')

Dim $Array[100]

$hForm = GUICreate('', @DesktopWidth, @DesktopHeight, 0, 0, BitOR($WS_POPUP, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS), BitOR($WS_EX_LAYERED, $WS_EX_COMPOSITED, $WS_EX_TOPMOST))
GUISetBkColor(0x000000)

For $i = 1 To 100
	$X = Random(30, @DesktopWidth - 30, 1)
    $Y = Random(30, @DesktopHeight - 30, 1)
    $Array[$i - 1] = GUICreate('', 30, 30, $X, $Y, $WS_POPUP, $WS_EX_LAYERED, $hForm)
	LoadImage($Array[$i - 1], @ScriptDir & '\1.gif')
	GUISetState(@SW_SHOW)
Next

_WinAPI_SetLayeredWindowAttributes($hForm, 0x000000, 255)
GUISetState(@SW_SHOW, $hForm)

While 1
    Sleep(100)
Wend	
	
Func _Exit()
	Exit
EndFunc	

Func LoadImage($hWnd, $sImage)
	_GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($sImage)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	_WinAPI_UpdateLayeredWindowEx($hWnd, -1, -1, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
	_GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
EndFunc
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
В последнем варианте они просто появляются, после появления 100 штук, все конец, а нужно чтобы падали сверху, но не создавали такого эффекта как на картинке. Просто код очень большой в 1 варианте просто пока не могу в нем разобраться. Часть не понимаю...
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
В моём варианте я их набросал для наглядности, при передвижении процессор грузит, но когда они двигаются, они находятся поверх всех окон, ни чего ни стирают и можно дальше заниматься чем занимался, но это передвижение нужно реализовать так чтоб не грузило процессор.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Можете предоставить пример. А то на словах не могу посмотреть)
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Если вы говорите что он только нагружает процессор, то я думаю 6 ядер справятся)
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Не советую им пользоваться, он не правильный и не выходит полностью по нажатию ESC то есть процесс не завершается.

Код:
#Include <WindowsConstants.au3>
#Include <WinAPIEx.au3>
#Include <GDIPlus.au3>

HotKeySet('{ESC}', '_Exit')

Global $Array[1][3] = [[0, 0, 0]]

$hForm = GUICreate('', @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
GUISetBkColor(0x000000)

For $i = 0 To 99
	$X = Random(30, @DesktopWidth - 30, 1)
    $Y = Random(30, @DesktopHeight - 30, 1)
	$Array[0][0] += 1
	ReDim $Array[$Array[0][0] + 1][UBound($Array, 2)]
    $Array[$Array[0][0]][0] = GUICreate('', 30, 30, $X, $Y, $WS_POPUP, $WS_EX_LAYERED, $hForm)
	$Array[$Array[0][0]][1] = DllCallbackRegister('Move', 'lresult', 'hwnd;ulong;wparam;lparam')
	$Array[$Array[0][0]][2] = _WinAPI_SetTimer($Array[$Array[0][0]][0], TimerInit(), 10, DllCallbackGetPtr($Array[$Array[0][0]][1]))
	LoadImage($Array[$Array[0][0]][0], @ScriptDir & '\1.gif')
	GUISetState(@SW_SHOW)
Next

_WinAPI_SetLayeredWindowAttributes($hForm, 0x000000, 255)
GUISetState(@SW_SHOW, $hForm)

While 1
    Sleep(10)
Wend	
	
Func _Exit()
	For $i = 0 To $Array[0][0]
		DllCallbackFree($Array[$i][1])
		_WinAPI_KillTimer($Array[$i][0], $Array[$i][2])
		GUIDelete($Array[$i][0])
    Next
	GUIDelete($hForm)
	Exit
EndFunc	

Func Move($hWnd, $iMsg, $wParam, $lParam)
	$iPos = WinGetPos($hWnd)
	If $iPos[1] >= @DesktopHeight Then 
		WinMove($hWnd, '', $iPos[0] + Random(0, 10, 1), -30, $iPos[2], $iPos[3])
	Else	
	    WinMove($hWnd, '', $iPos[0], $iPos[1] + 5, $iPos[2], $iPos[3])
	EndIf	
EndFunc	

Func LoadImage($hWnd, $sImage)
	_GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($sImage)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	_WinAPI_UpdateLayeredWindowEx($hWnd, -1, -1, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
	_GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
EndFunc
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Код:
GUIDelete($hForm)
    Exit 0
EndFunc


Почему 0? После изменения на просто Exit Выходит на Esc Полностью, но да, согласен на 37 % загружает проццесор


Добавлено:
Сообщение автоматически объединено:

ОЙ нет это я глючу) Сорри Сплю уже)


Добавлено:
Сообщение автоматически объединено:

Код:
Func _Exit()
GUIDelete ($hForm)
    Exit
EndFunc


Вот так норм выходит, => неправильно написана функция выхода


Добавлено:
Сообщение автоматически объединено:

А, нет снова глючу....
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
А ты попробуй запустить через редактор, нажать ESC и посмотреть log в консоле по завершению процесса должна быть такая строчка:

Код:
>Exit code: 0    Time: 16.515

Если её нет, то процесс не завершился до конца и висит в диспетчере задач.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Дописал закрытие программы (процесса) В функцию exit теперь норм)
 
Верх