Форум программистов, компьютерный форум CyberForum.ru

Как в C++ управлять пк - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 15:17     Как в C++ управлять пк #1
Здраствуйте, я начал изучать С++, уже кучи материалов перерил, но немогу понять как физически упровлять пк, например отслеживать температуру цп или изменять скорость куллеров, и прочее. Скиньте пожалуйсто статьи на эту тему или скажите какие небудь книги на эту тему.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2010, 15:17     Как в C++ управлять пк
Посмотрите здесь:

Как управлять мышей с С++? C++
C++ Как управлять веб-камерой с помощью кода.
C++ Как заставить программу управлять программами?
Как управлять мигающим курсором в консоли? C++
C++ Как управлять наследниками через базовый класс

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
23.11.2010, 15:20     Как в C++ управлять пк #2
Win API есть такая штука (под виндой), с ее помощью можно, но имхо, пока рановато за такие задачи браться. Лучше язык подучить (в т.ч. и родной).
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 15:33  [ТС]     Как в C++ управлять пк #3
Родной труднее чем с++ XD
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
23.11.2010, 18:42     Как в C++ управлять пк #4
Работать с аппараутрой можно только через операционную систему. Операционная система тебе предоставляет некоторый интерфейс взаимодействия (API), при помощи которого прикладная программа может системе что-то "сказать" или что-то "спросить". К языку программирования это не имеет никакого отношения
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
23.11.2010, 20:14     Как в C++ управлять пк #5
так вопрос для общего развития ... эта же информация не зависит от операционки, значит должна содержаться вне ее. Как то можно узнать, где она конкретно хранится(там адрес в памяти или тому подобное) ?)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
23.11.2010, 21:00     Как в C++ управлять пк #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от KuKu Посмотреть сообщение
так вопрос для общего развития ... эта же информация не зависит от операционки, значит должна содержаться вне ее. Как то можно узнать, где она конкретно хранится(там адрес в памяти или тому подобное) ?)
Информация хранится в аппаратуре. Там есть термометр, с которого можно снять показания. Есть драйвер под материнскую плату, при помощи которого операционная система "общается" с аппаратурой. Драйвер - это такой же интерфейс между ОС и машиной, каким является API (интерфейс между приложением и ОС).

На пальцах это дело выглядит примерно так. Любое устройство подключается через так называемые порты ввода-вывода, которые при помощи материнской платы отображаются на некие адреса памяти. Т.е. в машине может стоять 1 гиг памяти, но адреса, к примеру, из диапазона 3.7-4 гига (при условии 32-битного режима) используются для портов ввода-вывода (независимо от количества памяти в машине). Эти адреса материнская плата транслирует не на модули памяти, а на шину, через которую втыкаются устройства. Операционная система выполняет "обычное" (или почти обычное, детально не могу сказать) чтение или запись в память по адресу, отображённому на устройство. Это обращение пойдёт в устройство. Например (чисто теоретически), видеокарта может работать таким образом, что если по адресу 0x11223344 записать единичку, то по адресу 0x11223345 будет сформировано значение температуры графического процессора, а если записать двойку, то будет сформировано скорость вращения кулера и т.п. К каждому устройству прилагается драйвер, который в одной стороны "знает", как общаться с устройством, с другой стороны знает, по каким правилам надо общаться с ОС (потому в каждой ОС свои принципы работы с драйверами)

Ну из сказанного можно понять, почему при наличии 4 гигов оперативы, реально видно только 3.5 или 3.2 или 3 (в зависимости от материнской платы). Точно так же можно понять, почему драйвер видеокарты под винду не будет работать под линуксом (хотя казалось бы, машина одна и та же и коды исполняются те же самые). Точно так же программа, работающая с устройством под виндой непосредственно через драйвер (т.е. на низком уровне) не будет работать под линуксом, даже если перекомпилять исходники. именно поэтому пишут интерфейсы ещё более высокого уровня. Например, Open GL. Это набор библиотек, который с одного конца имеет несколько реализаций под различные ОС, с другой стороны имеет интерфейс прикладного уровня, НЕ зависящий от операционной системы.

Так или иначе, между пользовательской программой и аппаратурой всегда имеется цепочка из нескольких интерфейсов начиная драйвером и заканчивая прикладной библиотекой. И всё, что находится между программой и машиной, построено по принципу конструктора: из различных кубиков выстраивается нужная цепочка. Но на практике не все кубики имеются в наличии, хотя теортеически их всегда можно создать (было бы кому этим заняться)
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
23.11.2010, 21:40     Как в C++ управлять пк #7
а средствами с/c++ можно читать(писать) куда то в конкретную ячейку памяти на устройство или через виндоусовский дебаггер или нам операционка не даст ?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
23.11.2010, 21:57     Как в C++ управлять пк #8
Я не специалист в этой области, но напрямую писать в порт ввода-вывода из пользовательского приложения скорее всего нельзя (была бы такая возможность - машину можно было бы убить одним неосторожным движением). Для этого и существует драйвер. Общение с драйвером идёт на уровне типа "запиши в порт такой-то значение такое-то", но при этом это всё накрыто интерфейсом, отрезанным от абсолютных значений адресов. При этом каждое такое обращение драйвер проверяет на корректность и забраковывает недопустимые
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 22:13  [ТС]     Как в C++ управлять пк #9
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
23.11.2010, 22:18     Как в C++ управлять пк #10
Цитата Сообщение от shtopor20 Посмотреть сообщение
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
это много проще, нежели напрямую с оборудованием работать
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
23.11.2010, 22:31     Как в C++ управлять пк #11
Все намного проще.
Видел код на бейсике котрый вот так определял текущую температуру процессора и чипсета
Код
#ADR_REG = $295 ;Это адреса регистров системной платы, с помощью которых можно узнать температуру
#DATA_REG = $29
Procedure Termo(z) ; Эта процедура работает в параллельном потоке
Shared *Inp32_address, *Out32_address

 Repeat ; Начало "безконечного" цикла Repeat ForEver
   CallFunctionFast(*Out32_address, #ADR_REG, $2B) ; Получает текущую температуру процессора
   x=CallFunctionFast(*Inp32_address, #DATA_REG)
   SetGadgetItemText(0,0,StrU(x, #PB_Byte)+" °C",1) ; отображаем её в таблице
   
   CallFunctionFast(*Out32_address, #ADR_REG, $29) ; Получает текущую температуру системной платы
   x=CallFunctionFast(*Inp32_address, #DATA_REG)
   SetGadgetItemText(0,1,StrU(x, #PB_Byte)+" °C",1)  ; отображаем её в таблице
   
   SetGadgetText(3, Str(CpuUsage())+" %" ) ; Получаем и отображаем текущую загрузку процессора
   
  Delay(1000) ; Пауза, равная 1 секунде.
  
 ForEver
EndProcedure
Работает, но не со всеми матерями и процессорами.
Вложения
Тип файла: rar TermoControl.rar (27.8 Кб, 17 просмотров)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
23.11.2010, 23:15     Как в C++ управлять пк #12
Цитата Сообщение от shtopor20 Посмотреть сообщение
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
Основную массу сложных операций производит ОС. От прикладной программы требуется лишь воспользоваться услугами
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 23:18  [ТС]     Как в C++ управлять пк #13
Разве винда отвечает за температуру и распряделение электричества на кулеры?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
23.11.2010, 23:32     Как в C++ управлять пк #14
Цитата Сообщение от shtopor20 Посмотреть сообщение
А в чем разница?
Разница в том, что для прикладной программы не надо писать сотни строк кода для работы с устройством. Интерфейс, который тебе выдаёт операционная система, позволяет практически одинаково работать с любым устройством. Т.е. посмотреть температуру процессора, открыть привод DVD-дисковода или задать настройки для сетевой карты - это практически одно и то же действие: вызов функции API с некоторым набором параметров. Тебе не надо заботиться о том, в какой слот на плате воткнуто устройство, это устройство IDE, PCI или AGP и т.п. - это всё забота ОС.

Цитата Сообщение от shtopor20 Посмотреть сообщение
Разве винда отвечает за температуру и распряделение электричества на кулеры?
За это отвечает устройство (железо). ОС лишь может сделать какие-то настройки, предусмотренные разработчиками устройства (если таковые вообще имеются). На старых процессорах кулер - это всего лишь вентилятор с двумя состояниями: "пропеллер включен" и "пропеллер выключен", причём текущее состояние зависит только от того, включен комп или нет. Устройство не подразумевало, что им можно управлять со стороны ОС, а потому это простая железяка, про которую материнская плата даже не знает. Максимум, что она знает - это то, что в слот воткнута какая-то хрень, потребляющая электричество согласно такому-то стандарту, а что это за хрень - материнская плата не знает
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 23:55  [ТС]     Как в C++ управлять пк #15
А где можно найти информацию о том как через программу управлять всем этим (кулерром дисководом и прочем), просто я привык что железо отдельно программа отдельно, и я тормажу во всем этом сильно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
23.11.2010, 23:59     Как в C++ управлять пк #16
Цитата Сообщение от shtopor20 Посмотреть сообщение
А где можно найти информацию о том как через программу управлять всем этим (кулерром дисководом и прочем), просто я привык что железо отдельно программа отдельно, и я тормажу во всем этом сильно
В посте #2 уже всё об этом сказано

Добавлено через 3 минуты
Под линуксом универсальный системный вызов для работы с устройствами называется ioctl
В случае винды это, судя по всему, DeviceIoControl. Вот про это и ищи
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
24.11.2010, 01:14  [ТС]     Как в C++ управлять пк #17
Вот есть кое что http://netcode.ru/cpp/?artID=3236
Yandex
Объявления
24.11.2010, 01:14     Как в C++ управлять пк
Ответ Создать тему
Опции темы

Текущее время: 20:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru