Пытаюсь программно узнать загрузку процессора. Нашел сурс один, но что-то не то у меня получается. Plz, знающие люди, помогите... Код CPU_use.bat Код (Text): ;@echo off ;goto make .686p .MMX .XMM .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib STATUS_SUCCESS equ 0 SystemProcessorTimes equ 8 SYSTEM_PROCESSOR_TIMES STRUCT IdleTime QWORD ? KernelTime QWORD ? UserTime QWORD ? DpcTime QWORD ? InterruptTime QWORD ? InterruptCount QWORD ? SYSTEM_PROCESSOR_TIMES ENDS .data NtDll db "NTDLL.DLL",0 ZQSI db "ZwQuerySystemInformation",0 CPU db "загрузка CPU: %u",0 .data? ZwQuerySystemInformation dd ? Temp dd ? tcphand dd ? tcpmem dd ? processors SYSTEM_PROCESSOR_TIMES MAXIMUM_PROCESSORS dup(<>) Buffer db 512 dup(?) .code start: invoke GetModuleHandleA,ADDR NtDll invoke GetProcAddress,eax,ADDR ZQSI mov ZwQuerySystemInformation, eax push offset Temp push offset MAXIMUM_PROCESSORS*sizeof SYSTEM_PROCESSOR_TIMES push offset processors push SystemProcessorTimes call ZwQuerySystemInformation invoke wsprintf,addr Buffer,addr CPU, DWORD PTR processors[0*sizeof SYSTEM_PROCESSOR_TIMES].InterruptCount invoke MessageBox,0,addr Buffer,0,0 invoke ExitProcess, NULL end start :make set proj=CPU_use echo Building CPU_use.exe: echo -------------------- if exist %proj%.exe del %proj%.exe if exist %proj%.obj del %proj%.obj c:\masm32\BIN\ml /nologo /c /coff /Cp %proj%.bat c:\masm32\BIN\link /NOLOGO /SUBSYSTEM:WINDOWS /MERGE:.rdata=.text /IGNORE:4078 %proj%.obj if exist %proj%.obj del %proj%.obj echo. pause
У меня есть пример на Дельфи. Разбираться нет времени. Делай с ним, что хочешь. 154812139__adCpuUsage.pas
Да, вроде, правильный код. Только он показывает кол-во прерываний. 1679463438__SystemProcessorTimes.rar
Four-F, засада твой код работает только под отладчиком. Без него просто вылитает, как-будто ничего не запускали. Такая проблема не только у меня... Может есть какие-то мысли ?
Мыслей нет. Может выравнивание. Там у меня при обломах никаких мессаг не выводится. Добавь пару MessageBox'ов, может и узнаешь в чем дело. Я пущал под w2k. Работало хоть под отладчиком, хоть без.
Во, нашел Ж Код (Text): ZwQuerySystemInformation( IN SYSTEM_INFORMATION_CLASS SystemInformationClass, IN OUT PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength ); Four-F, у тебя не инициализируется переменная "cb" (SystemInformationLength), у меня (w2k) она равна 30h поэтому возвращает код STATUS_INFO_LENGTH_MISMATCH. После переделки все работает...
2 Four-F, dmit10,SteelRat: Ok, 10x за участие. 2 dmit10: В твоем примере (на сколько я разобрался), процент загрузки процессора берется из реестра. Вопрос: а через апишки вообще реально получить интересующую меня инфу?
Так, быстро не нашел... Посмотри SystemProcessorStatistics (судя по названию) на сайте http://ntprog.by.ru/_def.htm может, что и нароешь
Stub не наю, код как код. Токма, чего ты от него хочешь - то ??? Если уж быть серьёзному вопросу, ищи инфу по MSR, однако, сам понимаешь, что это величина переменная от проца к процу, но, вернее тебе ничто не скажет, ни одна прога, кроме самого проца.