Что нового

[Ошибки] Помогите сделать код проще

gipperpank

Новичок
Сообщения
10
Репутация
0
В общем прога должна запускаться при старте и сверять дату установки виндовс с текущей датой при этом выводя на экран в низу с права сообщение
приведённый код рабочий вариант, проблема в том что программа ест 12 метров оперативы что на мой взгляд очень много для программы которая ничего не делает.
просьба тех кто уровнем выше посмотрите код и скажите как можно уменьшить потребление оперативки и за счёт чего
не реализована задача - программа должна висеть на рабочем столе а не поверх открытых окон


Код:
#Include <WinAPIEx.au3>
#Include <Date.au3>
#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>
#Include <GUIConstants.au3>
#AutoIt3Wrapper_Run_Au3Stripper=Y
;Прячем картинку в трэе
#NoTrayIcon

;переменные
$Width = _WinAPI_GetWindowWidth(_WinAPI_GetDesktopWindow()) ;Ширина монитора
$Height = _WinAPI_GetWindowHeight(_WinAPI_GetDesktopWindow()) ;Высота Монитора
Local $sInstallDate = _Win32_OperatingSystem_InstallDate()
If @error Then Exit ConsoleWrite("!>_Win32_OperatingSystem_InstallDate @error: " & @error & @CRLF)

;Запускаем условие
If _DateDiff("M", $sInstallDate, _NowCalcDate()) >36 Then
;*************************Окно красного цвета*************************************************
$hForm = GUICreate('alert', 200, 100, $Width-200, $Height-100, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW))
GUISetBkColor(0xABABAB) ; задний фон (прозрачный)
$Label1 = GUICtrlCreateLabel("Внимание Требуется профилактика компьютера, обратитесь в БТП Тел.: 50-50", 1, 10, 200, 200)
GUICtrlSetFont(-1, 12, 400, 0, "System")  ; шрифт
GUICtrlSetColor(-1, 0xff0000) ; цвет текста (зелёный)
GUISetState()
_WinAPI_SetLayeredWindowAttributes($hForm, 0xABABAB, 255, BitOR($LWA_COLORKEY, $LWA_ALPHA))
Do
Sleep(100)
Until GUIGetMsg() = -3
Else
;*************************Окно зелёного цвета*************************************************
$hForm = GUICreate('ok', 200, 100, $Width-200, $Height-100, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW))
GUISetBkColor(0xABABAB) ; задний фон (прозрачный)
$Label1 = GUICtrlCreateLabel("Плановая профилактика компьютера не требуется", 1, 10, 200, 200)
GUICtrlSetFont(-1, 12, 400, 0, "System")  ; шрифт
GUICtrlSetColor(-1, 0x002A00) ; цвет текста (зелёный)
GUISetState()
_WinAPI_SetLayeredWindowAttributes($hForm, 0xABABAB, 255, BitOR($LWA_COLORKEY, $LWA_ALPHA))
Do
Sleep(100)
Until GUIGetMsg() = -3
EndIf

;Функция для получения даты установки
Func _Win32_OperatingSystem_InstallDate()
    Local $oWMI, $oItems
    $oWMI = ObjGet("winmgmts:\\.\root\CIMV2")
    If Not IsObj($oWMI) Then Return SetError(1, 0, 0)
    $oItems = $oWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
    If Not IsObj($oItems) Then Return SetError(2, 0, 0)
    For $oIt In $oItems
        Return StringRegExpReplace($oIt.InstallDate, "\A(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(?:.*)", "$1/$2/$3 $4:$5:$6")
    Next
    Return SetError(3, 0, 0)
EndFunc
;конец
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
В бесконечном цикле должна быть пауза, чтобы не нагружать процессор
Код:
Do
      Sleep(100)
Until GUIGetMsg() = -3
 
Автор
G

gipperpank

Новичок
Сообщения
10
Репутация
0
спасибо, применил, а что на счёт оперативы? может есть возможность снизить потребление
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
gipperpank [?]
программа должна висеть на рабочем столе а не поверх открытых окон
В стилях ошибка. Нужно так
Код:
$hForm = GUICreate('alert', 200, 100, $Width-200, $Height-100, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW))


как можно уменьшить потребление оперативки
Используйте Stripper из полной версии SciTE
Код:
#AutoIt3Wrapper_Run_Au3Stripper=Y
 
Автор
G

gipperpank

Новичок
Сообщения
10
Репутация
0
поправил и добавил
при работе нагрузка на процессор 00
потребление оперативка 12500 кб (по моему это много)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
сначала все привести к порядку
примерно так
Код:
#NoTrayIcon

#include <WinAPIEx.au3>
#include <Date.au3>
#include <WindowsConstants.au3>

Local $stCoord = _WinAPI_GetWorkArea()
Local $Width = DllStructGetData($stCoord, 'Right') - 200
Local $Height = DllStructGetData($stCoord, 'Bottom') - 100
Local $sInstallDate = _Win32_OperatingSystem_InstallDate()
If @error Then Exit ConsoleWrite("!>_Win32_OperatingSystem_InstallDate @error: " & @error & @CRLF)

Local $sTitle = '', $iColorT, $sText = ''
If _DateDiff("M", $sInstallDate, _NowCalcDate()) > 36 Then
	$sTitle = 'alert'
	$sText = "Внимание Требуется профилактика компьютера, обратитесь в БТП Тел.: 50-50"
	$iColorT = 0xff0000
Else
	$sTitle = "ok"
	$sText = "Плановая профилактика компьютера не требуется"
	$iColorT = 0x22B14C
EndIf


Local $hForm = GUICreate($sTitle, 200, 100, $Width, $Height, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW))
GUISetBkColor(0xABABAB)
Local $Label1 = GUICtrlCreateLabel($sText, 0, 0, 200, 100, 0x01)
GUICtrlSetFont(-1, 12, 400, 0, "System")
GUICtrlSetColor(-1, $iColorT)
GUISetState()
_WinAPI_SetLayeredWindowAttributes($hForm, 0xABABAB, 255)

Do

Until GUIGetMsg() = -3


;Функция для получения даты установки
Func _Win32_OperatingSystem_InstallDate()
	Local $oWMI, $oItems
	$oWMI = ObjGet("winmgmts:\\.\root\CIMV2")
	If Not IsObj($oWMI) Then Return SetError(1, 0, 0)
	$oItems = $oWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
	If Not IsObj($oItems) Then Return SetError(2, 0, 0)
	For $oIt In $oItems
		Return StringRegExpReplace($oIt.InstallDate, "\A(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(?:.*)", "$1/$2/$3 $4:$5:$6")
	Next
	Return SetError(3, 0, 0)
EndFunc   ;==>_Win32_OperatingSystem_InstallDate
;конец
и компилировать нужно через wrapper.
у меня после компиляции( с директивой для Stripper) потребление памяти 2,2 мб
до этого было 10 мб. сейчас такие объемы оперативы в компах даже в офисных стоят, что 8мб вообще ни о чем
 
Автор
G

gipperpank

Новичок
Сообщения
10
Репутация
0
наверно мне надо обновить Autoit (на 26 строчке кода сыпит ошибки undeclared global variable и undefined function)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
я привел часть кода, естественно там не указаны библиотеке. поправил предыдущее свое сообщение
 
Автор
G

gipperpank

Новичок
Сообщения
10
Репутация
0
Спасибо! буду разбираться где у меня что не так как у вас, но мельком глянув уже увидел что я свой вариант перегрузил лишними шагами (часть кода про определение положения всплывающего сообщения) вы сделали проще а значит и работать будет быстрее
большое спасибо что уделили внимание !
 
Верх