![]() |
Laptop oder Desktop Computer ermitteln??
Guten Abend,
kann mir einer einen Ansatz geben, wie ich ermitteln kann, ob es sich um einen Laptop, Desktop PC oder Server handelt? Wäre echt cool. Gruß, Sven |
Re: Laptop oder Desktop Computer ermitteln??
Was macht denn für dich die Differenz zwischen einem Laptop, Desktop PC und Server aus. Ich kann durchaus auf meinem Laptop ein Win2003 OS installieren, und wenn ich zuviel Geld hab, so darf ich auch gern ein Dell PE 2950 als Arbeitsplatzrechner nutzen.
Irgendwelche Kriterien brauchst Du also! |
Re: Laptop oder Desktop Computer ermitteln??
Die Abhängigkeit liegt im lokalen Administrator. Ist aber auch egal.
In VBS kann man das mit Computer Chassis Typ ermitteln. Irgendwie muss das doch auch auf Delphi anwendbar sein ohne den Code von VBS nach Delphi zu wandeln. Gruß, Sven |
Re: Laptop oder Desktop Computer ermitteln??
Zitat:
|
Re: Laptop oder Desktop Computer ermitteln??
Wir haben in der Firma unterschiedliche lokale Administratoren für Laptops und Desktops. Der User an sich hat keine Adminrechte mehr.
Ich brauche die Ermittlung für eine Installation. Ich möchte den in Abhängigkeit des Chassis Typs den lokalen Administrator die folgende Funktion aufrufen lassen "CreateProcessAsLogon". Ich könnte auch abfragen, ob der lokale Administrator existiert aber ich würde es gerne über den Chassis Typ oder wie auch immer ich ermitteln kann, ob Laptop oder Desktop, programmieren. |
Re: Laptop oder Desktop Computer ermitteln??
Genügt nicht einfach das Prüfen auf einen Akku? Wäre für mich das Naheliegenste, oder? Jetzt weiß ich nur nicht, inwieweit eine USV als Akku erkannt wird *g*
Da:
Delphi-Quellcode:
function GetPowerStatus(var HasBattery: Boolean; var LoadStatusString: String;
var LoadstatusPercent: Integer): DWORD; function TForm1.GetPowerStatus(var HasBattery: Boolean; var LoadStatusString: String; var LoadstatusPercent: Integer): DWORD; var SystemPowerStatus: TSystemPowerStatus; Text:string; resourcestring rsLoadStatusUnknown = 'Unbekannter Status'; rsLoadStatusNoBattery = 'Es existiert kein Akku'; rsLoadStatusHigh = 'Hoher Ladezustand'; rsLoadStatusLow = 'Niedriger Ladezustand'; rsLoadStatusCritical = 'Kritischer Ladezustand'; rsLoadStatusLoading = ' Akku wird geladen'; rsLoadSatusUnknownLoading = 'Unbekannter Ladezustand'; begin SetLastError(0); if GetSystemPowerStatus(SystemPowerStatus) then with SystemPowerStatus do begin HasBattery := ACLineStatus = 0; // Ladezustand der Batterie if (BatteryFlag = 255) then LoadStatusString := rsLoadStatusUnknown else if (BatteryFlag and 128 = 128) then LoadStatusString := rsLoadStatusNoBattery else begin case (BatteryFlag and (1 or 2 or 4)) of 1: Text := rsLoadStatusHigh; 2: Text := rsLoadStatusLow; 4: Text := rsLoadStatusCritical; else LoadStatusString := rsLoadSatusUnknownLoading end; if (BatteryFlag and 8 = 8) then LoadStatusString := Text + rsLoadStatusLoading else LoadStatusString:=text+' '+inttostr(LoadstatusPercent)+'% verbleibend'; end; // Ladezustand in Prozent if (BatteryLifePercent <> 255) then LoadstatusPercent := BatteryLifePercent else LoadstatusPercent := -1; end; Result := GetLastError; end; |
Re: Laptop oder Desktop Computer ermitteln??
Da wir über Alternativen reden, gehe ich mal davon aus, dass das mit dem Chassis Typ nicht geht. Oder?
Die Idee mit dem Akku ist auch nicht schlecht. Der Unterschied zwischen Dektop oder Laptop und Server würde ich über das Betriebssystem machen. Also bleibt nur noch der Unterschied zwischen Desktop und Laptop übrig. |
Re: Laptop oder Desktop Computer ermitteln??
@christian.noeding: Wenn der Laptop am Netz ist, wird er Akku nicht erkannt und würde als Desktop PC erkannt. Etwas unpraktisch.
|
Re: Laptop oder Desktop Computer ermitteln??
Hast dus getestet? Bei mir gibts da keine Probleme... es wird sogar entsprechend der entsprechend definierte String "Akku wird geladen..." angezeigt und die Prozentzahl lässt sich prima auslesen...
Na gut, es kann sein, dass es hier akkuspezifisch Probleme geben kann, jedoch funktioniert die gepostete Funktion mit Notebooks von MSI, Fujitsu-Siemens (Amilo-M) und Acer. Habe ich getestet. Bis denn, Christian ;) Edit:
Delphi-Quellcode:
- OK, das stimmt - eben überlesen. Dann musst du eben das Statusbyte auslesen und entsprechend auswerten.
HasBattery := ACLineStatus = 0
|
Re: Laptop oder Desktop Computer ermitteln??
VB Script
Delphi-Quellcode:
im netz gefunden
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colChassis = objWMIService.ExecQuery _ ("Select * from Win32_SystemEnclosure") For Each objChassis in colChassis For i = Lbound(objChassis.ChassisTypes) to Ubound(objChassis.ChassisTypes) Wscript.Echo objChassis.ChassisTypes(i) Next Next |
Re: Laptop oder Desktop Computer ermitteln??
Danke, dass hatte ich auch schon. Wollte aber nicht umwandeln, sondern habe gedacht, dass es auch mit Standardmitteln von Delphi gehen muss.
Habe es jetzt mit dem Akku programmiert. Vielleicht verändere ich den Code später einmal. Vielen Dank für die ganzen Ideen und Anregungen. Gruß, Sven |
Re: Laptop oder Desktop Computer ermitteln??
Und wenn jemand seinen Akku herausnimmt, wird der Rechner als Desktop-PC erkannt. Auch nicht so toll, oder?
|
Re: Laptop oder Desktop Computer ermitteln??
ja hast recht aber es reicht erstmal für meine Bedürfnisse.
Danke für den Tip. |
Re: Laptop oder Desktop Computer ermitteln??
Habe mal versucht den VBS Code umzusetzen aber es gelingt mir nicht so wirklich, da ich in diesem Gebiet absoluter Newbie bin.
Mein Code bis jetzt:
Delphi-Quellcode:
Hilfe?
...
procedure TForm1.Button1Click(Sender: TObject); var oCPAppletMgr, objWMIService, colChassis, objChassis : OleVariant; strComputer : string; i : Integer; begin strComputer := '.'; oCPAppletMgr := CreateOleObject('CPApplet.CPAppletMgr'); objWMIService := GetObject('winmgmts:{impersonationLevel=impersonate}!\\'+ strComputer + '\root\cimv2'); // hier kommt ne Fehlermeldung: Inkompatible Typen: HGDIOBJ und String // Rest konnte ich noch nicht testen, da ich erst die Fehler oben beseitigen muss colChassis := objWMIService.ExecQuery('Select * from Win32_SystemEnclosure'); for i:=0 to colChassis.Count do begin objChassis := colChassis.Item[i]; ShowMessage(objChassis.ChassisTypes); end; end; ... |
Re: Laptop oder Desktop Computer ermitteln??
Hi,
man könne ja auch in der DP nach ![]() ![]() |
Re: Laptop oder Desktop Computer ermitteln??
öhm vergebt ihr für eure pc's im geschäft keine bestimmten namen???
also bei uns hat eine workstation das kürzel 'ws' im pc namen.... ein notebook hat 'nb' drinne und ein server ein 'sv' da sich diese immer an der gleichen stelle befinden wäre das bei uns ganz einfach zu erkennen... aber um auf denn lösungsweg mit dem akku zurück zukommen... hast du dir schon mal die jedis angeschaut??? da gibts eine TJvComputerInfoEx Komponente... in der kann mann auch denn akku prüfen... vielleicht erkennt man darüber auch einen akku selbst wenn er am netzstrom hängt... |
Re: Laptop oder Desktop Computer ermitteln??
Die Namesgebung ist historisch gewachsen und ist halt für PCs und Laptops gleich.
Bin seit einiger Zeit auf der Suche nach der Umwandlung des VBS Codes aber kein Erfolg. Ich bräuchte eine komplette Codeumwandlung. Ich weiß, dass es eher nicht der Fall ist, dass man das macht. Meine Lösung ist mit Lukie's Unit. Funktioniert wunderbar. Danke nochmal. Mal sehen ob wir den VBS Code noch nach Delphi umgewandelt bekommen. Ansonsten vielen Dank für eure Hilfe. Gruß, Sven |
Re: Laptop oder Desktop Computer ermitteln??
Das
![]() Wenn du mich dann gefunden hast, dann könnte ich dir z.B. dieses vorschlagen: :angel: > z.B. ![]()
Delphi-Quellcode:
Uses ..., WMI;
Var WMIResults: TWMIInfo; ChassisTypes: Integer; If WMIGetInfo('.', 'root\CIMV2', '', '', 'Select ChassisTypes from Win32_SystemEnclosure', WMIResults) Then ChassisTypes := StrToInt(WMIRead(WMIResults, 0, 'ChassisTypes')); |
Re: Laptop oder Desktop Computer ermitteln??
Danke, hat wunderbar geklappt. Habe den Artikel irgendwie übersehen.
Schönen Abend noch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz