2010-05-14 14 views
9

Necesito una forma para que mi aplicación .Net Winform detecte si mi aplicación se abre en una computadora portátil o en una estación de trabajo.¿Cómo puedo saber si un usuario está usando una computadora portátil?

He mirado Environment y SystemInformation pero fue en vano. ¿WMI haría el truco?

Gracias por la dirección ....


lo solicitado tengo una aplicación que utiliza la replicación de mezcla para permitir a nuestros usuarios que trabajan en hogares Miembros. Algunos que usan el programa nunca entran en el campo y, como tales, solo tienen torres. Esta es una aplicación ÚNICA de WORK para que nuestros sistemas estén controlados de alguna manera. Como en, no hay UPS en computadoras de escritorio y CPU No Laptop tampoco.

He configurado mi DAL para poder cambiar, basado en una configuración, entre el SQL local y el servidor SQL central. Me gustaría poder establecer esto automáticamente en función de su sistema.

Si una computadora portátil, entonces deberían estar apuntando localmente si es una torre, centralmente.

¿Le sirve de ayuda? Deliberadamente lo dejé antes para no desordenar las respuestas. Mis disculpas por mis disculpas por lograr lo opuesto.

+7

forma remota activar su webcam, tomar una foto de su ojo, a continuación, utilizar una de esas utilidades impresionante mejora de la imagen (como se ve en esos programas de televisión todo el tiempo, porque estoy seguro de que realmente existen, ¡están en la televisión!) para detectar el tipo de computadora a partir de la imagen reflejada en su pupila. Por supuesto, tienes un increíble software de detección de imágenes que lo hará automáticamente, ¿no? – Stewbob

+2

¿Qué es exactamente lo que quiere saber y por qué quiere saberlo? Si la computadora portátil tuviera ocho CPU y 32 GB de RAM, ¿querría tratarla como una computadora portátil? Si una estación de trabajo funciona con baterías, ¿le gustaría tratarla como una estación de trabajo? –

+1

Como han señalado otras personas, esta es una pregunta engañosamente difícil de responder. Tal vez sería útil si compartieras más sobre lo que estás _realmente_ tratando de hacer. ¿Qué va a hacer su aplicación depende del tipo de computadora utilizada? –

Respuesta

13

Este es un problema realmente difícil de resolver debido a los casos extremos involucrados. Todavía no sé qué tan preciso debe ser para su aplicación, pero esta es una forma confiable de averiguar si el usuario está en una laptop esterotípica.

Win32_Battery

Es posible que desee echar un vistazo a EstimatedRunTime.

EstimatedRunTime

Data type: uint32 
Access type: Read-only 

Estimate in minutes of the time to battery charge depletion under the 

presentes condiciones de carga, si la energía de la red está apagado, o se pierde y permanece apagado, o un ordenador portátil se desconecta de una fuente potencia. Esta propiedad es heredada de CIM_Battery.

Es posible que también desee comprobar:

Win32_PortableBattery

Además, aquí es una interesante discusión de un problema similar y tratar con UPS.

http://forum.bigfix.com/viewtopic.php?pid=19908

Específicamente:

"Microsoft ACPI-Compliant Control Method Battery" 

Además, como se señaló en los comentarios, que tendrá que tener en cuenta a los usuarios en un ordenador portátil conectado a la pared con la batería desconectada.

+0

¿Puede una computadora de escritorio utilizar una batería (que no sea UPS)? – JYelton

+1

@JYelton: No he oído hablar de uno; pero UPS causa un montón de falsos positivos. Win 7 mismo está confundido por ellos. Por ejemplo, si tiene un UPS conectado a una computadora de escritorio, 7 cree que está funcionando con energía de la batería y, por lo tanto, no le dará los números de índice de experiencia de Windows. – NotMe

+2

Sí, he estado pensando en eso. Los casos límite aquí podrían dar lugar a algunos falsos positivos/negativos. Por ejemplo, ¿qué pasa si el usuario está utilizando una computadora portátil que está conectada a la pared con la batería desconectada? ¿Lo llamas una computadora portátil porque el chico de Fry's dijo que sí? ¿O lo cuentas como un escritorio porque así es como se usa actualmente? Estas son decisiones de diseño que deberán decidirse antes de que se publique la aplicación. –

3

Obtener el tipo de procesador utilizando (see this question):

System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")

Si puede determinar que es un procesador móvil, usted tiene su respuesta.

(Vale la pena señalar que WMI le dará una mejor información, como se explica en la pregunta he vinculado.)

+7

Aunque es posible obtener un procesador de escritorio en una computadora portátil. – Thomas

+6

... Y algunas personas usan procesadores de laptops en computadoras de escritorio para un menor consumo de energía. =) – Arkku

+2

Quizás deba explicarse la definición de computadora portátil y de escritorio, en otras palabras, ¿el OP desea saber el tipo de procesador o el estilo del chasis? Si es este último, ¡no hay forma de saberlo! – JYelton

4

http://msdn.microsoft.com/en-us/library/Aa394474

luego ver

ChassisTypes

Value Meaning 
1 Other 
2 Unknown 
3 Desktop 
4 Low Profile Desktop 
5 Pizza Box 
6 Mini Tower 
7 Tower 
8 Portable 
9 Laptop 
10 Notebook 
11 Hand Held 
12 Docking Station 
13 All in One 
14 Sub Notebook 
15 Space-Saving 
16 Lunch Box 
17 Main System Chassis 
18 Expansion Chassis 
19 SubChassis 
20 Bus Expansion Chassis 
21 Peripheral Chassis 
22 Storage Chassis 
+0

No sabía que esto existía. Dudo que sea útil. ¿Cómo se poblarían estos datos? Construí cientos de PC de escritorio y nunca configuré ningún tipo de variable de tipo chasis. – JYelton

+0

Estoy seguro de que para los escritorios sería más raro también poblarlo ... ¿sin embargo, para computadoras portátiles? ya que tienden a ser OEM, creo que se establecerán correctamente. (quizás) –

+1

Aah, Pizza Box. Solía ​​tener uno de esos factores de forma. Dudo que este valor sea a menudo exacto o útil. – Broam

0

¿Quizás pueda consultar información sobre la batería?

Tome un vistazo a this

1

Sobre la base de su información actualizada Tengo un par de recomendaciones.

  1. lo convierten en una opción configurable. Ya sea durante la instalación o la primera ejecución, pregúnteles qué son. Esto va a ser mucho más preciso que adivinar.

  2. Si ya tiene la duplicación de mezcla en su lugar ... ¿Por qué no tratar a todos como usuarios desconectados/remotos?

+0

** 1 - ** ES una opción configurable que puedo cambiar a voluntad. El problema es que NO se puede confiar en nuestros usuarios para alternar esto en consecuencia. ** 2 - ** Porque parece una carga indirecta sin sentido replicar en una torre que NUNCA puede estar en el campo. ¿Por qué tener la complejidad adicional y la sobrecarga? –

+0

"¿Por qué tener complejidad extra y OH?" Porque es lo correcto: se supone que GUESSING basado en el hardware es incorrecto y de todos modos tendrás el problema original. Basar una decisión sobre el tipo de hardware realmente no resuelve tu problema, al menos no como yo lo entiendo. – Tim

1

me han puesto a prueba el siguiente archivo por lotes con éxito, pero sólo en unos pocos ordenadores:

@echo off 
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\ACPI" /s | find "DeviceDesc" | find "ACPI Lid" > nul 
if errorlevel 1 (
    echo This computer IS NOT a laptop ^(no ^"ACPI Lid^" device found in Registry^) 
) else (
    echo This computer IS a laptop ^(^"ACPI Lid^" device found in Registry^) 
) 
echo. & pause 
Cuestiones relacionadas