Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Диспетчер задач: "Загрузка ЦП: 34%" как он ЭТО делает?
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 25 августа 2007 00:18
· Личное сообщение · #1

При помощи каких API-функций диспетчер задач получает инфу о степени загруженности ЦП?

-----
программистом не рождаются - им умирают





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 25 августа 2007 00:52
· Личное сообщение · #2

Windows performance counters - pdh.h, Toolhelp - tlhelp32.h




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 25 августа 2007 01:38
· Личное сообщение · #3

см. статьи по теме на Code Project http://www.codeproject.com/system/#General

-----
EnJoy!





Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 25 августа 2007 13:38 · Поправил: Gambit
· Личное сообщение · #4

Накопал в диспетчере задач место, где происходит подсчет процента загрузки ЦП:
01002D73_|> 8B35 70110001_MOV ESI,DWORD PTR DS:[<&KERNEL32.GetProcessHeap>]__ ;_kernel32.GetProcessHeap
01002D79_|. 68 80000000__PUSH 80_______________________ ; /HeapSize = 80 (128.)
01002D7E_|. 6A 00_____PUSH 0________________________; |Flags = 0
01002D80_|. FFD6_____ CALL ESI_______________________; |[GetProcessHeap
01002D82_|. 50______ PUSH EAX_______________________; |hHeap
01002D83_|. FF15 6C110001_CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc>]______ ; \HeapAlloc
01002D89_|. 8BF8_____ MOV EDI,EAX
01002D8B_|. 85FF_____ TEST EDI,EDI
01002D8D_|. 74 19_____JE SHORT taskmgr.01002DA8
01002D8F_|. 0FB605 5465010>MOVZX EAX,BYTE PTR DS:[1016554]
01002D96_|. 50______ PUSH EAX
01002D97_|. 68 E05A0101__PUSH taskmgr.01015AE0________________ ; |Format = "Загрузка ЦП: %d%%"
01002D9C_|. 6A 40_____PUSH 40_______________________ ; |N = 40 (64.)
01002D9E_|. 57______ PUSH EDI_______________________; |S
01002D9F_|. FF15 DC110001_CALL DWORD PTR DS:[<&SHLWAPI.wnsprintfW>]______ ; \wnsprintfW


Попробовал написать нечто подобное на Сях:

#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char pr[256];
wsprintf(pr,"%i",HeapAlloc(GetProcessHeap,NULL,128));
MessageBox(0,pr,pr,0);
}


Компилируется нормально, но вылетает с ошибкой на команде HeapAlloc (то есть, мессага не показывается)
Что делать?

-----
программистом не рождаются - им умирают





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 25 августа 2007 14:10
· Личное сообщение · #5

это не подсчёт, а уже вывод....

насколько я помню подсчитывает он с помощью ZwQueryInformationProcess
класс ифны не помню...

-----
[nice coder and reverser]




Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 25 августа 2007 14:15
· Личное сообщение · #6

Нда... жесть Загляни-ка сюда http://www.codeproject.com/system/cpuusage.asp лучше (How to get CPU usage by performance counters (without PDH))

-----
Research is my purpose





Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 25 августа 2007 14:28
· Личное сообщение · #7

На Васме нашел про такую структуру: MEMORYSTATUS, но.. если написать:

#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MEMORYSTATUS mst;
GlobalMemoryStatus(&mst);
char pr[256];
wsprintf(pr,"%i",mst.dwMemoryLoad);
MessageBox(0,pr,pr,0);
}

то все время выводит 56( иногда - 59 или 60) =\

-----
программистом не рождаются - им умирают





Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 25 августа 2007 16:28
· Личное сообщение · #8

Вот эта прога только у меня все время одно и тоже число процентов показывает? Скачал с Васма. Может, кто найдет ошибку... (см аттач, 15 Кб)

781e_25.08.2007_CRACKLAB.rU.tgz - memgraphv0.3.zip

-----
программистом не рождаются - им умирают




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 25 августа 2007 17:17
· Личное сообщение · #9

Как я понял ЦП это нагрузка на проц, а то что у тебя показывается это сколько физической памяти используется.




Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 25 августа 2007 17:46
· Личное сообщение · #10

Vovan666
А как нагрузку на проц узнать?
Error_Log пишет:
Загляни-ка сюда лучше (How to get CPU usage

Однако.. А чего-нибудь менее навороченное, а то в этом примере столько классов, что нифига не компилиться и мозги в рулик сворачиваются

-----
программистом не рождаются - им умирают




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 августа 2007 18:25
· Личное сообщение · #11

Gambit
Если интересна работа на низком уровне, то гляди в сторону MSR регистров процессора.
В общем случае, это работа с привилегированными командами RDMSR/WRMSR, а в частном(для последних моделей) - RDPMC.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 25 августа 2007 18:32
· Личное сообщение · #12

На верное ВОТ http://www.sources.ru/cpp/faqs/56.htm , что тебе нужно.




Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 25 августа 2007 19:22
· Личное сообщение · #13

Vovan666
Может это и оно, тока у мну вылетает на первой же обработке ошибок (при том компилится нормально)
Неужели все способы настолько извращенческие? (я имею ввиду, неужели это нельзя сделать как-нибудь через АПИ?...)
mathio пишет:
Если интересна работа на низком уровне, то гляди в сторону MSR регистров процессора.

Интересна А где про такое можно почитать? (на русском, желательно)

-----
программистом не рождаются - им умирают




Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 25 августа 2007 19:31 · Поправил: Tim
· Личное сообщение · #14

Вообще-то в реестре есть параметр, куда постоянно пишется загрузка процессора... и не только.

-----
MicroSoft? Is it some kind of a toilet paper?





Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 25 августа 2007 19:49
· Личное сообщение · #15

Tim
Что за параметр?

-----
программистом не рождаются - им умирают





Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 25 августа 2007 20:48
· Личное сообщение · #16

Нашел АПИ функу! Вот только как ее применить

DaragoiKomputerPakagiPogalustaZagruzkuPracessora(ochen nada, gelatelno v pracentah: nu ocen nada);

-----
программистом не рождаются - им умирают




Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 25 августа 2007 20:52
· Личное сообщение · #17

Gambit
Когда разберешься с этой функой, то напиши и мне




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 25 августа 2007 23:07
· Личное сообщение · #18

NtQuerySystemInformation
Читай здесь http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/ntquerysysteminformation.asp

-----
Программист SkyNet





Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 26 августа 2007 08:17
· Личное сообщение · #19

Gambit
1. Есть соответствующая тема на форуме MASM32, с примерами реализации LINK_1 http://www.masm32.com/board/topic=1935.0 - masm32
2. Реализация на Бейсике LINK_2 http://www.powerbasic.com/support/forums/Forum7/HTML/002207.html и LINK_3 http://www.powerbasic.com/support/forums/Forum7/HTML/002459.html посредством NtQuerySystemInformation.
3. Реализация на C++ LINK_4 http://spotlight.de/nzforen/acpp/m/acpp-1105521271-30099.html , считывающая данные из реестра.

-----
Программист SkyNet




Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 26 августа 2007 12:07
· Личное сообщение · #20

NtQuerySystemInformation с флагом 5. А дальше ручки и мозги для написания простейшего алгоритма высчитывания загрузки от времени.

-----
Security through obscurity is just an illusion





Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 26 августа 2007 13:11 · Поправил: FrenFolio
· Личное сообщение · #21

Для полного счастья держи сырцы диспетчера задач на C++ от самих мелкомягких filesurf.ru/13467
pushick пишет:
А дальше ручки и мозги для написания


-----
Программист SkyNet





Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 26 августа 2007 13:31 · Поправил: Gambit
· Личное сообщение · #22

Ух ты, сколько всего
Спасибо, пойду использовать ручки и мозги для написания
Если чего нормальное получится - выложу)

////////////////////////////

тому посту, что ниже:
Rouse_, и таби спасибо

-----
программистом не рождаются - им умирают




Ранг: 35.1 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 27 августа 2007 11:47
· Личное сообщение · #23

Я в свое время вот так выводил данную информацию: rouse.drkb.ru/winapi.php#taskmon




Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 27 августа 2007 21:37
· Личное сообщение · #24

для NtQuerySystemInformation нужен заг. файл Winternl.h
Никто не знает где его можно скачать?

-----
программистом не рождаются - им умирают




Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 27 августа 2007 21:46
· Личное сообщение · #25

хм... кто тебе это сказал?
ты нашёл сорс, юзающий левый хидер

NtQuerySystemInformation есть в ntdll.h




Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 27 августа 2007 22:13
· Личное сообщение · #26

RamMerlabs пишет:
хм... кто тебе это сказал?

Вобще-то так написано в MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/ntquerysysteminformation.asp

RamMerlabs пишет:
есть в ntdll.h

А где этот заг. скачать можно?

-----
программистом не рождаются - им умирают




Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 27 августа 2007 22:29
· Личное сообщение · #27

>>Вобще-то так написано в MSDN
хм... может в новых версиях SDK/DDK так и есть.
>>А где этот заг. скачать можно?
в SDK, DDK
или на васме поищи



Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 28 августа 2007 06:19
· Личное сообщение · #28

Gambit

А ntdll.lib ты уже нашел? На rootkits.ru в одной теме валяется и то и другое (не помню в какой).

-----
Security through obscurity is just an illusion





Ранг: 107.6 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 28 августа 2007 14:53
· Личное сообщение · #29

pushick пишет:
А ntdll.lib ты уже нашел? На rootkits.ru в одной теме валяется и то и другое

Не, я нашел, как обойтись без того и без другого

-----
программистом не рождаются - им умирают




Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 05 сентября 2007 22:24
· Личное сообщение · #30

Представляете недели три тому назад баловался на масме на эту тему
прога моя выводит как диспетчер задач загруженность на одну из 12 иконок
трей не доделал пока только в окне
саму оригинальную прогу скачал с журнала Радио
Она через принтерный порт информацию о загрузке на светодиоды выводила
Вот мой исходник пользуйтесь на здоровье
Если доделаете нормально выложите
у меня времени не хватает доделать
у меня все через один поток поэтому перемещать окно можно только когда на
Sleepe прога сидит


e5a9_05.09.2007_CRACKLAB.rU.tgz - showbmp.rar


. 1 . 2 . >>
 eXeL@B —› Программирование —› Диспетчер задач: "Загрузка ЦП: 34%" как он ЭТО делает?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати