Здравствуйте, Pavel Dvorkin.
Спасибо , с этим примером я разобрался , почитал , что к чему . Убрал интерфейс , попробовал в консоли всё это сделать для некоторых счётчиков — всё получилось .
Мне теперь нужно в графическом виде это представить , а именно записать значение счётчика (какого-либо ) в ListBox . Всё считает , все функции работают , но не могу разобраться , как конвертировать результат в строку — для вывода .
Вот мой код:
#include <Windows.h>
#include "resource.h"
#include <string.h>
#include <pdh.h>
#include <pdhmsg.h>
#include <iostream>
#include <stdio.h>
using namespace std;
#pragma comment(lib, "pdh.lib")
#define COMBOBOX 1
#define LISTBOX 2
HWND CB,LB;
BOOL WINAPI WndProc (HWND ,UINT ,WPARAM ,LPARAM );
//главня функция
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,LPSTR CmdLine,int CmdShow)
{
//создание диалогового окна главным окном
int db;
db=DialogBox (hInst,MAKEINTRESOURCE(IDD_DIALOG1),GetDesktopWindow(),WndProc);
}
BOOL WINAPI WndProc (HWND hwnd,UINT uMsg,WPARAM wpar,LPARAM lpar )
{
wchar_t str [51]; //буфер
PDH_STATUS Status;
HQUERY Query = NULL;
HCOUNTER Counter;
DWORD CounterType;
SYSTEMTIME SampleTime;
PDH_FMT_COUNTERVALUE DisplayValue;
char buf [50];
switch (uMsg)
{
case WM_COMMAND:
//Если нажата кнопка Quit, тозакрываем окно
if (LOWORD(wpar)==QUIT)
{EndDialog(hwnd,NULL);
return TRUE;
}
break;
case WM_INITDIALOG:
//Создаём список лет:
CB=CreateWindow((LPCSTR)"Combobox",(LPCSTR)"Combo1", CBS_DROPDOWNLIST|WS_CHILD|WS_VISIBLE/*|WS_VSCROLL|CBS_DROPDOWNLIST*/,
90,360,200,300, hwnd, (HMENU)COMBOBOX,0, NULL);
//Заносим значения лет:
SendMessage(CB, CB_ADDSTRING, 0, (LPARAM)"% Use time");
SendMessage(CB, CB_ADDSTRING, 0, (LPARAM)"% Processor time");
SendMessage(CB, CB_ADDSTRING, 0, (LPARAM)"% Privileged Time");
//Создаём запрос
Status = PdhOpenQueryW(NULL, 0, &Query); //запрос на использование счётчиков производительности
if(Status==ERROR_SUCCESS)
{MessageBox(hwnd,(LPSTR)"open-OK",(LPCSTR)"",MB_OK);}
/*Добавить счётчик в запрос*/
Status = PdhAddEnglishCounterW(Query, L"\\Processor(_Total)\\% Privileged Time", 0, &Counter);
if (Status == ERROR_SUCCESS)
{MessageBox(hwnd,(LPSTR)"add-OK",(LPCSTR)"",MB_OK);}
/*Собирает текущее необработанное значение данных для всех счетчиков в указанном запросе
и обновляет код состояния каждого счетчика*/
Status = PdhCollectQueryData(Query);
if (Status == ERROR_SUCCESS)
{MessageBox(hwnd,(LPSTR)"collect-OK",(LPCSTR)"",MB_OK);
}
Sleep(1000);
Status = PdhCollectQueryData(Query);
if (Status == ERROR_SUCCESS)
{MessageBox(hwnd,(LPSTR)"collect-OK",(LPCSTR)"",MB_OK);
}
/*Вычислить отображаемое значение для указанного счетчика.*/
Status = PdhGetFormattedCounterValue(Counter,
PDH_FMT_DOUBLE,
&CounterType,
&DisplayValue);
if(Status==ERROR_SUCCESS)
{MessageBox(hwnd,(LPSTR)"formatted-OK",(LPCSTR)"",MB_OK);
}
//вывод результата:
LB=CreateWindow("Listbox", NULL,
WS_VISIBLE|WS_CHILD| WS_VSCROLL | WS_TABSTOP |WS_BORDER ,
90,140,300,200, hwnd, (HMENU)LISTBOX, 0, NULL);
wsprintf(buf, "%f", DisplayValue);
SendMessage(LB, LB_ADDSTRING, 1, ( LPARAM)buf);
if (Query)
{
PdhCloseQuery(Query);
}
}
return 0;
}
Вот место , где пытаюсь занести в ListBox :
LB=CreateWindow("Listbox", NULL,
WS_VISIBLE|WS_CHILD| WS_VSCROLL | WS_TABSTOP |WS_BORDER ,
90,140,300,200, hwnd, (HMENU)LISTBOX, 0, NULL);
wsprintf(buf, "%f", DisplayValue);
SendMessage(LB, LB_ADDSTRING, 1, ( LPARAM)buf);
Но на конвертацию значение не реагирует .
Как это можно сделать ? Помогите , пожалуйста .
Заранее спасибо!