Russian Qt Forum
Ноябрь 23, 2024, 02:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Пару вопросов про winAPI  (Прочитано 10268 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Февраль 24, 2013, 03:00 »

Здравствуйте!

Дали задание сделать тестировщик windows

Требования к тестировщику:
  • Процессор: тип процессора, количество процессоров, поколение процессоров
  • Память: загрузка памяти, объем доступной оперативной памяти, объем свободной оперативной памяти, размер файла подкачки, максимальный размер памяти для процессов, свободная память для процессов
  • Видео: разрешение экрана, глубина цвета, частота обновления экрана, кадровая частота, виртуальный рабочий стол, размеры экрана, относительная ширина пикселя устр-ва, относительная высота пикселя устройства
  • Атрибуты диска: тип носителя, файловая система, метка тома, серийный номер тома, доступно памяти для пользователя, всего на диске байт?(в том числе занято и свободно)
  • Клавиатура: тип устр-ва, количество функциональных клавиш
  • Мышь: количество кнопок мыши, наличие ролика прокрутки, время двойного щелчка.
  • Система: операционная система, версия сборки, текущий пользователь, имя компа, системный каталог, каталог виндуса, режим загрузки

Подскажите как определить то что выделил красным Улыбающийся

PS. виртуальный рабочий стол проверял через Qt: QDesktopWidget::isVirtualDesktop(), но не уверен что это правильно
PPS. Также с типом процессора и поколением непонятно, для определения типа использовал GetSystemInfo() и проверял поле dwProcessorType, для поколения  - поле wProcessorLevel, но и в этом не уверен
PPPS. Гугление показало что размер экрана не определить точно
« Последнее редактирование: Февраль 24, 2013, 16:36 от gil9red » Записан

neversleep
Гость
« Ответ #1 : Февраль 24, 2013, 11:16 »

PPS. Также с типом процессора и поколением непонятно, для определения типа использовал GetSystemInfo() и проверял поле dwProcessorType, для поколения  - поле wProcessorLevel, но и в этом не уверен
Вот небольшой пример от мс, в котором так же используется dwProcessorType для определения типа процессора: Getting Hardware Information (Windows)

SYSTEM_INFO structure (Windows)

Цитировать
dwProcessorType

    An obsolete member that is retained for compatibility. Use the wProcessorArchitecture, wProcessorLevel, and wProcessorRevision members to determine the type of processor.
---

PPPS. Гугление показало что размер экрана не определить точно
Код:
HDC dc = GetDC(GetDesktopWindow());
if (dc) {
cout << "Screen size: " << GetDeviceCaps(dc, HORZRES) << "x" << GetDeviceCaps(dc, VERTRES) << endl;
cout << "Refresh rate: " << GetDeviceCaps(dc, VREFRESH) << endl;
cout << "Bits/Pixel: " << GetDeviceCaps(dc, BITSPIXEL) << endl;
ReleaseDC(GetDesktopWindow(), dc);
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Февраль 24, 2013, 11:38 »

Мой код определения типа процессора:
Код:
QString typeProcessor()
{
    SYSTEM_INFO systemInfo;
    GetSystemInfo(&systemInfo);

    QString type;

    switch(systemInfo.dwProcessorType)
    {
    case PROCESSOR_INTEL_386:
        type = "Intel 386";
        break;

    case PROCESSOR_INTEL_486:
        type = "Intel 486";
        break;

    case PROCESSOR_INTEL_PENTIUM:
        type = "Intel Pentium";
        break;

    case PROCESSOR_MIPS_R4000:
        type = "Mips R4000";
        break;

    case PROCESSOR_ALPHA_21064:
        type = "Alpha 21064";
        break;

    case PROCESSOR_INTEL_IA64:
        type = "Intel IA64";
        break;
    }

    return type;
}

neversleep, как вы видите про SYSTEM_INFO и GetSystemInfo я знаю. Просто не уверен что тип проца это именно то что написал...
Тогда что будет поколением процессора - wProcessorArchitecture? Но его я не могу использовать...

Цитировать
Код:
HDC dc = GetDC(GetDesktopWindow());
if (dc) {
cout << "Screen size: " << GetDeviceCaps(dc, HORZRES) << "x" << GetDeviceCaps(dc, VERTRES) << endl;
cout << "Refresh rate: " << GetDeviceCaps(dc, VREFRESH) << endl;
cout << "Bits/Pixel: " << GetDeviceCaps(dc, BITSPIXEL) << endl;
ReleaseDC(GetDesktopWindow(), dc);
}
Тут находится разрешение экрана, частота обновления и глубина цвета, мне же нужно частота кадров Улыбающийся
Записан

Serr500
Гость
« Ответ #3 : Февраль 24, 2013, 11:47 »

EnumDisplaySettings, член dmDisplayFrequency структуры DEVMODE.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Февраль 24, 2013, 12:59 »

Serr500, разве dmDisplayFrequency это не частота обновления? Улыбающийся
Цитировать
dmDisplayFrequency
Specifies the frequency, in hertz (cycles per second), of the display device in a particular mode.
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Февраль 24, 2013, 13:09 »

Что то мне кажется что размер экрана и кадровую частоту не определить Улыбающийся
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Февраль 24, 2013, 13:41 »

Смотрел программу-тестировщик WinAudit, она определяет размеры дисплея
Как через винапи определить/подсчитать эти размеры? Улыбающийся
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Февраль 24, 2013, 14:24 »

Кое что нашел Улыбающийся

Диагональ моника можно определить так:
Код:
int horizontalSize;
int verticalSize;
int diagonal;

HDC dc = GetDC(NULL);

horizontalSize = GetDeviceCaps(dc, HORZSIZE);
verticalSize = GetDeviceCaps(dc, VERTSIZE);

diagonal = ( (sqrt ( pow(horizontalSize, 2) + pow(verticalSize, 2) ) ) / 10) / 2.54;

Записан

Serr500
Гость
« Ответ #8 : Февраль 24, 2013, 15:05 »

Serr500, разве dmDisplayFrequency это не частота обновления? Улыбающийся
Цитировать
dmDisplayFrequency
Specifies the frequency, in hertz (cycles per second), of the display device in a particular mode.
А разве это не одно и то же?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Февраль 24, 2013, 15:50 »

Все, туплю! Ночь, утро и день за программированием не прошел даром Улыбающийся
Да, эти два понятия практически одинаковые, по крайней мере, вики говорит что это так
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #10 : Февраль 24, 2013, 16:33 »

Кое что нашел Улыбающийся

Диагональ моника можно определить так:
Код:
int horizontalSize;
int verticalSize;
int diagonal;

HDC dc = GetDC(NULL);

horizontalSize = GetDeviceCaps(dc, HORZSIZE);
verticalSize = GetDeviceCaps(dc, VERTSIZE);

diagonal = ( (sqrt ( pow(horizontalSize, 2) + pow(verticalSize, 2) ) ) / 10) / 2.54;

Лоханулся я, этот код не совсем правильный - у меня работает (19, 1024*768)
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #11 : Февраль 24, 2013, 16:44 »

Через реестр ведь можно узнать всю интересующую инфу о железе??  Улыбающийся
Записан

kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Февраль 24, 2013, 18:41 »

WMI во все поля!  Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #13 : Февраль 24, 2013, 21:23 »

WMI во все поля!  Улыбающийся

Можно подробнее?)
желательно с кодом))) Смеющийся
Записан

kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #14 : Февраль 24, 2013, 21:32 »

В гугл. Он знает больше чем я.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 22.