AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Name des CD-ROM-Laufwerks (zB LITEON LTD163D)
Thema durchsuchen
Ansicht
Themen-Optionen

Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

Ein Thema von Garfield · begonnen am 9. Jan 2005 · letzter Beitrag vom 26. Jan 2005
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#21

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 15. Jan 2005, 23:20
Das ist so etwas, wie OregonGhost oben vorgeschlagen hatte. Vielen Dank, werde ich morgen früh gleich ausprobieren.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#22

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 16. Jan 2005, 11:52
Moin, moin:

Ich habe mich also noch einmal mit WMI beschäftigt. Zu der Frage der Installation von WMI habe ich folgendes gefunden:

Windows Management Instrumentation:
Zitat:
WMI is preinstalled in Windows Server 2003, Windows XP, Windows Me, and Windows 2000.
INFO: Windows Management Instrumentation (WMI) on Computers Running Windows 98, Windows 98 Second Edition, and Windows Millennium Edition
Zitat:
Systemanforderungen
  • Unterstützte Betriebssysteme: Windows 95, Windows 98, Windows NT
Softwareanforderungen:
1. Microsoft® Windows® NT 4 SP 4 oder höher, Windows 95, Windows 98. (WMI ist unter Windows 2000 und Windows Me bereits standardmäßig installiert)
2. DCOM-Version 1.3 für Windows 95
Downloads für ältere Systeme:
In dem Beispiel habe ich in Zeile 7 ein Type eingefügt. Und nun hänge ich bei den Uses von Zeile 46, weil ich keine WbemScripting_TLB.pas/dcu habe. Über Active X importieren habe ich es leider nicht gefunden. Ich benutze dafür Delphi 7 Personal unter Windows XP.

Nachtrag: Die WbemScripting_TLB.pas habe ich gerade in http://www.delphipraxis.net/internal...ct.php?p=77262 gefunden.

Nachtrag 2: War möglicherweise nicht die richtige bzw eine alte WbemScripting_TLB.pas (Version 1.1). In der wmiCDROM werden unter 'constructor TCDROMDrive.Create(CDROMDeviceID : String);' UserName, UserPwd und ComputerName sowie unter 'TCDROMDrive.SystemValues(CDROMDeviceID : String);' wbemConnectFlagUseMaxWait als undefinierte Bezeichner moniert.

Nachtrag 3: http://www.sysextensions.net/kompone...compdelphi.htm
http://www.online-admin.com/register_wmiset.html
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#23

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 16. Jan 2005, 15:34
Zitat von Alter Mann:
Delphi-Quellcode:
unit wmiCDROM;

interface

uses Windows, Classes, Contnrs, Variants;

type
  PCDROMDrive = ^TCDROMDrive;
  TCDROMDrive = class(TObject)
  private
    FUserName : String;
    FUserPwd : String;
    FComputerName : String;

    FDescription : String;
    FDrive : String;
    FManufacturer : String;
    FMediaLoaded : Boolean;
    FMediaType : String;
    FName : String;
    FSCSIBus : Uint;
    FSCSILogicalUnit : Uint;
    FSCSIPort : Uint;
    FSCSITargetId : Uint;
    FStatus : String;
  protected
    procedure SystemValues(CDROMDeviceID : String);
  public
    constructor Create(CDROMDeviceID : String);
    destructor Destroy; override;
    property Description : String read FDescription;
    property Drive : String read FDrive;
    property Manufacturer : String read FManufacturer;
    property MediaLoaded : Boolean read FMediaLoaded default False;
    property MediaType : String read FMediaType;
    property Name : String read FName;
    property SCSIBus : Uint read FSCSIBus;
    property SCSILogicalUnit : Uint read FSCSILogicalUnit;
    property SCSIPort : Uint read FSCSIPort;
    property SCSITargetId : Uint read FSCSITargetId;
    property Status : String read FStatus;
  published
  end;

implementation

uses SysUtils, ActiveX, WbemScripting_TLB;

////////////////////////////////////////////////////////////////////////
//// TCDROMDrive ////
////////////////////////////////////////////////////////////////////////

constructor TCDROMDrive.Create(CDROMDeviceID : String);
begin
  inherited Create;
  SystemValues(CDROMDeviceID);
end;

procedure TCDROMDrive.SystemValues(CDROMDeviceID : String);
var
  FLocator : ISWbemLocator;
  FServices : ISWbemServices;
  FObjectSet: ISWbemObjectSet;
  FObjEnum : IEnumVariant;
  FWMIObj : ISWbemObject;
  FWMITmpObj: OleVariant;
  PropVal : OLEVariant;
  Cnt : Cardinal;

  function GetValue(Value : String) : Variant;
  begin
    try
       PropVal := (FWMIObj.Properties_.Item(Value, 0) as ISWbemProperty).Get_Value;
       if not (VarIsEmpty(PropVal) or VarIsNull(PropVal)) then Result := PropVal;
    except
    end;
  end;

begin
  FLocator := CoSWbemLocator.Create;
  try
    if FLocator <> nil then
    begin
      FServices := FLocator.ConnectServer('.', 'root\cimv2', '', '', '', '', 0, nil);
      if FServices <> nil then
      begin
        FObjectSet := FServices.ExecQuery('SELECT * FROM Win32_CDROMDrive', 'WQL', wbemFlagReturnWhenComplete, nil);
        if FObjectSet <> nil then
        begin
          with FObjectSet do
          begin
            FObjEnum := (FObjectSet._NewEnum) as IEnumVariant;
            if FObjEnum <> nil then
            begin
              if FObjectSet.Count > 0 then
              begin
                while(FObjEnum.Next(1, FWMITmpObj, Cnt) = S_OK) do
                begin
                  FWMIObj := IUnknown(FWMITmpObj) as ISWbemObject;

                  PropVal := (FWMIObj.Properties_.Item('DeviceID', 0) as ISWbemProperty).Get_Value;
                  if not (VarIsEmpty(PropVal) or VarIsNull(PropVal)) and (CDROMDeviceID = PropVal) then
                  begin
                    FDescription := GetValue('Description');
                    FDrive := GetValue('Drive');
                    FManufacturer := GetValue('Manufacturer');
                    FMediaLoaded := GetValue('MediaLoaded');
                    FMediaType := GetValue('MediaType');
                    FName := GetValue('Name');
                    FSCSIBus := GetValue('SCSIBus');
                    FSCSILogicalUnit := GetValue('SCSILogicalUnit');
                    FSCSIPort := GetValue('SCSIPort');
                    FSCSITargetId := GetValue('SCSITargetId');
                    FStatus := GetValue('Status');
                  end;
                end;
              end;
            end;
          end;
        end;
      end;
    end;
  finally
    FServices := nil;
    FLocator := nil;
  end;
end;

destructor TCDROMDrive.Destroy;
begin
  inherited Destroy;
end;

end.
Folgende Änderungen habe ich vorgenommen:
  • Zeile 7 type eingefügt,
  • Zeile 57ff (FUserName := UserName; FUserPwd := UserPwd; FComputerName := ComputerName herausgenommen und
  • Zeile 85/86 das 'wbemConnectFlagUseMaxWait' durch 0 ersetzt.
Nun scheint bei Zeile 104, 105 ein Fehler zu sein. Denn (CDROMDeviceID = PropVal) kann nicht eintreten, weil PropVal zum Beispiel 'IDE\CDROM...' ist.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#24

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 19. Jan 2005, 18:56
Hallo

danke für die "Berichtigungen"

Zitat:
# Zeile 57ff (FUserName := UserName; FUserPwd := UserPwd; FComputerName := ComputerName herausgenommen und
# Zeile 85/86 das 'wbemConnectFlagUseMaxWait' durch 0 ersetzt.
Zeile 57ff : war beabsichtigt, damit man weiss wie es Remote geht!
Zeile 85/86: Mit 'wbemConnectFlagUseMaxWait' habe ich sooo meine Erfahrungen; Auf meinem privaten Rechner wurde
der Wert($80) korrekt importiert, auf Arbeit nicht
Woran es liegt Habe mich noch nicht auf die Suche gemacht, sondern einfach
Delphi-Quellcode:
interface
...
Const
  wbemConnectFlagUseMaxWait = $80;
...
geschrieben.
Weitere Probleme gab es unter Windows XP nicht, abgesehen davon das nicht immer alle theoretisch Verfügbaren
Properties auch verfügbar sind. Beim Lauf innerhalb der IDE bekommt man zu hauf Unterbrechungen mit der Meldung "Ungültiges Argument"
Weiterhin habe ich die Erfahrung gemacht, das im PSK steht, das die Eigenschaft ein Array(also ein Variablenfeld) ist
und versuche es auszulesen, kommt die Meldung das es sich nicht um Array handelt, sondern ein 'einfacher Wert' ist.
Dafür läuft die Sache auf einem anderen Rechner 1a.

Ansonsten scheint es unter W2K Probleme zu geben.

Allgemein gesagt kann man WMI nutzen, die Garantie das alle wünschenswerten Eigenschaften auch tatsächlich vorhanden
sind gibt es scheinbar nicht.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#25

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 19. Jan 2005, 22:06
Guten Abend,

Zitat von Alter Mann:
danke für die "Berichtigungen"
Wenn ich mit meinen bescheidenen Kenntnissen sonst nicht helfen kann.

Zitat von Alter Mann:
Zeile 85/86: Mit 'wbemConnectFlagUseMaxWait' habe ich sooo meine Erfahrungen;
Die 0 hatte ich in einem anderen Source gesehen. Luckie hat mir heute dort gezeigt, wie ich die WbemScripting_TLB importieren muss. Nun habe ich die MS WMI Scripting V1.2 Library (Version 1.2) importiert. Damit erzeugt die Variable wbemConnectFlagUseMaxWait keine Fehlermeldung mehr und wird mit 128 ($80) angegeben. Das Ergebnis ist jedoch gleich geblieben. Die Variable Propval zeigt die String, wie sie in den DeviceClasses in der Registry stehen. ZB 'IDE\CDROMMATSHITA**'.

Leider kann ich Dir dabei nicht weiterhelfen, weil meine Englischkenntnisse noch schlechter als meine Delphikenntnisse sind.

Ich habe mir in dem Zusammenhang von http://www.online-admin.com/download.html die Demo StorageInfo heruntergeladen. Diese Demo hat die gewünschten Laufwerksinformationen angezeigt. Die Demo enthält auch die Source ohne die WMI Componente, welche es als Sharewareversion (58 US$) zum Download gibt. Das Archiv enthält die vorcompilierten Komponenten.

Aus Neugier habe ich es dann unter Win98SE getestet. Die unter XP compilierte EXE ergab einen Fehler 'ungültige Variable'. Dann wollte ich es mit Delphi 3 Prof compilieren. Dort habe ich MS WMI Scripting V1.1 Library (Version 1.1) importiert und es gab wieder den Fehler mit dem unbekannten wbemConnectFlagUseMaxWait. CNT : Integer mochte D3 natürlich auch nicht. Und nachdem ich LongInt draus gemacht habe, hat sich der Compiler irgenwohin verlaufen.

Sieht so aus, als würde es wbemConnectFlagUseMaxWait erst in der MS WMI Scripting V1.2 Library geben.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#26

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 19. Jan 2005, 22:18
Zitat:
Zeile 85/86: Mit 'wbemConnectFlagUseMaxWait' habe ich sooo meine Erfahrungen;
Gibt es erst ab Windows XP. Gib da 0 an, wenn es unter 2000 laufen soll.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#27

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 19. Jan 2005, 23:06
Zitat:
Timeout on connection

When connecting to WMI through a call to SWbemLocator.ConnectServer or IWbemLocator::ConnectServer, you can set the wbemConnectFlagUseMaxWait flag (scripting) or the WBEM_FLAG_CONNECT_USE_MAX_WAITin C++ value to 128 (0x80) to impose a 2 minute timeout on the call.

Windows 2000, Windows NT, Windows 98, and Windows 95: The wbemConnectFlagUseMaxWait and WBEM_FLAG_CONNECT_USE_MAX_WAIT flags are not available.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#28

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 19. Jan 2005, 23:33
@Garfield: Und was habe ich anderes gesagt:
Zitat:
Windows 2000, Windows NT, Windows 98, and Windows 95: The wbemConnectFlagUseMaxWait and WBEM_FLAG_CONNECT_USE_MAX_WAIT flags are not available.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#29

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 20. Jan 2005, 04:59
OK, danke, muss ich überlesen haben.
Ich meinte es noch etwas anders; 2 PC, beide mit Windows XP und WMI Scripting V1.5 Library.
Auf dem einen ist sie (wbemConnectFlagUseMaxWait) deklariert auf dem anderen nicht. Aufgefallen ist mir das, als ich den Source auf dem anderen Rechner compilieren wollte und ich die Meldung "unbekannter Bezeichner" o.s. erhielt.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#30

Re: Name des CD-ROM-Laufwerks (zB LITEON LTD163D)

  Alt 20. Jan 2005, 08:13
Zitat von Luckie:
@Garfield: Und was habe ich anderes gesagt:
Entschuldige, ich wollte Dir nicht zu nahe treten. Mir ging es mehr um den ersten Absatz.

Zitat von Alter Mann:
Ich meinte es noch etwas anders; 2 PC, beide mit Windows XP und WMI Scripting V1.5 Library. ...
Ich habe nun mein Projekt auf dem selben Rechner mit Win98SE getestet. Da kam so etwas wie 'Invalid Parameter'. Bei einem anderen Rechner, bei welchem das XP von derselben CD installiert wurde, startete die Projektexe nicht einmal.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 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