Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

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

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

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

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

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

icq: 446843180
skype: phoenix_proger
По умолчанию

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-
Форумчанин
 
Регистрация: 15.11.2010
Сообщений: 138
Репутация: 15
По умолчанию

Пытаюсь сделать простой бар который показывал бы нагрузку выбранных мною параметров. Вот код:
Код:

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
Адрес: Нижний Новгород
Сообщений: 5,582
Репутация: 1780
По умолчанию

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

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

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

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

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

Теперь возникла проблема с таймером - если запускать в процедуре обработки окна так:
Код:

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
Адрес: Нижний Новгород
Сообщений: 5,582
Репутация: 1780
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


23:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru