Dupliqué possible: strong>
Comment puis-je dire si un utilisateur utilise un ordinateur portable p> blockQuote>J'essaie de savoir si l'application est en cours d'exécution sur un ordinateur portable ou sur un bureau, toutes les idées sur la manière de y parvenir? P>
Remarque: Je ne suis intéressé que dans l'API écrit dans Delphi et / ou C ++. P>
EDIT: Ma plate-forme cible est Windows XP +, même Windows 7 uniquement est OK. P>
dernier édition forte>: Merci à tous pour votre aide, j'ai créé une unité avec des méthodes d'assistance (à Delphi), n'hésitez pas à traduire en C ++ ou à d'autres langues et / ou d'aider à s'étendre (ou à la fixation possible. défauts). L'unité peut être trouvée ici http://www.delphigiste.com/ 2011/02 / ordinateur portable-spécifique-fonctions.html p>
6 Réponses :
Voici un tas d'autres réponses et des liens que vous pourriez trouver utiles pour cette question: p>
Comment détecter lorsque l'ordinateur portable s'exécute sur Batteries? P>
Comment puis-je dire si un utilisateur utilise un ordinateur portable p>
Ce dernier discute également de WMI, tandis que la réponse est centrée sur .NET, vous pouvez utiliser WMI de Delphi. P>
Je ne crois pas qu'il existe un moyen fiable de la détecter. P>
C'est ce que je pensais aussi, après avoir recherché une solution pendant quelques heures et aucune solution «réelle» trouvée ...
@Dorin, vous pouvez essayer WMI, mais cela ne fonctionne pas tout le temps, voire souvent dans mon expérience. Vous pouvez rechercher des piles, mais certains ordinateurs portables peuvent fonctionner sans piles. Nous pourrions peut-être suggérer une approche alternative si vous pouviez nous dire comment vous allez utiliser les informations.
L'idée est que la plupart des temps où je veux être d'au moins 70% + sûr que je sais si une application. est en cours d'exécution sur ordinateur portable ou (bureau ou serveur) afin que je puisse agir de manière propremente en tournant les fonctions éteignées, ainsi de suite ... Rien "très" spécifique, mais toujours.
Je ne pense pas qu'il y a une façon standard de vérifier si la demande s'exécute sur un ordinateur portable, mais je pense qu'il n'y a pas non plus de justification standard pour avoir besoin de le savoir. P>
Le point est également qu'un ordinateur portable n'est pas très différent d'un bureau: il y a des ordinateurs portables qui ne sont jamais déplacés et je suppose qu'il serait possible de construire un bureau avec un ups intégré (vu comme une batterie?) < / p>
Je pense que vous devriez savoir s'il s'agit d'un ordinateur portable à l'aide des fonctionnalités dont vous avez besoin pour enregistrer un ordinateur portable: p>
Voulez-vous savoir s'il s'agit d'un ordinateur portable, car votre application doit se comporter différemment si l'ordinateur peut être déplacé? Ensuite, vérifiez s'il a une batterie branchée. P> li>
Voulez-vous savoir s'il s'agit d'un ordinateur portable afin de voir si le matériel peut être modifié? Dans ce cas, vérifiez le modèle de la carte mère ou demandez avec une boîte de dialogue. P> li>
Avez-vous besoin de vérifier pour savoir s'il brûlera à mort s'il est utilisé trop intensément depuis trop longtemps? Il suffit de surveiller la température ... p> li> ul>
@peoro Bonne réponse, croyez-moi, il y a plusieurs raisons de vérifier si cela fonctionne sur ordinateur portable ou non, par exemple, le plus important est "en évitant l'exécution de l'application / la fonctionnalité au cas où il est dirigé sur un ordinateur portable", raison? Performance, les gens oublient que les ordinateurs de bureau sont bien plus rapides (dans la plupart des cas) que leurs ordinateurs portables (consommateurs), ils ont donc tendance à courir beaucoup d'applications à la fois, le problème réel est maintenant que je n'ai aucune idée si elle fonctionne sur un serveur, Desktop ou sur un ordinateur portable ...
@Dorin Duminica: Vérifiez ensuite vos performances de la machine: vérifiez la CPU de la machine ou exécutez un minuscule référence incorporé de quelques secondes. De cette façon, vous pourrez donner les mêmes fonctionnalités à un tout nouvel ordinateur portable et un bureau plus ancien qui ont la même performance réelle (etc.).
@Dorin Dinumica: Vous décidez donc de savoir ce que peut être fait ou non sur l'ordinateur d'un client? Sur la base de la question de savoir s'il s'agit d'un ordinateur portable (ce qui pourrait être un quad-noyau de 2,3 GHz i7 connecté au réseau POWER et une connexion Ethernet GBIT) ou un bureau (qui pourrait être un PII de 500 MHz en cours d'exécution sur faible puissance d'onduleur et une WLAN de 11 MBIT) ? Je dis que l'utilisateur décidera de ce que son système est capable.
@Devsolar Oui, c'est à peu près ce que je vais faire, les ordinateurs de bureau sont tous des bœurs à deux cœurs à 2,8 Ghz + avec des LCD Full HD, 2GB + RAM, etc. Mon inquiétude est avec la gestion qui utilise des ordinateurs portables qui prennent plus de 2 minutes pour commencer (Trop d'applications. Rouler en arrière-plan ...) En tout cas, la question est assez claire si je ne me trompe pas ...
@Dorin Duminica: Je serais vraiment énervé si j'avais une application qui décide de réduire la fonctionnalité, car elle fonctionne sur un ordinateur portable. Maintenant, vous ne voulez pas pisser de la gestion, n'est-ce pas?
@Le_fox: Peut-être qu'ils sont une gestion de cas spéciale qui ne vous dérange pas ... Quoi qu'il en soit, je peux voir cela comme une tâche spécifique pour un ensemble spécifique de matériel dans une entreprise spécifique. Pourquoi devrait-on s'inquiéter?
S'il s'agit d'une configuration spéciale d'une société, vous avez simplement toutes les ordinateurs portables définir une variable d'environnement à une valeur définie. Problème résolu.
@Le_fox, ils ne savent pas vraiment ce qui est bon pour eux, c'est donc à moi de décider de la fonctionnalité que je veux autoriser à ce sujet, par exemple une des options qu'ils ont pour récupérer toutes les données de la base de données ou un certain nombre d'enregistrements. , Maintenant, nous ne voudrions pas que nous voulions nous limiter ou au moins leur donner un avertissement sur ce qu'ils vont faire et si elles ont choisi de le faire, ça me va bien, mais je veux m'assurer que je prends quelques précautions .
Utilisez cette structure: Disclaimer Strong>: Essayez d'expérimenter avec ceux-ci. Je ne prétends pas si elles sont fiables. Mais ils sont presque em> correct. P>
- p>
EDIT: P>
Utilisez Au fait, vous pouvez également expérimenter avec les autres champs de la structure; Peut-être que vous pouvez trouver un modèle utile, vous offrant une combinaison de valeurs de différents champs pour vous aider à détecter de manière fiable si l'application est en cours d'exécution sur ordinateur portable ou non. P> system_power_status < / Code> et vérifiez la valeur de acllinestatus code>. p>
getSystemPowerstatus code> pour obtenir la valeur de la structure mentionnée ci-dessus. P>
Jusqu'à présent, c'est la meilleure réponse à mon avis, BTW. Beau enfant !! :-)
FWIW, j'ai branché une nouvelle USB connectée dans mon serveur Windows 2008 la semaine dernière, et il a détecté automatiquement une "batterie" et affiche maintenant toutes les mêmes options de batterie qu'un ordinateur portable. Je ne pense pas qu'une batterie est en quelque sorte un indicateur fiable de l'ordinateur portable.
@ MJ2008: Tout le monde dit la même chose que "Je ne pense pas qu'une batterie est en aucune manière un indicateur fiable de l'ordinateur portable" i> et je ne suis pas en désaccord avec eux. S'il n'y a pas de manière standard, on peut effectuer ce travail, on ne peut que expérimenter uniquement des valeurs différentes des informations système, des informations de la batterie et de leur combinaison de valeurs différentes, etc. pour détecter de manière fiable (dans une certaine mesure) si l'application est en cours d'exécution sur ordinateur portable ou ne pas.
Merci collez-vous pour vous concentrer sur la question plutôt que de remettre en question la convivialité.
Selon msdn.microsoft.com/en-us /Library/aa373232(v=Vs.85).aspx "Aucune batterie" ne doit être batteuse == 128
Le MSDN discute des API pour les applications de puissance et de périphérique ici p>
Vous pouvez également vérifier d'autres choses comme: p>
Si un certain nombre de ce qui précède est vrai, vous pouvez assumer un ordinateur portable. P>
Vous pouvez également demander à l'utilisateur à l'installation .... p>
L'utilisateur peut copier l'application d'un système à un autre sans aucun problème, à moins que l'application. Est capable de détecter le système, il n'y a pas de réel moyen de vérifier où est-il couru, il pourrait aussi bien être couru d'un VM à tout moment ...
Apparemment, le problème caché est que les ordinateurs portables de la société n'ont généralement pas assez de mémoire, mais les ordinateurs de bureau de la société le font. Pour résoudre ce problème spécifique, comparez la mémoire utilisée contre la mémoire installée: S'ils sont trop proches, vous pouvez informer l'utilisateur qu'il y a 73 processus en cours d'exécution en utilisant 2,5 Go, mais seulement 2 Go de RAM est présent. Ceci est une raison valable de votre programme de ne pas commencer. P> énumprocesses () code> et getProcessmemoryinfo code> vous dit le premier; getPhysiquementinstaldsystemmemory () code> vous dit la seconde. p>
+1 Bon point, mais cela ne couvrira pas tous mes besoins.
Si vous ne nous dites pas ces besoins, comment vous attendez-vous à nous donner une réponse utilisable ?!
Bonne question, je ne suis pas sûr qu'il y a une réponse définitive, d'où un commentaire, mais vous pourriez trouver la batterie / l'API de puissance utile?
Vérifiez si l'ordinateur où l'application est installé / exécuté a des options de batterie? : P Quelque chose comme ça? :RÉ
Je suppose que vous voulez dire dans Windows. Dans OS X, vous pouvez lire le type de système et savoir.
@Tall j'ai modifié la question, désolé je n'ai pas spécifié la plateformen (fatigué). @Lloyd @fertoll bonnes idées, dois vérifier cela.
Les dialogues me font frissonner .. "Ne me fais pas penser" :)
@Snold Nope, qui ne fonctionnera pas, voir, la plupart des temps des clients s'attendent à des solutions de la boîte pour les problèmes, vous ne pouvez pas simplement les ennuyer avec des messages sauf absolument nécessaire.
@Dorin Duminica, je suis heureux d'entendre ça! :RÉ
Notez que de nombreux systèmes UPS connectés via un port USB ou série se manifestent à Windows en tant que «batterie», les juts comme un ordinateur portable avec une batterie.
Pourquoi voudriez-vous le savoir?
La possibilité de dialogue est la plus fiable.
@Jeen Pluimers: Solution simple: lire les niveaux de batterie, exécutez une boucle pour les secondes XXX consommant 100% de processeur et faites quelque chose avec le GPU. Après cela comparer les niveaux de batterie ...: P
Merci pour la bibliothèque, je l'utilise dans l'un de mes projets :)
@Kaitnieks Je suis content que vous fassiez, espérons-le, vous pouvez l'étendre et peut-être commenter les changements afin que je puisse le mettre à jour?