Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2013, 02:20   #11
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Примерно то, чего я хочу добиться:

Хочется сделать CPU Usage и Memory, как это назвать что бы "правильно" нагуглить?
И что на счёт System? Сделать таймер, а в нём всегда вызывать функции которые считают количество хендлов, процессов, потоков, аптайм и т.д.? И то же самое с оперативной памятью?
В голове начинает вырисовываться каша, не понимаю как и что нужно сделать, и какие функции используются для нахождения необходимых мне данных.
hvz- вне форума Ответить с цитированием
Старый 11.11.2013, 03:57   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1) http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
2) http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
верхняя часть лишь график по тому что вы не выделили, а определить нагрузку проца(а про память выше) не трудно.

рисование на АПИ:
http://programmersforum.ru/showthread.php?t=59503
может поможет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 11.11.2013 в 04:15.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.11.2013, 04:00   #13
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Пытаюсь сделать простой бар который показывал бы нагрузку выбранных мною параметров. Вот код:
Код:
void DrawGraph(HWND hPlace, int percent)
{
	HDC hdc = GetDC(hPlace); // Получаем DC(контекст устройства) для рисования
	HGDIOBJ hpenOld,hbrushOld; 
	HBRUSH hbrush;

	// Рисуем чёрную область
	hbrush = CreateSolidBrush(RGB(0, 0, 0));
	hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
	Rectangle(hdc, 5, 20, 55, 100);
	
	// Рисуем зелёным цветом шкалу, которая показывает загруженность чего то
	hbrush = CreateSolidBrush(RGB(0, 255, 0));
	hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
	Rectangle(hdc, 5, 20, 55, percent);
}

void ShowMonitorInfo(HWND hTab)
{
	HWND hGraphs[3];
	TCHAR *tWndText[] = { TEXT("CPU"),  TEXT("RAM"), TEXT("Page f."), TEXT("Virt m.") };
	int pos[4] = {8, 72, 136, 200};
	for(int i=0; i<=3; i++)
	{
		hGraphs[i] = CreateWindow(TEXT("button"), tWndText[i], WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | BS_GROUPBOX, pos[i], 117, 60, 106, hTab, NULL, GetModuleHandle(NULL), NULL);
		DrawGraph(hGraphs[i], 50);
	}
}
Для теста передаю 50(процентов), а получается вот что(проценты отображаются зелёным):


Где я ошибся? То, что зелёным цветом - явно не 50 процентов, где то 30.
И ещё вопрос - как сделать ежесекундное "обновление" выбранного таба? Прилагаю проект, т.к. не понимаю как это можно реализовать(может бесконечным циклом?).

Последний раз редактировалось hvz-; 18.11.2013 в 04:23.
hvz- вне форума Ответить с цитированием
Старый 18.11.2013, 10:02   #14
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Прочитайте внимательно какие аргументы у Rectangle()
waleri вне форума Ответить с цитированием
Старый 18.11.2013, 16:14   #15
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Прочитайте внимательно какие аргументы у Rectangle()
Прошу прощения, но я перечитал аргументы и ошибки не нашёл. Не могли бы вы указать на ошибку?
hvz- вне форума Ответить с цитированием
Старый 18.11.2013, 16:37   #16
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от hvz- Посмотреть сообщение
Прошу прощения, но я перечитал аргументы и ошибки не нашёл. Не могли бы вы указать на ошибку?
Что, по вашему, описывают последние два аргумента функции Rectangle()?
waleri вне форума Ответить с цитированием
Старый 19.11.2013, 14:59   #17
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Что, по вашему, описывают последние два аргумента функции Rectangle()?
Похоже, что я понял - вверху унас отступ 20 пикселей, а нижний правый угол 100 пикселей, итого высота а нас не 100 а 80 пикселей, я правильно понимаю?
hvz- вне форума Ответить с цитированием
Старый 19.11.2013, 16:56   #18
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от hvz- Посмотреть сообщение
итого высота а нас не 100 а 80 пикселей
Все правильно.
waleri вне форума Ответить с цитированием
Старый 20.11.2013, 00:39   #19
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Теперь возникла проблема с таймером - если запускать в процедуре обработки окна так:
Код:
SetTimer(hWnd, MONITOR_TIMER, 1000, NULL);
Тогда работает обработчик:
Код:
case WM_TIMER:
			switch(wParam)
			{
				case MONITOR_TIMER:
					MessageBox(NULL, TEXT("WORKS"), TEXT("WORKS!"), MB_OK);
					EnumChildWindows(hWnd, EnumChildProc, 0);
					MonTab(hWnd);
					//UpdateWindow((((LPNMHDR)lParam)->hwndFrom));
					break;
			}
			break;
Но вот ведь незадача - рисоваться то всё будет на главном окне, за нашимокном с вкладками!
Что бы рисовалось всё в окне вкладки попробовал вот так:
Код:
SetTimer((((LPNMHDR)lParam)->hwndFrom), MONITOR_TIMER, 1000, NULL);
И мой тот же самый обработчик просто не работает. Т.е. ничего не происходит, даже если в начало обработчика вставить вызов messagebox для проверки.
Т.е. на главное окно таймер хочет работать, а на дочернее нет? Почему? И как в моём случае заставить работать таймер что бы он мне рисовал мою вкладку каждую секунду?
На всякий пожарный, опять прилагаю проект.
hvz- вне форума Ответить с цитированием
Старый 20.11.2013, 11:24   #20
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от hvz- Посмотреть сообщение
Т.е. на главное окно таймер хочет работать, а на дочернее нет?
Таймер работает на то окно, на которое запущен.
Для перерсовки окна используйте InvalidateRect(hWnd, NULL, FALSE) где hWnd - это нужное вам окно.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мониторинг системных ресурсов С++ Serjik-ahaha Общие вопросы C/C++ 1 18.10.2012 11:47
Мониторинг shtep PHP 1 06.02.2012 10:37
Мониторинг ОС Smile08 Безопасность, Шифрование 3 08.11.2010 16:00
Мониторинг удаленного компьютера NBAH1990 Общие вопросы Delphi 4 28.02.2010 08:35
Мониторинг CS bookkc Фриланс 4 09.01.2010 18:17