Autor Beitrag
TheHuette
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81



BeitragVerfasst: Mo 18.06.07 10:00 
Hi!
Ich suche eine Möglichkeit eindeutig herausfinden zu können, ob es sich beim ausführenden PC um ein Notebook oder einen Desktop-PC/Workstation handelt.
Ich habe auf die Jedi-Komponente TJvComputerInfoEx und ihre "Batterie-Eigenschaften" gehofft, aber weil ich gemerkt habe, dass es darüber nicht klappt, möchte ich mich erstmal kurz erkundigen, ob das hier jemand schon weiß.

Evtl. geht's doch über TJvComputerInfoEx...

Oder finde ich es irgendwo in der Registry?

Oder eine andere Komponente?


Cheers,

Hütte


Moderiert von user profile iconUGrohne: Topic aus VCL (Visual Component Library) verschoben am Mo 18.06.2007 um 10:54
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 18.06.07 10:53 
100%ig wirst Du es wahrscheinlich nie sagen können, aber Du kannst es mit einer bestimmten Wahrscheinlichkeit prüfen. Ob sich das allerdings lohnt, ist fraglich. Daher: Wozu brauchst Du das?

Du müsstest die Hardware im Rechner überprüfen und je mehr Hardware drinsteckt, die normalerweise nur für Notebooks verwendet wird, desto höher ist die Wahrscheinlichkeit, dass es sich um ein Notebook handelt.
Beispiel dafür wären: Pentium M-Prozessoren, Synaptics Touchpads, Akkus. mobile Grafikchips, usw usf.

Probleme werden Dir dann Notebooks mit Desktop-Hardware machen, also die Teile mit 4-5kg und lärmendem Lüfter *g*.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 18.06.07 10:54 
Da ein laptop ein normaler Rechner ist, wird das nicht so ohne weiteres möglich sein. Du kannst nur nach Indizien suchen, welche aber nicht eindeutig sein können. Warum brauchst du das?

_________________
Markus Kinzler.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 18.06.07 11:36 
Vorschlag:

Auf Lidswitch (SYS_BUTTON_LID) prüfen - nur Notebooks haben den...

SYS_BUTTON_POWER 0x00000001 // Power toggle key
SYS_BUTTON_SLEEP 0x00000002 // Sleep key
SYS_BUTTON_LID 0x00000004
SYS_BUTTON_WAKE 0x80000000 // Wake key could be any key
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mo 18.06.07 12:22 
Ein solches Programm macht in der Tat kaum Sinn.
Ich habe mir kürzlich einen neuen Desktop-PC gekauft, der fast alles bot, was auch mein Notebook-PC bietet. Also bitteschön, wo soll denn da eine Grenze geschaffen werden.

Naja, man könnte natürlich einfach eine Benutzerabfrage machen oder einen Eintrag in eine INI-Datei und die abfragen. So würde ich es lösen, wenn ich es denn müsste.

_________________
Es gibt keine Probleme - nur Lösungen!
TheHuette Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81



BeitragVerfasst: Mo 18.06.07 13:18 
Danke soweit!

Ich finde es auch etwas strange, das zu überprüfen, aber in einem Programm, das ein Kollege programmiert, soll die Abfrage rein. Es hat mit lokalen Lizenzen zu tun.

Ich befürchte auch, dass die Grenzen schwammig sind, aber hathors Vorschlag hört sich ja nicht schlecht an.
Habe auch gelesen, dass man sich gut nach PCMCIA (Treiber etc) richten kann.

techsupt.winbatch.co...+Detect~a~Laptop.txt

Ich werd's mal probieren. Halte aber eigentlich auch einen INI-Eintrag oder so für sinnvoll...
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 18.06.07 13:25 
Es gibt aber auch PCMCIA-Einschübe für noramle PCs

_________________
Markus Kinzler.
TheHuette Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81



BeitragVerfasst: Mo 18.06.07 14:49 
user profile iconmkinzler hat folgendes geschrieben:
Es gibt aber auch PCMCIA-Einschübe für noramle PCs

Das ist wahrscheinlich bei fast allen Merkmalen das Problem, glaube ich. Es sei denn die LID-Switch-Sache bringt's.

Es ist keine lebenswichtige Überprüfung. Nur ein kleines Feature. Ich werd der LID Sache nachgehen und testen.
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mo 18.06.07 16:49 
Hi

wenn Dein Kollege damit eine zweite Installation lediglich auf einem Laptop erlauben will und darüberhinaus geht nix mehr, wäre ich als Käufer glaub ich etwas sauer, was meinste, wie oft ich schon die Ide neu installieren mußte.
Platte kaputt, Prozessor defekt usw.

Und dann jedesmal neuen Registrierungsschlüssel anfordern :x

Gruß

Aga
TheHuette Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81



BeitragVerfasst: Mo 18.06.07 16:55 
user profile iconAgawain hat folgendes geschrieben:
Hi

wenn Dein Kollege damit eine zweite Installation lediglich auf einem Laptop erlauben will und darüberhinaus geht nix mehr, wäre ich als Käufer glaub ich etwas sauer, was meinste, wie oft ich schon die Ide neu installieren mußte.
Platte kaputt, Prozessor defekt usw.

Und dann jedesmal neuen Registrierungsschlüssel anfordern :x

Gruß

Aga


Über den Hintergrund der Funktion braucht ihr euch nicht den Kopf zu zerbrechen ;) . Sowas wie oben können wir unseren Kunden nicht zumuten. Es geht nur darum, dass auf Notebooks eine Anwendung von uns zu 90%-Wahrscheinlichkeit mit einer lokalen und somit nicht-Netzwerk-Lizenz arbeitet und ein INI-Eintrag gemacht werden soll, der das Abrufen der Lizenz beschleunigt.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 18.06.07 23:41 
Der String "ACPI Lid" ist in der Registry mehrmals vorhanden, wenn es ein Notebook ist...
TheHuette Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81



BeitragVerfasst: Mi 20.06.07 14:55 
user profile iconhathor hat folgendes geschrieben:
Der String "ACPI Lid" ist in der Registry mehrmals vorhanden, wenn es ein Notebook ist...


Meinst du vielleicht den String "ACPI-Deckel" bzw. enstpricht er dem Eintrag? Den konnte ich bisher auf allen Notebooks und auf keinem Desktop-PC finden.
Das ist der Wert für DriverDesc in
"HKLM\System\ControlSet001\Control\Class\{4D36E97D-E325-11CE-BFC1-08002BE10318}\0010".
Da der Schlüssel aber nicht immer gleich heisst (Nummer des letzten "Sub-Schlüssels" variert - hier: 0010), kann ich mich daran nur schwer orientieren.
Andere Sprachen und Betriebssysteme sind dabei natürlich auch zu beachten.

Das scheint ja ein Treiber zu sein, der eine Funktion beim Zuklappen des Notebooks startet (Sleep, Shut Down...). Ob ich irgendwie anders überprüfen kann, ob es die Funktion bzw. den Treiber gibt?
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mi 20.06.07 15:10 
Hi was hältste denn von GetSystemPowerStatus ?

blog.noop.se/2006/09...s+In+The+System.aspx

Gruß

Aga

//hier das ganze auch in Delphi

www.dsdt.info/tipps/?id=629
COMMANDER86
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 167

Win XP, Win Vista
D3 Prof., D7 Pers., Lazarus
BeitragVerfasst: Mi 20.06.07 15:23 
Kleiner (vermutlich mittlerweile unwesentlicher) Zusatz. Mein Notebook hat keine PCMCIA-Ports mehr. Dafür 'nen ganzen Batzen an USB. Eine Unterscheidung auf diesem Wege würde also auch keine Sicherheit geben. UBS-Ports haben neue Rechner auch zahlreich...

Ob das über den Akku funktioniert, kann ich nicht sagen... nimmt man den Akku raus und betreibt die Kiste nur via Netzteil, wird der Akku ja nirgends mehr angezeigt.

Vielleicht gibt es eine Möglichkeit einen Tastendruck auf "FN" abzufangen. Das Dingen kenn' ich am Rechner nun nicht, wobei es auch nicht jeden Tag benutzt wird. ^^

_________________
Streichen Sie bitte sämtlichen Sarkasmus aus vorhergehender Nachricht. Dann wissen Sie, was ich sagen möchte. Meine Lösungen sind die vermutlich Umständlichsten, aber sie funktionieren (bei mir). ;)
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mi 20.06.07 15:26 
Zu diesem Problem

dieser Link

www.elists.org/piper...00-March/003409.html

Gruß

Aga
TheHuette Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81



BeitragVerfasst: Mi 20.06.07 15:34 
user profile iconAgawain hat folgendes geschrieben:
Hi was hältste denn von GetSystemPowerStatus ?

blog.noop.se/2006/09...s+In+The+System.aspx

Gruß

Aga

//hier das ganze auch in Delphi

www.dsdt.info/tipps/?id=629


Ich denke das eignet sich nicht, weil es dem JvComputerInfo-Problem entspricht, das ich, merke ich gerade, noch nicht erläutert habe. Problem dabei ist: Falls jemand mal den Akku entnommen hat, kann man nicht mehr zwischen NB und Desktop-PC unterscheiden. Ansonsten wäre die Akku-Sache super, aber ich denke die von dir genannten Funktionen werden das gleiche Problem haben. Werd's aber noch mal testen...
TheHuette Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81



BeitragVerfasst: Mi 20.06.07 15:41 
user profile iconAgawain hat folgendes geschrieben:
Zu diesem Problem

dieser Link

www.elists.org/piper...00-March/003409.html

Gruß

Aga


Das macht meinen vorherigen Post vielleicht überflüssig. Danke! Werd's probieren.
COMMANDER86
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 167

Win XP, Win Vista
D3 Prof., D7 Pers., Lazarus
BeitragVerfasst: Mi 20.06.07 15:41 
user profile iconAgawain hat folgendes geschrieben:
Zu diesem Problem

dieser Link

www.elists.org/piper...00-March/003409.html

Gruß

Aga


Da steht's drin. Nimmt man den Akku raus, funktioniert es nicht (zwingend).

//EDIT: Dar war jemand schon schneller. ;)

_________________
Streichen Sie bitte sämtlichen Sarkasmus aus vorhergehender Nachricht. Dann wissen Sie, was ich sagen möchte. Meine Lösungen sind die vermutlich Umständlichsten, aber sie funktionieren (bei mir). ;)
TheHuette Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81



BeitragVerfasst: Mi 20.06.07 17:02 
aus www.elists.org/piper...00-March/003409.html zu GetSystemPowerStatus:

Zitat:
I tried this:

if GetSystemPowerStatus(ps) then
if ps.BatteryFlag = 128 then
MessageBox(Application.Handle,'Desktop','PC type',MB_OK)
else
MessageBox(Application.Handle,'Laptop','PC type',MB_OK)
else
MessageBox(Application.Handle,'Desktop','PC type',MB_OK);

and tried it on a few laptops and desktops around the office. It worked
perfectly well, until I tried it in a laptop running on mains power with the
battery removed. In this case the call succeeds, and returns 128 in
the ps.BatteryFlag :-(


Das kann ich noch nachvollziehen...

Zitat:
I tested the function under NT 4.0 SP6. I got the same errormessage. But the
message also show's the WIN-Errorcode 120. When you look into the Win 32 SDK
you can read that 120 means ERROR_CALL_NOT_IMPLEMENTED. So I claim that the
errormessagetext is wrong.

Therefore I assume, when the GetSystemPowerStatus result is false my app is
running on a desktop. When the result is True (on my laptop the result ist
true !!!) my app is running on a laptop.


Das ist entweder Trash oder eine NT 4.0 Eigenart. Unter WinXP bringt das nichts.

:roll: :?: :roll:

@hathor

Zitat:
Auf Lidswitch (SYS_BUTTON_LID) prüfen - nur Notebooks haben den...

SYS_BUTTON_POWER 0x00000001 // Power toggle key
SYS_BUTTON_SLEEP 0x00000002 // Sleep key
SYS_BUTTON_LID 0x00000004
SYS_BUTTON_WAKE 0x80000000 // Wake key could be any key


Wie kann ich auf SYS_BUTTON_LID mit Delphi zugreifen? Konnte da noch nichts zu finden.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 21.06.07 09:59 
Das File cmbatt.sys sollte eigentlich nur in Notebooks vorhanden sein:

Bitte testen und Ergebnisse posten.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function SystemDirectory: string;
var
  SysDir: PChar;
begin
  SysDir := StrAlloc(MAX_PATH);
  GetSystemDirectory(SysDir, MAX_PATH);
  Result := string(SysDir);
  if Result[Length(Result)] <> '\' then
    Result := Result + '\';
  StrDispose(SysDir);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Label1.Caption:= 'Looking for '+ SystemDirectory + 'Drivers\cmbatt.sys...';
if FileExists(SystemDirectory + 'Drivers\cmbatt.sys'then
Label2.caption:= 'RESULT: This is a Notebook-Computer'
else Label2.caption:= 'RESULT: This is a Desktop-PC';
end;