Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auslesen der Mainboard Seriennummer (https://www.delphipraxis.net/135396-auslesen-der-mainboard-seriennummer.html)

kumar89 10. Jun 2009 08:28


Auslesen der Mainboard Seriennummer
 
Sers Delphi-Programmierer,

Bräuchte Tipps wie man die Seriennummer vom Mainboard auslesen kann? Am besten aus der Registry.


Danke schon mal im voraus

jaenicke 10. Jun 2009 08:34

Re: Auslesen der Mainboard Seriennummer
 
Warum über die Registry? Willst du es dir unbedingt schwer machen oder was hat das für einen Grund? :gruebel:

Gehen sollte es sehr einfach mit WMI und der Klasse Win32_BaseBoard.

kumar89 10. Jun 2009 08:50

Re: Auslesen der Mainboard Seriennummer
 
ich hab leider keine ahnung von wmi :-( würds gern machen über wmi

jaenicke 10. Jun 2009 08:57

Re: Auslesen der Mainboard Seriennummer
 
Ich hab dir den Link zum kompletten Code zum Auslesen von WMI-Informationen doch gepostet... :wall:

kumar89 10. Jun 2009 09:20

Re: Auslesen der Mainboard Seriennummer
 
habs mal ausprobiert auch mit dem vorgegebenen quellcode. funzt bei mir gar net :-(

Satty67 10. Jun 2009 09:23

Re: Auslesen der Mainboard Seriennummer
 
Was funzt net... ein bisschen mehr Details bei der Fehlerbschreibung wäre hilfreich, da es ja grunsätzlich funzt und daher nicht so einfach reproduzierbar ist.

jaenicke 10. Jun 2009 09:24

Re: Auslesen der Mainboard Seriennummer
 
Was heißt das? Fehlermeldung? Wie hast du es aufgerufen? Welches Betriebssystem, Delphiversion? :glaskugel:

kumar89 10. Jun 2009 09:27

Re: Auslesen der Mainboard Seriennummer
 
das er nicht die variablen und uses erkennt von dem quellcode. ich benutze delphi 2007 auf einem xp rechner.

Danke schon mal

Satty67 10. Jun 2009 09:29

Re: Auslesen der Mainboard Seriennummer
 
Da musst du die Typebibliothek "Micrososft WMI Scripting" importieren.

Delphi Menü -> Projekt -> Typebibliothek importieren

Danach hast Du in der Komponentenliste im Bereich ActiveX zusätzliche Komponenten. Glaube "SWbemLocator" reicht, das einfach auf's Formular ziehen.

jaenicke 10. Jun 2009 09:37

Re: Auslesen der Mainboard Seriennummer
 
Wenn du mal einen (!) Beitrag über dem verlinkten schaust, dann siehst du, dass ich da die Unit gepostet habe... :wall:

Satty67 10. Jun 2009 09:44

Re: Auslesen der Mainboard Seriennummer
 
Ja, aber da müsste er wohl im Forum dort eingeloggt sein. Wenn man zum ersten mal sowas macht ist das schon nicht so 100% offensichtlich, wie man vorgeht.

jaenicke 10. Jun 2009 09:47

Re: Auslesen der Mainboard Seriennummer
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nein, angezeigt wird der Anhang trotzdem, dass er vorhanden ist, und was es ist hatte ich ja geschrieben. Das mit dem Einloggen ist aber ein Argument, ich hänge es mal hier auch an.

kumar89 10. Jun 2009 09:49

Re: Auslesen der Mainboard Seriennummer
 
Zitat:

Zitat von Satty67
Da musst du die Typebibliothek "Micrososft WMI Scripting" importieren.

Delphi Menü -> Projekt -> Typebibliothek importieren

Danach hast Du in der Komponentenliste im Bereich ActiveX zusätzliche Komponenten. Glaube "SWbemLocator" reicht, das einfach auf's Formular ziehen.

Den Unterpunkt "Typebibliothek importieren" find ich nicht unter Projekt ....

Ich steh echt auf dem Schlauch gäbs keine andere Möglichkeit die Seriennummer auszulesen :-(

jaenicke 10. Jun 2009 09:50

Re: Auslesen der Mainboard Seriennummer
 
Zitat:

Zitat von kumar89
Den Unterpunkt "Typebibliothek importieren" find ich nicht unter Projekt ....

Das heißt in neueren Delphiversionen etwas anders (Komponente importieren... --> ActiveX) und in Turbo Delphi geht es gar nicht. Benutze einfach den Dateianhang. ;-)

// EDIT:
Ich weiß nicht, ob das in der Registry überhaupt erreichbar ist, hast du denn mal nach dem Wert gesucht?
Sinnvoller wäre sicher WMI, allerdings tragen viele Treiber die Seriennummer gar nicht erst ein oder die ist gar nicht gesetzt... Die Produktnummer ist oft nur zu sehen.

kumar89 10. Jun 2009 10:07

Re: Auslesen der Mainboard Seriennummer
 
[quote="jaenicke"]
Zitat:

Zitat von kumar89
Den Unterpunkt "Typebibliothek importieren" find ich nicht unter Projekt ....

Das heißt in neueren Delphiversionen etwas anders (Komponente importieren... --> ActiveX) und in Turbo Delphi geht es gar nicht. Benutze einfach den Dateianhang. ;-)

ok darunter sollte ich "SWbemLocator" mir runter ziehen blos wird bei mir die komponente nicht angezeigt under Active X oder ich hab des blos jetzt falsch verstanden :pale:

jaenicke 10. Jun 2009 10:08

Re: Auslesen der Mainboard Seriennummer
 
Nimm doch einfach den Anhang... Ich habe die Unit doch extra auch hier gepostet, damit du dich nicht drüben im DF anmelden musst...

Satty67 10. Jun 2009 10:15

Re: Auslesen der Mainboard Seriennummer
 
Zitat:

Zitat von kumar89
ok darunter sollte ich "SWbemLocator" mir runter ziehen blos wird bei mir die komponente nicht angezeigt under Active X oder ich hab des blos jetzt falsch verstanden

Also für die aktuelle Aufgabe kannst Du jaenickes gepostete Bibliothek nehmen. Falls Du grundsätzlich das selber importieren willst (weil man die erfahrung immer brauchen kann), suche in der Liste dort "Microsoft WMI Scripting 1.x".

Wenn Du den Eintrag gefunden hast, dann entweder Unit erstellen (das ist dann die gleiche, wie die von jaenicke) oder Komponente installieren. Dann gibt es eine Komponente im ActiveX Tab/Bereich.

Hab' hier nur D5, wie es bei BDS2007 auussieht weis ich noch nicht auswendig und das ist Zuhause installiert.

kumar89 10. Jun 2009 10:52

Re: Auslesen der Mainboard Seriennummer
 
Zitat:

Also für die aktuelle Aufgabe kannst Du jaenickes gepostete Bibliothek nehmen. Falls Du grundsätzlich das selber importieren willst (weil man die erfahrung immer brauchen kann), suche in der Liste dort "Microsoft WMI Scripting 1.x".
ich find Microsoft Scripting in einem Formular aber nicht in einem VCL-Formular. Ich brauch des nämlich in einem VCL-Formular.

jaenicke 10. Jun 2009 10:56

Re: Auslesen der Mainboard Seriennummer
 
Was hat das mit VCL-Formular oder nicht zu tun? Du benutzt die Unit und schreibst die in die uses und fertig. :roll:

kumar89 15. Jun 2009 14:10

Re: Auslesen der Mainboard Seriennummer
 
ok ich bin weiter gekommen

http://msdn.microsoft.com/en-us/library/aa394072.aspx


was muss ich raus nehmen (siehe link) um die seriennummer des mainboards zu bekommen.


Delphi-Quellcode:
function QueryWMI(const QueryClass, QueryProperty: String; AStrings: TStrings): Boolean;
  var
    Locator:    ISWbemLocator;
    Services:   ISWbemServices;
    ObjectSet:  ISWbemObjectSet;
    WMIObject:  ISWbemObject;
    WMIProperty: ISWbemProperty;
    Enum:       IEnumVariant;
    ObjValue:   Cardinal;
    TempObj:    OleVariant;
begin
  Result := FALSE;
  try
    Locator := CoSWbemLocator.Create;
    try
      Services := Locator.ConnectServer('', 'root\cimv2', '', '', '','', 0, NIL);
      if Assigned(Services) then begin
        Services.Security_.ImpersonationLevel := 3;
        ObjectSet := Services.ExecQuery('SELECT * FROM '+QueryClass,
                                        'WQL',
                                         wbemFlagForwardOnly or wbemFlagReturnWhenComplete,
                                         NIL);
        Enum := (ObjectSet._NewEnum) as IEnumVariant;
        while (Enum.Next(1, TempObj, ObjValue) = S_OK) do begin
          try
            WMIObject := IUnknown(TempObj) as ISWBemObject;
          except
            WMIObject := NIL;
          end;
          TempObj := Unassigned; // Interface in TempObj freigeben
          if Assigned(WMIObject) then begin
            WMIProperty := WMIObject.Properties_.Item(QueryProperty, 0);
            if (NOT VarIsNull(WMIProperty.Get_Value)) then
              AStrings.Add(Trim(WMIProperty.Get_Value));
          end;
        end;
        Result := TRUE;
      end;
    finally
      Services := NIL;
      Locator := NIL;
    end;
  except // Exceptions fangen (Wenn WMI nicht verfügbar/installiert ist, gibt´s eine!)
    Result := FALSE;
  end;
end;

procedure TfrmSystemInfo.Button1Click(Sender: TObject);
begin
     QueryWMI('Win32_VideoController','Caption',Systemauswertung.Lines);
end;

Mit freundlichen Grüßen


Kumar89

jaenicke 15. Jun 2009 20:09

Re: Auslesen der Mainboard Seriennummer
 
Naja, willst du Win32_VideoController und dessen Eigenschaft Caption abfragen? Nein? Sondern die verlinkte Klasse?
Und warum schreibst du das nicht hin?

kumar89 16. Jun 2009 08:51

Re: Auslesen der Mainboard Seriennummer
 
habs schon raus passt schon jetzt zu was weiterem nämlich möchte ich das es sofort im Edit erscheint wenn ich es mit:

Delphi-Quellcode:
Edit8.text := QueryWMI('Win32_BaseBoard','SerialNumber');
kommt folgende Fehlermeldung: Nicht genügend wirkliche Parameter.

Was mache ich da falsch?

Danke schon mal im voraus ;)

jaenicke 16. Jun 2009 08:53

Re: Auslesen der Mainboard Seriennummer
 
Du hast den dritten Parameter, in den das Ergebnis soll, ja auch weggelassen statt nur die abzufragenden Werte zu ändern. Zudem: Wie soll ein Booleanwert (der den Erfolg der Abfrage angibt) in Edit.Text gehen?

Nebenbei: Ich habe keinen PC gefunden, bei dem die Seriennnummer des Mainboards gesetzt gewesen wäre, bei mir ist die überall leer oder mit einem Platzhalter gefüllt...

kumar89 16. Jun 2009 09:44

Re: Auslesen der Mainboard Seriennummer
 
Zitat:

Zitat von jaenicke
Du hast den dritten Parameter, in den das Ergebnis soll, ja auch weggelassen statt nur die abzufragenden Werte zu ändern. Zudem: Wie soll ein Booleanwert (der den Erfolg der Abfrage angibt) in Edit.Text gehen?

Nebenbei: Ich habe keinen PC gefunden, bei dem die Seriennnummer des Mainboards gesetzt gewesen wäre, bei mir ist die überall leer oder mit einem Platzhalter gefüllt...


könntest mir weiter helfen da ich es mal anders probiert hab so wie dus meinst aber klappt auch net so wirklich

jaenicke 16. Jun 2009 09:47

Re: Auslesen der Mainboard Seriennummer
 
Delphi-Quellcode:
procedure ...
var
  ResultList: TStringList;
begin
  ResultList := TStringList.Create;
  try
    if QueryWMI('Win32_BaseBoard', 'SerialNumber', ResultList) then
      edtResultDisplay.Text := ResultList.Text
    else
      edtResultDisplay.Text := 'Fehler beim Auslesen';
  finally
    ResultList.Free;
  end;
end;

kumar89 16. Jun 2009 12:24

Re: Auslesen der Mainboard Seriennummer
 
Danke hat geklappt ;)

DP-Maintenance 17. Jun 2009 10:40

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Multimedia" nach "Sonstige Fragen zu Delphi" verschoben.
Auch die falsche Sparte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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