Что нового

[Элементы GUI] Фоновое обновление графических элементов GUI

brain

Новичок
Сообщения
3
Репутация
0
Доброго здоровья всем!

Задача - информер у часов в трее, отображающий доступность рабочих станций. Раскрутить решил через банальные пинги и гуи-прямоугольники у часов. Код набросал и он работает.
Проблема номер раз - как сделать чтобы эта вся петрушка не делалась активной (будет мешать, например, при наборе текста). Можно захватывать текущее активное окно и отдавать ему активити, или есть что-то менее костыльное?
Проблема номер два - Как оставить не все окна, а только последние отрисованные. Как не пробовал GUIDelete(), не разобрался.
Проблема номер три - при стабильном пинге через 'cmd->ping -t х.х.х.х' у меня высвечивается что один из пяти адресов недоступен. Это проблема второстепенная, но если кто подскажет чего умное - моя благоден будет. Пробовал давать задержку между пингами, не спасло.
OffTopic:
Писака я подпольный, мало что спрашиваю и курю мануалы, в этот раз самому разобраться не удается. не бейте за косорукость. Пинки в правильном направлении приветствуются. Допилю - выложу готовый вариант.
.
Код:
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>

$1ip = "8.8.8.8"
$2ip = "8.8.8.8"
$3ip = "8.8.8.8"
$4ip = "8.8.8.8"
$5ip = "8.8.8.8"

$var = Ping($1Ip)
$x=1470
$green="0x00FF00"
$red="0xFF0000"

HotKeySet("{ESC}", "_Terminate")
WorkFunc()
Func WorkFunc()
While 1

Local $i = 0
While $i <= 4
	$i = $i + 1
    if $i=1	then
		$var = Ping($1Ip, 500)
		If $var Then
			$color1 = $green
		Else
			$color1 = $red
		EndIf
	ElseIf $i=2 then
		$var = Ping($2Ip, 500)
		If $var Then
			$color2 = $green
		Else
			$color2 = $red
		EndIf
	ElseIf $i=3 then
		$var = Ping($3Ip, 500)
		If $var Then
			$color3 = $green
		Else
			$color3 = $red
		EndIf
	ElseIf $i=4 then
		$var = Ping($4Ip, 500)
		If $var Then
			$color4 = $green
		Else
			$color4 = $red
		EndIf
	ElseIf $i=5 then
		$var = Ping($5Ip, 500)
		If $var Then
			$color5 = $green
		Else
			$color5 = $red
		EndIf
	Else
		MsgBox($MB_SYSTEMMODAL, "Error", "" & $i)
	EndIf
WEnd

Local $i = 0
While $i <= 4
	$i = $i + 1
    if $i=1	then
		GUICreate('', 22, 20, $x, 10, $WS_POPUP, $WS_EX_TOPMOST)
		GUISetBkColor ($color1)
		GUISetState()
	ElseIf $i=2 then
		GUICreate('', 22, 20, $x+44, 10, $WS_POPUP, $WS_EX_TOPMOST)
		GUISetBkColor($color2)
		GUISetState()
	ElseIf $i=3 then
		GUICreate('', 22, 20, $x+88, 10, $WS_POPUP, $WS_EX_TOPMOST)
		GUISetBkColor($color3)
		GUISetState()
	ElseIf $i=4 then
		GUICreate('', 22, 20, $x+132, 10, $WS_POPUP, $WS_EX_TOPMOST)
		GUISetBkColor($color4)
		GUISetState()
	ElseIf $i=5 then
		GUICreate('', 22, 20, $x+176, 10, $WS_POPUP, $WS_EX_TOPMOST)
		GUISetBkColor($color5)
		GUISetState()
		sleep(750)
	Else
		MsgBox($MB_SYSTEMMODAL, "Error", "" & $i)
	EndIf
WEnd

Sleep (10000)

    WEnd
EndFunc

Func _Terminate()
    Exit
EndFunc
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
brain
Проблема номер раз - как сделать чтобы эта вся петрушка не делалась активной (будет мешать, например, при наборе текста). Можно захватывать текущее активное окно и отдавать ему активити, или есть что-то менее костыльное?
В начале скрипта попробуй добавить
Код:
Global $WS_EX_NOACTIVATE = 0x08000000

А дальше можно заменить при создании Gui

Код:
$WS_EX_TOPMOST

на
Код:
BitOR($WS_EX_TOPMOST, $WS_EX_NOACTIVATE)
 
Автор
B

brain

Новичок
Сообщения
3
Репутация
0
Спасибо всем. Допилил. Правда, проблема с ошибками пингов так и не ушла. Но с гуи разобрался, всем спасибо.

Код:
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>


$1ip = "8.8.8.8" 				;	гугл
$2ip = "8.8.8.8" 				;	гугл
$3ip = "8.8.8.8" 				;	гугл
$4ip = "8.8.8.8" 				;	гугл
$5ip = "8.8.8.8" 				;	гугл

$var = Ping($1Ip, 4000)
$x=1470
$green="0x00FF00"
$red="0xFF0000"
$ping_fr=4000
$pause_time=1000

HotKeySet("{ESC}", "_Terminate")
Pingation()
Func Pingation()
While 1

Local $i = 0
While $i <= 4
	$i = $i + 1
    if $i=1	then
		sleep ($pause_time)
		$var = Ping($1Ip, $ping_fr)
		If $var Then
			$color1 = $green
		Else
			$color1 = $red
		EndIf
	ElseIf $i=2 then
		sleep ($pause_time)
		$var = Ping($2Ip, $ping_fr)
		If $var Then
			$color2 = $green
		Else
			$color2 = $red
		EndIf
	ElseIf $i=3 then
		sleep ($pause_time)
		$var = Ping($3Ip, $ping_fr)
		If $var Then
			$color3 = $green
		Else
			$color3 = $red
		EndIf
	ElseIf $i=4 then
		sleep ($pause_time)
		$var = Ping($4Ip, $ping_fr)
		If $var Then
			$color4 = $green
		Else
			$color4 = $red
		EndIf
	ElseIf $i=5 then
		sleep ($pause_time)
		$var = Ping($5Ip, $ping_fr)
		If $var Then
			$color5 = $green
		Else
			$color5 = $red
		EndIf
	Else
		MsgBox($MB_SYSTEMMODAL, "Error", "PING ERROR")
	EndIf
WEnd

Local $i = 0
While $i <= 4
	$i = $i + 1
    if $i=1	then
		GUICreate('', 22, 20, $x, 10, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_NOACTIVATE))
		GUISetBkColor ($color1)
		GUISetState(@SW_SHOWNOACTIVATE)
	ElseIf $i=2 then
		GUICreate('', 22, 20, $x+44, 10, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_NOACTIVATE))
		GUISetBkColor($color2)
		GUISetState(@SW_SHOWNOACTIVATE)
	ElseIf $i=3 then
		GUICreate('', 22, 20, $x+88, 10, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_NOACTIVATE))
		GUISetBkColor($color3)
		GUISetState(@SW_SHOWNOACTIVATE)
	ElseIf $i=4 then
		GUICreate('', 22, 20, $x+132, 10, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_NOACTIVATE))
		GUISetBkColor($color4)
		GUISetState(@SW_SHOWNOACTIVATE)
	ElseIf $i=5 then
		GUICreate('', 22, 20, $x+176, 10, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_NOACTIVATE))
		GUISetBkColor($color5)
		GUISetState(@SW_SHOWNOACTIVATE)
		sleep(750)
	EndIf
WEnd
Sleep ($pause_time*10)

    WEnd
EndFunc
 GUIDelete
Func _Terminate()
    Exit
EndFunc
 
Верх