2011-01-31 13 views
7

Duplicar posibles:
How can I tell if a user is using a laptopDetectar si la aplicación se está ejecutando en la computadora portátil

Estoy tratando de averiguar si la aplicación se ejecuta en un ordenador portátil o en un escritorio, cualquier idea sobre cómo lograr esto?

Nota: solo me interesan las API escritas en Delphi y/o C++.

EDITAR: mi plataforma de destino es Windows XP +, incluso Windows 7 solo está bien.

Última edición: gracias a todos por su ayuda, he creado una unidad con métodos auxiliares (en Delphi) se sienten libres de trasladarse a C++ u otros lenguajes y/o ayudar a extender (o la fijación de posibles defectos). La unidad se puede encontrar aquí http://www.delphigeist.com/2011/02/laptop-specific-functions.html

+8

Una buena pregunta, no estoy seguro de que haya una respuesta definitiva, de ahí un comentario, pero ¿podría ser útil la API de batería/potencia? – Lloyd

+3

compruebe si la computadora donde está instalada/ejecutada la aplicación tiene opciones de batería? : P algo así? : D – FeRtoll

+0

Supongo que te refieres a Windows. En OS X puedes leer el tipo de sistema y saber. – Kludge

Respuesta

15

Utilice esta estructura: SYSTEM_POWER_STATUS, y compruebe el valor de ACLineStatus campo.

  • ACLineStatus = 0 => El sistema no está usando la energía AC> Laptop + batería
  • ACLineStatus = 1 => El sistema está utilizando potencia AC => Laptop + AC
  • ACLineStatus = 255 => AC estado de la fuente es desconocida => escritorio

Negación: Trate de experimentar con estos. No estoy afirmando si son confiables. Pero son casi correctos.

-

EDIT:

Uso GetSystemPowerStatus para obtener el valor de la estructura mencionada anteriormente.

Por cierto, también puede experimentar con los otros campos de la estructura; quizás pueda encontrar algún patrón útil, que le brinde una combinación de valores de diferentes campos para ayudarlo a detectar de manera confiable si la aplicación se está ejecutando en la computadora portátil o no.

+1

Hasta ahora, esta es la mejor respuesta en mi opinión, por cierto. ¡¡buen niño!! :-) – ComputerSaysNo

+6

FWIW, conecté un nuevo UPS conectado a USB en mi servidor de Windows 2008 la semana pasada, y detectó automáticamente una "batería", y ahora muestra todas las mismas opciones de batería que una computadora portátil. No creo que una batería sea de ninguna manera un indicador confiable de la computadora portátil. – mj2008

+0

@ mj2008: todos dicen lo mismo que * "No creo que una batería sea de ninguna manera un indicador confiable de la computadora portátil" *, y no estoy en desacuerdo con ellos.Si no hay una forma estándar en que uno pueda hacer este trabajo, solo puede experimentar con diferentes valores de información del sistema, información de la batería y su combinación de diferentes valores, etc. para detectar confiablemente (hasta cierto punto) si la aplicación se está ejecutando en una computadora portátil o no. – Nawaz

4

No creo que haya una manera confiable de detectar esto.

+0

eso es lo que estaba pensando, después de buscar una solución durante un par de horas y no se encontró una solución "real" ... – ComputerSaysNo

+0

@Dorin Puedes probar WMI, pero eso no funciona todo el tiempo, o de hecho muy a menudo en mi experiencia. Puede buscar baterías, pero algunas laptops pueden funcionar sin baterías. Podríamos sugerir un enfoque alternativo si pudieras decirnos cómo vas a usar la información. –

+0

la idea es que la mayoría de las veces quiero estar al menos un 70% seguro de que sé si la aplicación. se ejecuta en una computadora portátil o (computadora de escritorio o servidor) para que pueda actuar de forma adecuada apagando las funciones, etc., nada "muy" específico, pero igual. – ComputerSaysNo

9

No creo que haya una manera estándar de comprobar si la aplicación se ejecuta en una computadora portátil, pero creo que tampoco existe una justificación estándar para saber esto.

El punto es también que una computadora portátil no es tan diferente de una computadora de escritorio: hay computadoras portátiles que nunca se mueven, y supongo que sería posible construir una computadora de escritorio con una UPS integrada (¿se ve como una batería?)

creo que usted debe averiguar si se trata de un ordenador portátil utilizando las características que necesita para comprobar en un ordenador portátil:

  • ¿quieres saber si se trata de un ordenador portátil debido a que su aplicación tiene que comportarse de manera diferente si el la computadora puede moverse? Luego, compruebe si tiene una batería enchufada.

  • ¿Desea saber si es una computadora portátil para ver si se puede modificar el hardware? En este caso, compruebe el modelo de la placa base o pregunte con un cuadro de diálogo.

  • ¿Necesita comprobarlo para saber si se quemará hasta la muerte si se usa demasiado durante demasiado tiempo? Sólo controlar la temperatura ...

+0

@peoro buena respuesta, créanme que hay bastantes razones para comprobar si se está ejecutando en la computadora portátil o no, por ejemplo, la más importante es "evitar la ejecución/funcionalidad de la aplicación en caso de que se ejecute en una computadora portátil", ¿por qué? el rendimiento, la gente olvida que los escritorios son mucho más rápidos (en la mayoría de los casos) que sus computadoras portátiles (consumidores) por lo que tienden a ejecutar muchas aplicaciones al mismo tiempo, ahora el verdadero problema es que no tengo idea de si se está ejecutando en un servidor. de escritorio o en una computadora portátil ... – ComputerSaysNo

+5

@Dorin Duminica: luego verifique el rendimiento de su máquina: verifique la CPU de la máquina o ejecute un pequeño punto de referencia incorporado de unos segundos. De esta forma, podrá ofrecer las mismas características a una computadora portátil completamente nueva y a una computadora de escritorio más vieja que tenga el mismo rendimiento real (y así sucesivamente). – peoro

+1

@Dorin Duminica: ¿Así que decide qué puede hacerse o no en la computadora de un cliente? En función de si se trata de una computadora portátil (que podría ser un i7 quad-core de 2,3 GHz conectado a la red eléctrica y una conexión ethernet GBit) o ​​una computadora de escritorio (que podría ser una PIII de 500 MHz con alimentación deficiente del UPS y 11 MBit de WLAN) ? Digo que el usuario decida de qué es capaz su sistema. – DevSolar

2

El MSDN discute API para poder y dispositivo aplicaciones compatibles con here

También puede comprobar otras cosas como:

  • ¿Es la batería conectada
  • Es trackpad conectado
  • se instala la tarjeta de PC Es
  • Tiene un cierto tipo de CPU (baja potencia, Atom, etc.)
  • Tiene una pantalla única para computadora portátil.
  • portátil hardrive es de 3,5"

Si un número determinado de lo anterior es cierto, entonces se puede asumir portátil.

También puedes, simplemente pedir al usuario en la instalación ....

+0

el usuario puede copiar la aplicación de un sistema a otro sin cualquier problema, a menos que la aplicación. es capaz de detectar el sistema, no hay una forma real de verificar dónde se ejecuta, también podría ejecutarse desde una VM en cualquier momento ... – ComputerSaysNo

3

Aparentemente, el problema oculto es que las computadoras portátiles de la compañía normalmente no tienen suficiente memoria, pero las computadoras de escritorio de la compañía sí. Para resolver este problema específico, compare la memoria utilizada contra la memoria instalada: EnumProcesses() y GetProcessMemoryInfo le dice la primera; GetPhysicallyInstalledSystemMemory() le dice la segunda.

Si están demasiado cerca, puede informar al usuario que hay 73 procesos en ejecución que usan 2,5 GB, pero solo hay 2 GB de RAM. Esta es una razón válida para que su programa no comience.

+0

+1 buen punto, pero no cubrirá todas mis necesidades. – ComputerSaysNo

+0

Si no nos dice esas necesidades, ¿cómo espera que le demos una respuesta útil? – MSalters

Cuestiones relacionadas