Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Versionsnummer des Grafiktreibers ermitteln (https://www.delphipraxis.net/175080-versionsnummer-des-grafiktreibers-ermitteln.html)

S.Langhammer 29. Mai 2013 13:55

Versionsnummer des Grafiktreibers ermitteln
 
Grüße!
Ich bin noch relativ unerfahren mit Delphi (würde mich als Noob bezeichnen).
Nun sitz ich vor der Aufgabe, die Versionsnummer oder das Treiberdatum der Grafikkarte zu ermitteln. Erstmal davon ausgegangen, dass nur eine Grafikkarte verbaut ist.

An die Informationen der GraKa selber komm ich über die Registry schon ran, nur seh ich da nichts, was den Treiber direkt betreffen würde.

Weiß zufällig jemand, wie ich an die Versionsnummer oder das Treiberdatum rankomme?

DeddyH 29. Mai 2013 14:17

AW: Versionsnummer des Grafiktreibers ermitteln
 
Hallo und Willkommen in der DP :dp:,

Du könntest es mittels WMI versuchen (ich habe hier den WMI Delphi Code Creator, URL siehe Kommentar, verwendet):
Delphi-Quellcode:
//-----------------------------------------------------------------------------------------------------
//     This code was generated by the Wmi Delphi Code Creator (WDCC) Version 1.7.7.1
//     http://code.google.com/p/wmi-delphi-code-creator/
//     Blog http://theroadtodelphi.wordpress.com/wmi-delphi-code-creator/
//     Author Rodrigo Ruz V. (RRUZ) Copyright (C) 2011-2012 
//----------------------------------------------------------------------------------------------------- 
//
//     LIABILITY DISCLAIMER
//     THIS GENERATED CODE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED.
//     YOU USE IT AT YOUR OWN RISK. THE AUTHOR NOT WILL BE LIABLE FOR DATA LOSS,
//     DAMAGES AND LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS CODE.
//
//----------------------------------------------------------------------------------------------------
program GetWMI_Info;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;
 

   
// Die Klasse "Win32_VideoController" stellt die Funktionen und Verwaltung des Videocontrollers in einem Win32-Computersystem dar.
// Beispiel: Videoadapterhersteller, Chipversion, Bildschirmauflösung und Anzahl der Farben.

procedure GetWin32_VideoControllerInfo;
const
  WbemUser           ='';
  WbemPassword       ='';
  WbemComputer       ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService  : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject  : OLEVariant;
  oEnum        : IEnumvariant;
  iValue       : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_VideoController','WQL',wbemFlagForwardOnly);
  oEnum        := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('DriverDate      %s',[String(FWbemObject.DriverDate)]));// Array of Datetime
    Writeln(Format('DriverVersion   %s',[String(FWbemObject.DriverVersion)]));// String
      
    Writeln('');
    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      GetWin32_VideoControllerInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;    
end.

S.Langhammer 29. Mai 2013 15:35

AW: Versionsnummer des Grafiktreibers ermitteln
 
Erstmal danke DaddyH.

Ich werd mir deinen Code durchlesen, durchkommentieren und anpassen, was ich brauche. So lern ich am besten.
Ich hab mich viel zu lang mit Lisp rumgeschlagen und mein Delphi-Wissen versteckt sich mittlerweile ein wenig. ;3

DeddyH 29. Mai 2013 15:39

AW: Versionsnummer des Grafiktreibers ermitteln
 
Das ist gar nicht mein Code ;) : http://theroadtodelphi.wordpress.com...-code-creator/

S.Langhammer 29. Mai 2013 15:46

AW: Versionsnummer des Grafiktreibers ermitteln
 
Zumindest hast du's mir zugeschickt und sicher auch irgendwo auf generieren gedrückt.

Der Tag, an dem Programme vollkommen selbstständig nicht vorgefertigte Situationen analysieren und Probleme lösen, ist der Tag an dem ich mich Gegen die Matrix, die Zylonen oder für den Butlers-Djihad bewaffne. (Je nachdem, auf welche Romanreihe, Serie oder Filme man steht)

S.Langhammer 31. Mai 2013 13:06

AW: Versionsnummer des Grafiktreibers ermitteln
 
Die Lösung mittels WMI wurde als zu langsam abgeschmettert.
Ich habe den Editor in Chief von Techpowerup angeschrieben, ob er mir ne Richtung verraten könnte, wie das in GPU-Z gemacht wurde und er riet mir (Zitat) "das über SetupDi. Registry key (SPDRP_DRIVER) holen und dort DriverDateData und DriverVersion zu lesen."
Nun habe ich nicht viel Erfahrung, aber Google. So stieß ich dann hierauf: usb-stick seriennummer produktname auslesen
Nun liest das alle möglichen Informationen aus nur... ^^' Ich verstehs nicht. Also googlen, was die Funktionen machen kann ich ja, find auch einiges im Windows Dev Center, nur krieg ich das Gesamtbild nicht in meinen Verstand, bzw. welche stellen ich ändern muss, statt der Properties von USB-Geräten sauber nach denen von Grafikkarten zu fischen.
Würd ich dahin kommen, könnt ich mir sicher etwas einfallen lassen, die Richtige Property für die Treiberversionsnummer rauszufiltern.

Sorry DaddyH!

jaenicke 31. Mai 2013 21:20

AW: Versionsnummer des Grafiktreibers ermitteln
 
Zitat:

Zitat von S.Langhammer (Beitrag 1217082)
Die Lösung mittels WMI wurde als zu langsam abgeschmettert.

Bei mir braucht der Code rund 10-15 Millisekunden... Wie schnell muss es denn sein?
(Vor allem frage ich mich warum, wird der Code etwa mehrfach ausgeführt statt das Ergebnis zwischenzuspeichern?)

S.Langhammer 3. Jun 2013 08:23

AW: Versionsnummer des Grafiktreibers ermitteln
 
@ jaenicke:
Letzten Endes arbeite ich als Azubi nach Arbeitsanweisung und Auftrag. Wenn die Ansage kommt, "Mach das bitte anders." dann mach ich das auch anders. Nun hab ich ne Lösung direkt über die Registry gefunden und muss schauen, ob die so angenommen wird.
Trotzdem danke an alle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz