| Autor |
Beitrag |
TheHuette
      
Beiträge: 81
|
Verfasst: 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 UGrohne: Topic aus VCL (Visual Component Library) verschoben am Mo 18.06.2007 um 10:54
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: 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
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 390
Win XP
Delphi 2007 Prof., XE2, XE5
|
Verfasst: 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 
      
Beiträge: 81
|
Verfasst: 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
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 18.06.07 13:25
Es gibt aber auch PCMCIA-Einschübe für noramle PCs
_________________ Markus Kinzler.
|
|
TheHuette 
      
Beiträge: 81
|
Verfasst: Mo 18.06.07 14:49
mkinzler 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
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: 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
Gruß
Aga
|
|
TheHuette 
      
Beiträge: 81
|
Verfasst: Mo 18.06.07 16:55
Agawain 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
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
|
Verfasst: Mo 18.06.07 23:41
Der String "ACPI Lid" ist in der Registry mehrmals vorhanden, wenn es ein Notebook ist...
|
|
TheHuette 
      
Beiträge: 81
|
Verfasst: Mi 20.06.07 14:55
hathor 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
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: 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
      
Beiträge: 167
Win XP, Win Vista
D3 Prof., D7 Pers., Lazarus
|
Verfasst: 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
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Mi 20.06.07 15:26
|
|
TheHuette 
      
Beiträge: 81
|
Verfasst: Mi 20.06.07 15:34
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 
      
Beiträge: 81
|
Verfasst: Mi 20.06.07 15:41
Das macht meinen vorherigen Post vielleicht überflüssig. Danke! Werd's probieren.
|
|
COMMANDER86
      
Beiträge: 167
Win XP, Win Vista
D3 Prof., D7 Pers., Lazarus
|
Verfasst: Mi 20.06.07 15:41
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 
      
Beiträge: 81
|
Verfasst: 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.
@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
|
Verfasst: Do 21.06.07 09:59
Das File cmbatt.sys sollte eigentlich nur in Notebooks vorhanden sein:
Bitte testen und Ergebnisse posten.
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; |
|
|