Что нового

Узнать что приложение занято, выполняет фоновую работу

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Как узнать, что приложение занято? Какие есть функция для этого?
Вот например, когда приложение занято, то курор для него меняется на стрелку с кружочком.
Если открыть браузер Chrome, обновить страницу, то пока страница не загурзится, то курсор остается как стрелка с кружочком. Так вот, если ли Api что бы узнать для окна, или для процесса, занято ли приложение?
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
inververs
Код:
#include<WinAPIEx.au3>
_WinAPI_GetProcessIoCounters()

Заметил что если приложение обрабатывает слишком много задач, из-за чего зависает, то эта функция возвращает массив где 1 и 4 ячейки = 0.
Может оно, хотя наверное есть и другие более достойные методы :smile:


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

или я не совсем понял что надо?
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
2 inververs
Код:
#include <WinAPIEx.au3>

HotKeySet("{PAUSE}", "_Exit")

While 1
	$h = ProcessExists('firefox.exe')	; PS. Заметил что он у меня в фоне стабильно
										; от 1-20% проца отжирает
										; Даже если вкладки все закрыты
										; Жесть, блин! :(
	TrayTip('PAUSE-Выход', Ceiling(GetProcessUsage($h)) & ' %', 1000)
WEnd

Func GetProcessUsage($hProc)
	Local $last_sys, $last_proc, $sys, $proc, $ret
	$last_sys = _WinAPI_GetSystemTimes()
	$last_proc = _WinAPI_GetProcessTimes($hProc)
	Sleep(1000)
	$sys = _WinAPI_GetSystemTimes()
	$proc = _WinAPI_GetProcessTimes($hProc)
	$sys[1] -= $last_sys[1]
	$sys[2] -= $last_sys[2]
	$proc[1] -= $last_proc[1]
	$proc[2] -= $last_proc[2]

	$ret = (($proc[1]+$proc[2])/($sys[1]+$sys[2]))*100.0
	If StringInStr($ret, '#') Then $ret = 0

	Return $ret
EndFunc

Func _Exit()
	Exit
EndFunc
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Приложение само принимает решение о смене курсора. Если, к примеру, приложение ждет ответа от сервера, ни один из выше перечисленных вариантов не поможет.
 
Верх