2011-01-31 3 views
7

Можно создать дубликат:
How can I tell if a user is using a laptopОбнаружить, если приложение работает на ноутбуке

Я пытаюсь выяснить, если приложение работает на ноутбуке или на рабочем столе, любые идеи о том, как это сделать?

Примечание: меня интересует только API, написанный на Delphi и/или C++.

EDIT: моя целевая платформа - Windows XP +, даже Windows 7 - это нормально.

ПОСЛЕДНИЙ EDIT: спасибо всем за вашу помощь, я создал блок с вспомогательными методами (в Дельфах) чувствовать себя свободно переводить на C++ или других языков и/или помочь расширению (или фиксации возможных недостатков). Блока можно найти здесь http://www.delphigeist.com/2011/02/laptop-specific-functions.html

+8

Хороший вопрос, я не уверен, что есть окончательный ответ, следовательно, комментарий, но вы можете найти полезный API батареи/мощности? – Lloyd

+3

Проверьте, есть ли на компьютере, где установлено приложение/приложение, параметры батареи? : P что-то вроде этого? : D – FeRtoll

+0

Предполагаю, вы имеете в виду Windows. В OS X вы можете прочитать тип системы и узнать. – Kludge

ответ

15

Используйте эту структуру: SYSTEM_POWER_STATUS и проверить значение ACLineStatus поля.

  • ACLineStatus = 0 => Система не использует энергию переменного тока> Ноутбук + батарея
  • ACLineStatus = 1 => Система использует энергию переменного тока => Ноутбук + AC
  • ACLineStatus = 255 => AC статус питания неизвестен => Рабочий стол

Отказ от ответственности: Попробуйте поэкспериментировать с ними. Я не утверждаю, что они надежны. Но они почти правильно.

-

EDIT:

Используйте GetSystemPowerStatus, чтобы получить значение указанной выше структуры.

Кстати, вы также можете поэкспериментировать с другими полями структуры; возможно, вы можете найти какой-то полезный шаблон, дающий вам некоторую комбинацию значений разных полей, чтобы помочь вам надежно определить, работает ли приложение на ноутбуке или нет.

+1

До сих пор это лучший ответ, на мой взгляд, кстати. хороший парень !! :-) – ComputerSaysNo

+6

FWIW, я подключил новый USB-подключенный ИБП к моему серверу Windows 2008 на прошлой неделе, и он автоматически обнаружил «батарею» и теперь показывает все те же параметры батареи, что и ноутбук. Я не думаю, что батарея в любом случае является надежным индикатором ноутбука. – mj2008

+0

@ mj2008: все говорят то же самое, что * «Я не думаю, что батарея в любом случае является надежным индикатором ноутбука» *, и я не согласен с ними.Если нет стандартного способа выполнения этой задачи, то можно экспериментировать с различными значениями системной информации, информации о батарее и их комбинацией разных значений и т. Д., Чтобы надежно обнаружить (в некоторой степени), если приложение работает на ноутбуке или не. – Nawaz

4

Я не верю, что есть надежный способ обнаружить это.

+0

это то, о чем я думал, после поиска решения в течение нескольких часов и никакого «реального» решения не найдено ... – ComputerSaysNo

+0

@Dorin Вы можете попробовать WMI, но это не работает все время или действительно очень часто в моем опыте. Вы можете искать батареи, но некоторые ноутбуки могут работать без батарей. Мы могли бы предложить альтернативный подход, если бы вы смогли рассказать нам, как вы собираетесь использовать эту информацию. –

+0

Идея в том, что большую часть времени я хочу быть как минимум на 70% + уверен, что знаю, если приложение. работает на ноутбуке или (на рабочем столе или на сервере), чтобы я мог действовать, отключив функции и т. д. ... ничего «очень» конкретного, но все же. – ComputerSaysNo

9

Я не думаю, что есть стандартный способ проверить, работает ли приложение на ноутбуке, но я думаю, что также нет стандартного обоснования необходимости знать это.

Дело также в том, что ноутбук не так сильно отличается от рабочего стола: есть ноутбуки, которые никогда не перемещаются, и я думаю, можно будет создать рабочий стол со встроенным ИБП (рассматривается как аккумулятор?).

Я думаю, вы должны выяснить, если это ноутбук с помощью функции, необходимые для проверки в ноутбуке:

  • ли вы хотите знать, если это ноутбук, потому что ваше приложение должно вести себя по-другому, если компьютер может быть перемещен? Затем проверьте, нет ли у него аккумулятора.

  • Хотите узнать, является ли это ноутбуком, чтобы узнать, можно ли изменить оборудование? В этом случае проверьте модель материнской платы или спросите с помощью диалогового окна.

  • Вам нужно проверить его, чтобы узнать, будет ли он гореть до смерти, если он слишком интенсивно используется слишком долго? Просто следить за температурой ...

+0

@peoro хороший ответ, поверьте мне, есть немало причин, чтобы проверить, работает ли он на ноутбуке или нет, например, самое важное - «избежать выполнения/функциональности приложения на случай, если оно работает на ноутбуке», причина? производительность, люди забывают, что настольные компьютеры быстрее (в большинстве случаев), чем их ноутбуки (потребительские), поэтому они, как правило, запускают сразу множество приложений, теперь реальная проблема заключается в том, что я не знаю, работает ли она на сервере, на рабочем столе или на ноутбуке ... – ComputerSaysNo

+5

@Dorin Duminica: тогда проверьте производительность своей машины: проверьте процессор процессора или запустите крошечный встроенный тест за несколько секунд. Таким образом, вы сможете использовать те же функции для нового ноутбука и старого рабочего стола, которые имеют одинаковую производительность (и т. Д.). – peoro

+1

@ Dorin Duminica: Итак, вы решаете, что может или не может быть сделано на компьютере клиента? Основываясь на том, является ли это ноутбуком (который может представлять собой четырехъядерный i7 с частотой 2,3 ГГц, подключенный к сети электропитания и сетевым подключением GBit) или рабочим столом (который может быть 500 МГц PIII, работающим на слабой мощности ИБП и 11 Мбит WLAN) ? Я говорю, пусть пользователь решит, на что способна его система. – DevSolar

2

MSDN от обсуждает API для электроинструментов и устройств Aware приложений here

Вы также можете проверить другие вещи, как:

  • ли батарея подключена
  • ли трек коврик подключен
  • Установлен PC Card Is
  • Имеет определенный тип ЦП (малая мощность, Атом и т. Д.)
  • Имеет экран, уникальный для ноутбука.
  • ноутбук Hardrive 3,5"

Если определенное число выше верно, то можно предположить, ноутбук.

Вы также можете просто спросить у пользователя при установке ....

+0

пользователь может копировать приложение из одной системы в другую без любой вопрос, поэтому, если приложение. способна обнаруживать систему, нет реального способа проверки, где она выполняется, она может также быть запущена с виртуальной машины в любое время ... – ComputerSaysNo

3

По-видимому, скрытая проблема заключается в том, что на ноутбуках обычно недостаточно памяти, но для настольных компьютеров компании. Чтобы решить эту конкретную проблему, сравните используемую память с установленной памятью: EnumProcesses() и GetProcessMemoryInfo сообщают вам об этом: GetPhysicallyInstalledSystemMemory() сообщает вам второй номер.

Если они слишком близки, вы можете сообщить пользователю, что существует 73 запущенных процесса с использованием 2,5 ГБ, но присутствует только 2 ГБ оперативной памяти. Это действительная причина, по которой ваша программа не запускается.

+0

+1 хорошая точка, но она не охватит все мои потребности. – ComputerSaysNo

+0

Если вы не говорите нам об этих потребностях, как вы ожидаете, что мы дадим вам полезный ответ?! – MSalters