Ich versuche herauszufinden, ob die Anwendung auf einem Laptop oder auf einem Desktop läuft, irgendwelche Ideen, wie man das erreicht?
Hinweis: Ich bin nur an APIs interessiert, die in Delphi und / oder C ++ geschrieben sind.
EDIT: Meine Zielplattform ist Windows XP +, auch Windows 7 ist nur OK.
LETZTES BEARBEITEN : Ich danke Ihnen allen für Ihre Hilfe. Ich habe eine Einheit mit Hilfsmethoden erstellt (In Delphi), die Sie gerne in C ++ oder andere Sprachen übersetzen und / oder helfen können Fehler). Die Einheit kann hier Ссылка
gefunden werden Verwenden Sie diese Struktur: SYSTEM_POWER_STATUS
und prüfen Sie der Wert von ACLineStatus
field.
Haftungsausschluss : Versuchen Sie, mit diesen zu experimentieren. Ich behaupte nicht, dass sie zuverlässig sind. Aber sie sind fast korrekt.
-
BEARBEITEN:
Verwenden Sie GetSystemPowerStatus
, um den Wert von oben genannte Struktur.
Übrigens können Sie auch mit den anderen Feldern der Struktur experimentieren; Vielleicht können Sie einige nützliche Muster finden, die Ihnen eine Kombination von Werten verschiedener Felder geben, damit Sie zuverlässig erkennen können, ob die Anwendung auf einem Laptop läuft oder nicht.
Ich glaube nicht, dass es eine Standardmethode gibt, um zu überprüfen, ob die Anwendung auf einem Laptop läuft, aber ich denke, es gibt auch keine Standard-Begründung dafür, dass man das wissen muss.
Der Punkt ist auch, dass sich ein Laptop nicht so sehr von einem Desktop unterscheidet: Es gibt Laptops, die niemals bewegt werden, und ich denke, es wäre möglich, einen Desktop mit einer eingebetteten USV (als Batterie?) zu bauen / p>
Ich denke, Sie sollten herausfinden, ob es ein Laptop ist, der die Funktionen verwendet, die Sie brauchen, um einen Laptop einzuchecken:
Möchten Sie wissen, ob es sich um einen Laptop handelt, da sich Ihre Anwendung anders verhalten muss, wenn der Computer verschoben werden kann? Überprüfen Sie dann, ob eine Batterie eingesteckt ist.
Möchten Sie wissen, ob es ein Laptop ist, um zu sehen, ob Hardware geändert werden kann? In diesem Fall überprüfen Sie das Motherboard-Modell oder fragen Sie mit einem Dialogfeld.
Musst du es überprüfen, um zu wissen, ob es zu lange verbrennt, wenn es zu intensiv benutzt wird? Überwachen Sie einfach die Temperatur ...
Ich glaube nicht, dass es eine zuverlässige Möglichkeit gibt, dies zu erkennen.
Scheinbar ist das versteckte Problem, dass die Laptops der Firma normalerweise nicht genug Speicher haben, aber die Desktops der Firma. Vergleichen Sie den Speicher, der für den installierten Speicher verwendet wird, um dieses spezielle Problem zu beheben: EnumProcesses()
und GetProcessMemoryInfo
sagt Ihnen den ersten; GetPhysicallyInstalledSystemMemory()
sagt dir die Sekunde.
Wenn sie zu nah sind, können Sie den Benutzer darüber informieren, dass 73 Prozesse mit 2,5 GB ausgeführt werden, aber nur 2 GB RAM vorhanden sind. Dies ist ein berechtigter Grund dafür, dass Ihr Programm nicht startet.
In der MSDN wird die API für Anwendungen mit Stromversorgungs- und Gerätefunktionen erläutert hier
Sie könnten auch andere Dinge überprüfen wie:
Wenn eine bestimmte Anzahl der obigen Aussagen zutrifft, können Sie davon ausgehen, dass Sie einen Laptop haben.
Sie können den Benutzer auch einfach bei der Installation fragen ....
Hier finden Sie eine Reihe anderer Antworten und Links, die Sie für diese Frage nützlich finden könnten:
Wie erkennt man, wenn der Laptop läuft? Batterien?
Wie kann ich feststellen, ob ein Benutzer? benutzt einen Laptop
Letzteres diskutiert auch WMI, während die Antwort auf .NET zentriert ist. Sie können WMI aus Delphi verwenden.