Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Laptop oder Desktop Computer ermitteln?? (https://www.delphipraxis.net/87058-laptop-oder-desktop-computer-ermitteln.html)

Piro 22. Feb 2007 17:50


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

Jelly 22. Feb 2007 17:57

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!

Piro 22. Feb 2007 18:12

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

Luckie 22. Feb 2007 18:32

Re: Laptop oder Desktop Computer ermitteln??
 
Zitat:

Zitat von daywalker299
Die Abhängigkeit liegt im lokalen Administrator. Ist aber auch egal.

Und was hat das mit dem Rechnertyp zu tun?

Piro 22. Feb 2007 18:45

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.

christian.noeding 22. Feb 2007 18:46

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;

Piro 22. Feb 2007 18:49

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.

Piro 22. Feb 2007 19:02

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.

christian.noeding 22. Feb 2007 19:14

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:
HasBattery := ACLineStatus = 0
- OK, das stimmt - eben überlesen. Dann musst du eben das Statusbyte auslesen und entsprechend auswerten.

Gehstock 24. Feb 2007 16:53

Re: Laptop oder Desktop Computer ermitteln??
 
VB Script

Delphi-Quellcode:
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
im netz gefunden

Piro 25. Feb 2007 18:45

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

Chewie 25. Feb 2007 19:09

Re: Laptop oder Desktop Computer ermitteln??
 
Und wenn jemand seinen Akku herausnimmt, wird der Rechner als Desktop-PC erkannt. Auch nicht so toll, oder?

Piro 25. Feb 2007 22:00

Re: Laptop oder Desktop Computer ermitteln??
 
ja hast recht aber es reicht erstmal für meine Bedürfnisse.

Danke für den Tip.

Piro 25. Feb 2007 22:05

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:
...
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;
...
Hilfe?

Alter Mann 26. Feb 2007 14:23

Re: Laptop oder Desktop Computer ermitteln??
 
Hi,

man könne ja auch in der DP nach WMI suchen, oder hier mal nach lesen: Windows Management Instrumentation

Andidreas 26. Feb 2007 14:43

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...

Piro 26. Feb 2007 21:08

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

himitsu 27. Feb 2007 19:37

Re: Laptop oder Desktop Computer ermitteln??
 
Das Hier im Forum suchenWMI ist bestimmt 'nen guter Vorschlag.

Wenn du mich dann gefunden hast, dann könnte ich dir z.B. dieses vorschlagen: :angel:
> z.B. WMI (Windows Management Instrumentation) + Demo
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'));

Piro 28. Feb 2007 20:39

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