Announcement

Collapse
No announcement yet.

Laptop oder PC

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Laptop oder PC

    Hallo zusammen,<br> Wie kann ich feststellen, ob meine Anwendung auf einem PC oder einem Laptop läuft?<br>:-) Jens Schumann

  • #2
    Hallo,

    ich habe das zwar noch niemals ausprobiert, aber eventuell hilft die Win32-API-Funktion <b>GetCurrentHwProfile</b> weiter. In der HW_PROFILE_INFO-Struktur gibt es da ein Feld <i>dwDockInfo</i>, wenn dort der Wert DOCKINFO_DOCKED vorgefunden wird, handelt es sich um einen Desktop ("...<i>The computer is docked. This flag is always set for desktop systems that cannot be undocked.</i>"). Da dieser Kommentar auf für DOCKINFO_UNDOCKED ("<i>The computer is undocked. This flag is always set for desktop systems that cannot be undocked.</i>") gilt, erkennt man einen Desktop eventuell daran, das beide Flags gleichzeitig gesetzt sind

    Comment


    • #3
      Hallo Andreas,<br>vielen Dank für die Antwort. Jetzt habe ich ein weiteres Problem. Wenn ich das Project starte erhalte ich zwei Fehlermeldungen.<br>1. Die Datei project1.exe ist mit fehlenden Export-ADVAPI32.DLL: GetCurrentHwProfile verknüpft.<br>2.C:\programme\...\project1.exe Ein an das System angeschlossenes Gerät funktioniert nicht.<br>Diese Fehlermeldungen habe ich vorher noch nie gesehen. In folgedessen weiss ich auch gar nicht, wie ich darauf reagieren soll.<br>Hättest Du vielleicht noch einen Tip für mich?<br>:-) Jens Schumann<br>
      Source:<br>
      <pre>
      var
      HwP : THWProfileInfo;
      begin
      GetCurrentHwProfile(HwP);
      If (Boolean(HwP.dwDockInfo and DOCKINFO_UNDOCKED)) and
      (Boolean(HwP.dwDockInfo and DOCKINFO_DOCKED)) then
      Label1.Caption:='PC'
      else
      Label1.Caption:='Laptop';
      end;
      </pre&gt

      Comment


      • #4
        <p>Hall Jens,<br>
        <br>
        laut Win-API-Hilfe gilt diese Funktion nur für WinNT.<br>
        Vielleicht liegt daran Deine Fehlermeldung??<br>
        <br>
        Gruß Thomas<br></p&gt

        Comment


        • #5
          Hallo,

          im Platform-SDK steht zur API-Funktion <b>GetCurrentHwProfile</b>
          die folgende Einschränkung:

          Windows NT/2000: Requires Windows NT 4.0 or later. <br>
          Windows 95/98: Requires Windows 95 OSR2 or later.

          Somit steht diese Funktion nur auf der ersten Windows 95-Version nicht zur Verfügung, ab Windows 95 OSR2 sollte es jedoch gehen

          Comment


          • #6
            Hallo Andreas,<br>ich verwende folgende Version:<br>Win95 4.00.950B OSR2/2.1 y2k.<br>
            Zwischenzeitlich habe ich versuche mit der Registry gemacht. Unter HKEY_LOCAL_MACHINE\ENUM\MOINTOR\Default_Monitor\00 01\DeviceDesc habe den Eintrag Laptop-Bildschirm gefunden. Fragt sich nur, ob das bei allen Laptops so ist.<br>:-) Jen

            Comment


            • #7
              Hallo Andreas,<br>ich habe GetCurrentHwProfile auf meiner NT 4.0 SP6 IE 5.0 Maschine ausprobiert. Es klappt. Aber auf meinen Win95 Rechnern mit (IE 4.0 oder IE 5.0) und ORS2 klappt es nicht. Es erscheinen die o.g. Fehlermeldungen. Der oben beschriebene Weg über die Registry klappt auch nicht, da nicht bei allen Laptops der gleiche Eintrag zu finden ist.<br> :-) Jens Schuman

              Comment


              • #8
                Hallo an Alle,<br> das darf ich Euch nicht vorenthalten. So eine Fehlermeldung habe ich bislang wirklich noch nicht gesehen.<br> Um herauszufinden, ob meine Anwendung auf einem Laptop oder einem PC läuft, dachte ich mir, frage doch einfach mit GetSystemPowerStatus den Batterystand ab. Folgende Umgebung habe ich für den ersten Test verwendet: <b><u>NT 4.0 SP6</u> IE 5.0 und D5</b><br> Hier der Quelltext:<br>

                <pre>

                procedure TForm1.Button1Click(Sender: TObject);
                var
                HwP : TSystemPowerStatus;
                Ok : Boolean;
                begin
                Ok:=GetSystemPowerStatus(Hwp);
                RaiseLastWin32Error;
                If Ok then
                begin
                If Boolean(HwP.BatteryFlag and 128) then
                Label1.Caption:='Keine Battery'
                else
                Label1.Caption:='Battery';
                end;
                end;

                </pre>

                Durch RaiseLastWin32Error erhalte ich folgende Fehlermeldung:<br>
                <b>Win32 Fehler. Code 120<br>
                Die Funktion ist nur im NT-Modus gültig</b><br>Klasse- was ?<br>:-) Jens Schuman

                Comment


                • #9
                  Hallo,

                  bei dieser Fehlermeldung musste ich das gleich selbst einmal probieren:
                  <pre>
                  procedure TForm1.Button1Click(Sender: TObject);
                  var
                  HwP : TSystemPowerStatus;
                  begin
                  Win32Check(GetSystemPowerStatus(Hwp));
                  if Boolean(HwP.BatteryFlag and 128) then
                  Label1.Caption:='Keine Battery'
                  else
                  Label1.Caption:='Battery';
                  end;
                  </pre>
                  Ich erhalte auch den Fehlercode <b>120</b> - wobei allerdings die von Win32 angegebene "Übersetzung" dieser Fehlernummer falsch ist. In der Hilfe zum Platform-SDK steht für den Fehlercode 120 in der Tabelle <i>Win32 Error Codes</i> die folgende Übersetzung:

                  120 = This function is not supported on this system. (ERROR_CALL_NOT_IMPLEMENTED)

                  Also scheint diese API-Funktion nur dann im System aufrufbar zu sein, wenn es sich um einen tragbaren PC handelt. Somit ist die Aufgabe erfüllt - wenn eine Exception beim Aufruf kommt, handelt es sich um einen Desktop

                  Comment


                  • #10
                    Hallo Andreas,<br>vielen, vielen Dank für die Antwort.<br>Nachdem ich die Fehlermeldung gesehen hatte, habe ich sogleich alles deprimiert in die Ecke geworfen.<br>Jetzt weiß, dass ich mich von den Windows Fehlermeldungen nicht so leicht in Bockshorn jagen lassen darf.<br> Bislang hatte ich das Problem gelöst, in dem ich in der Resistry nach einem PCMICA Eintrag gesucht habe. Ich denke, nur äußerst wenige Destkops haben sowas. <br>Jens Schuman

                    Comment


                    • #11
                      Hallo,

                      ich habe das noch nicht ausprobiert, aber auf einem Notebook sollte diese API-Funktion fehlerfrei aufrufbar sein. Wenn man den Aufruf in einem TRY..EXCEPT-Block kapselt, kann man so erkennen, ob es sich um einen Desktop-Handelt (in diesem Fall tritt die Exception ein, die im EXCEPT-Block einfach "abgewürgt" wird)

                      Comment


                      • #12
                        Hallo Andreas,<br>ich habe es ausprobiert. Der Aufruf auf einem Desktop führt zu keiner Exception. Das Funktionsergebnis ist lediglich False. Wenn das Funktionsergebnis False ist, gehe ich davon aus, dass es sich um einen Desktop handelt. Auf meinem Laptop gibt GetSystemPowerStatus True zurück.<br>:-) Jens Schuman

                        Comment

                        Working...
                        X