Что нового

Как сделать динамическую иконку в трее?

agikon

Знающий
Сообщения
789
Репутация
17
например можно ли вывести на иконку процент загружености процессора? чтобы каждую секунду данные обнолялись.
натолкните пожалуйста где что читать.
и может знаете где кто делал чтото подобное чтобы мне как пример посмотреть.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
agikon,
Попробуйте так:
Код:
Run('taskmgr.exe', '', @SW_HIDE)


Запускает Диспетчер Задач в скрытном режиме, но при этом появляется иконка в трее с индикатором загрузки ПК :smile:


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

например можно ли вывести на иконку процент загружености процессора? чтобы каждую секунду данные обнолялись.
Вот:
Код:
#Include <FontConstants.au3>
#Include <WinAPIEx.au3>

Opt('TrayAutoPause', 0)

Global $hAutoIt = WinGetHandle(AutoItWinGetTitle())
Global $Count = 0, $hPrev = 0

_SetAutoItIcon(0)

While 1
	_SetAutoItIcon(_GetLoadPerc())
    Sleep(100)
WEnd

Func _SetAutoItIcon($iCount)

    Local $hDC, $hBitmap, $hMask, $hIcon, $hFont, $tNID, $tRect

    $hDC = _WinAPI_CreateCompatibleDC(0)
    $hBitmap = _WinAPI_CreateSolidBitmap(0, 0xFFFFFF, 16, 16)
    $hMask = _WinAPI_CreateBitmap(16, 16, 1, 1)
    $hFont = _WinAPI_CreateFont(16, 0, 0, 0, $FW_NORMAL, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, 'Tahoma')
    $tRect = _WinAPI_CreateRectEx(0, 0, 16, 16)
    _WinAPI_SelectObject($hDC, $hBitmap)
    _WinAPI_SelectObject($hDC, $hFont)
    _WinAPI_DrawText($hDC, $iCount, $tRect, BitOR($DT_CENTER, $DT_SINGLELINE, $DT_VCENTER))
    _WinAPI_DeleteDC($hDC)
    $hIcon = _WinAPI_CreateIconIndirect($hBitmap, $hMask)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteObject($hMask)
    _WinAPI_DeleteObject($hFont)
    $tNID = DllStructCreate($tagNOTIFYICONDATA)
    DllStructSetData($tNID, 'Size', DllStructGetSize($tNID))
    DllStructSetData($tNID, 'hWnd', $hAutoIt)
    DllStructSetData($tNID, 'Flags', $NIF_ICON)
    DllStructSetData($tNID, 'ID', 1)
    DllStructSetData($tNID, 'hIcon', $hIcon)
    _WinAPI_ShellNotifyIcon($NIM_MODIFY, $tNID)
    If $hPrev Then
        _WinAPI_DestroyIcon($hPrev)
    EndIf
    $hPrev = $hIcon
EndFunc   ;==>_SetAutoItIcon

Func _GetLoadPerc($strComputer = "localhost")
   $colItems = ""
   $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
   $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", 0x10 + 0x20)
   If IsObj($colItems) then
     For $objItem In $colItems
        Return $objItem.LoadPercentage
     Next
   Endif
   Return 10000000;;;Return some stupid value as an obvious error.
EndFunc
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
класс!

конечно код сложнейший.. :whistle:

но ребята, а где вообще можно посмотреть все возможные параметры, ну например загрузка памяти, часы, скорость сетевого соединения.
вот как это всё назвать, функции WinAPI ? ну часы точно знаю можно.
а от где этот список можно посмотреть для аутоита?
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
да это конечно всё прикольно :smile:
но с чего бы начать?
мне бы список API функций для аутоита найти.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
agikon [?]
мне бы список API функций для аутоита найти.
А что их искать. Справка --> User Defined Function Reference --> WinAPI Management.
В WinAPIEx есть справка, там только API.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
а в русской справке подскажите пожалуйста где это именно? Справка -> ...
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
то есть в русской справке их вообще нет?
а можете скинуть справку английскую в .chm формате где есть эти апи?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
agikon
Вот и долгожданный пример

Код:
#include <Date.au3>
#include <GuiStatusBar.au3>
Global $Kernel32 = DllOpen('kernel32.dll'), $TmpCPU
AdlibRegister('_CPU_IdleClock_Update', 1000)
TraySetIcon('taskmgr.exe', -3)
TrayTip("Загрузка процессора", 'CPU: 0%', 1)

While 1
	Sleep(100000000)
WEnd

Func _CPU_IdleClock_Update()
	Static $StartTimes[2], $EndTimes[2], $bFirstRun = True
	Static $CPU_Kernel = DllStructCreate($tagFileTime), $CPU_User = DllStructCreate($tagFileTime), $CPU_Idle = DllStructCreate($tagFileTime)
	Static $pCPU_Kernel = DllStructGetPtr($CPU_Kernel), $pCPU_User = DllStructGetPtr($CPU_User), $pCPU_Idle = DllStructGetPtr($CPU_Idle)

	DllCall($Kernel32, "int", "GetSystemTimes", "ptr", $pCPU_Idle, "ptr", $pCPU_Kernel, "ptr", $pCPU_User)
	$EndTimes[0] = (DllStructGetData($CPU_Kernel, 1) + DllStructGetData($CPU_User, 1)); Kerneltime + UserTime
	$EndTimes[1] = DllStructGetData($CPU_Idle, 1);IdleTime

	If $bFirstRun Then
		$StartTimes = $EndTimes
		$bFirstRun = False
		Return
	EndIf

	Local $Idle_Time = $EndTimes[1] - $StartTimes[1]
	If $Idle_Time > 0 Then ; Every once in a while idle time will be negative because the 32bit value gets to high and goes back to zero causing starttime to be bigger then endtime
		Local $Total_Time = $EndTimes[0] - $StartTimes[0]
		Local $CPU_ico = Round((($Total_Time - $Idle_Time) / $Total_Time) * 11)
		Local $CPU_Percent = (($Total_Time - $Idle_Time) / $Total_Time) * 100
		$CPU_Percent = StringFormat('CPU: %.1f%%', $CPU_Percent)
		If $TmpCPU <> $CPU_Percent Then
			TrayTip("Загрузка процессора", $CPU_Percent, 1)
			TraySetIcon('taskmgr.exe', -3-$CPU_ico)
			$TmpCPU = $CPU_Percent
		EndIf
	EndIf
	$StartTimes = $EndTimes
EndFunc


Эта функция взята из скрипта "FTP Explorer" от Beege. Чуть подправил, дальше сам делай.
 
Верх