![]() |
Falsche Reihenfolge der Laufwerke!
hallo zusammen,
ich habe schon überall gesucht und nichts gefunden! ich bin schon fast am verzweifeln. :cry: also ich habe die komponente TCDRip und die Komponente TCDDB. nun habe ich eine combobox in der die CD-Laufwerke aufgelistet werden. wenn ich nun ein laufwerk auswähle, wird bei den zwei Komponenten TCDRip und TCDDB das laufwerk festgelegt, und die tracks müssten in einer listview aufgelistet werden. Das funktioniert allerdings nicht richtig. Das Problem habe ich schon rausgefunden: Bei der Komponente TCDRip haben die Laufwerke nicht die gleiche Reihenfolge wie die Kompo TCDDB. Bei der TCDDB ist die Reihenfolge Standard, also die Laufwerksbuchstaben sind nach dem Alphabet sortiert. Bei der Komponente TCDRip wird allerdings nicht mit dem Laufwerksbuchstaben gearbeitet, sondern mit der property CDRomNum (Integer). Da aber die Reihenfolge vertauscht ist, kann ich nicht sagen E:\ = 0 , F:\ = 1 , G:\ = 2. Die Kompo TCDRip hat aber noch die property CDRomName. Ich kann z.B. CDRip.CdRomNum auf 0 stellen, und dann mit CDRip.CDRomName die Laufwerksbeschreibung auslesen (z.B. "PHILIPS CDRW/DVD CDD5263") nun müsste ich aus dieser information den Laufwerksbuchstaben herausfinden, und ich weiss nicht ob und wie es geht. also von "PHILIPS CDRW/DVD CDD5263" müsste ich z.B. auf "G:\" kommen. ich hoffe ihr versteht mein problem und könnt mir helfen!! :bounce1: Liebe Grüsse aus der Schweiz urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
Nachtrag: In der CDRip_DLL.pas steht:
Delphi-Quellcode:
Das könnte es sein?
TCDROMParams = packed record
lpszCDROMID : array[0..255] of char; // CD-ROM ID, must be unique to index settings in INI file |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
Zitat:
also im Programmverzeichnis und beim ordner wo die komponente drin ist, habe ich nirgens eine INI gefunden... gruss urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
Hallo Urban,
du erhöhst deine Chancen auf qualifizierte Hilfestellung, wenn du für Komponenten, die nicht zum Standard-Lieferumfang von Delphi gehören, einen URL angibst - ganz besonders bei freien oder Trial-Komponenten. Grüße vom marabu |
Re: Falsche Reihenfolge der Laufwerke!
Das weiß ich leider auch nicht. Vielleicht ist damit auch gemeint, dass CDex sie in seine INI schreibt. Ich habe noch nicht damit gearbeitet. Nach den Screnshots verwendet CDex nur die Bezeichnung des Laufwerkes. Aber es gibt dort auch eine CDDB-Abfrage.
![]() Alternativ sollte es auch über
Delphi-Quellcode:
gehen.
TCDROMParams = packed record
... btTargetID : BYTE; // SCSI target ID btAdapterID : BYTE; // SCSI Adapter ID btLunID : BYTE; // SCSI LUN ID |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
Mit Google findet man sie zum Beispiel dort: ![]() ![]() |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
was kann ich mit den drei Eigenschaften machen? Danke für deine Hilfe! |
Re: Falsche Reihenfolge der Laufwerke!
Klicke mal auf dieser Seite
![]() Leider kann ich es Dir nicht näher erklären, da ich jetzt auf Montage fahren muss. |
Re: Falsche Reihenfolge der Laufwerke!
danke für deine antwort, ich denke daraus lässt sich etwas machen!! :bounce1:
gruss urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
hi, ich nochmal
ich habe jetzt mal versucht, die drei eigenschaften (oder was auch immer) btTargetID, btAdapterID und btLunID auszulesen. ich habe folgendes probiert:
Delphi-Quellcode:
Ergebnis:
var b: byte;
begin b := cdrip_dll.TCDROMParams.btAdapterID; end; Zitat:
kann mir vielleicht jemand helfen? thx urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
Hallo, bin gerade wieder zu Hause eingetrudelt.
Zitat:
Zitat:
Delphi-Quellcode:
Ein paar Beispiele fundest Du auch in
uses
cdrip_dll; var Parameter : TCDROMParams; b : Byte; begin b := Parameter.btAdapterID; end; ![]() |
Re: Falsche Reihenfolge der Laufwerke!
hi,
also ich habe mal folgendes gemacht:
Delphi-Quellcode:
sieht so aus als würde es funktionieren, jedoch weiss ich jetzt aber nicht was ich genau machen muss mit dem wert der variable b.
var
Parameter : TCDROMParams; b : Byte; begin cdrip_dll.CR_GetCDROMParameters(parameter); b := Parameter.btAdapterID; end; ist es möglich dass ich anhand vom wert der variable b den laufwerksbuchstaben ermitteln kann? gruss urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
Liste der Anhänge anzeigen (Anzahl: 2)
Moin,
jetzt sind es doch drei Stunden geworden, bis ich alle Units und das Projekt beisammen hatte. Dabei habe ich festgestellt, dass die Laufwerke von cdrip und cddb in derselben Reihenfolge aufgelistet werden. Die Beschreibung ist lediglich etwas anders. Für cdrip sieht es so aus:
Delphi-Quellcode:
Für CDDB:
procedure lw_cdrip;
type TCDROMName = array[0..255] of char; var i : Byte; anz_CDRom : Byte; text : String; CDRomName : TCDROMName; FParams : TCDROMParams; TargetID, AdapterID, LunID : Byte; begin if CR_Init = CDEX_ERROR then begin ShowMessage('Fehler beim Initialisieren von CD Rip'); Exit; end; Anz_CDRom := CR_GetNumCDROM; cmb_Drives_cdrip.Clear; for i := 0 to anz_CDROM - 1 do begin CR_SetActiveCDROM(i); if CR_GetCDROMParameters(FParams)<> CDEX_ERROR then begin CDRomName1 := TCDROMName(FParams.lpszCDROMID); TargetID := FParams.btTargetID; AdapterID := FParams.btAdapterID; LunID := FParams.btLunID; Text := IntToStr(TargetID) + ':' + IntToStr(AdapterID) + ':' + IntToStr(LunID) + ' - ' + CDRomName; cmb_Drives_cdrip.Items.Add(Text); end; end; CR_SetActiveCDROM(0); cmb_Drives_cdrip.ItemIndex := CR_GetActiveCDROM; end;
Delphi-Quellcode:
In den proceduren werden verschiedene ComboBoxen verwendet. Bei Auswahl des selben Laufwerkes sind die Werte für den ItemIndex identisch. Jedoch muss die Auswahl an beide Komponenten weitergeben werden.
procedure lw_cddb;
var i : Byte; anz_CDRom : Byte; text : String; CDRomName : ShortString; TargetID, AdapterID, LunID : Byte; begin CDDB := TCDDB.Create(self); anz_CDRom := CDDB.CDRoms.CdRomCount; for i := 0 to anz_CDRom - 1 do begin CDRomName := CDDB.CDRoms.CdRom[i].Description; TargetID := CDDB.CDRoms.CdRom[i].Target; AdapterID := CDDB.CDRoms.CdRom[i].HaID; LunID := CDDB.CDRoms.CdRom[i].Lun; Text := IntToStr(TargetID) + ':' + IntToStr(AdapterID) + ':' + IntToStr(LunID) + ' - ' + CDRomName; cmb_Drives_cddb.Items.Add(Text); end; cmb_Drives_cddb.ItemIndex := CDDB.CdRoms.ActiveCdRom; end; Gesetzt werden sie mit:
Delphi-Quellcode:
Und ausgelesen mit:
CR_SetActiveCDROM(cmb_Drives.ItemIndex); // CD Rip
CDDB.ChangeActiveDrive(cmb_Drives.ItemIndex); // CDDB
Delphi-Quellcode:
Ach so, CDDB ist unter Var für die unit mit dem Typ TCCDB vereinbart. Die Units cdrip_dll und cddb stehen in den uses.
cmb_Drives.ItemIndex := CR_GetActiveCDROM; // CD Rip
cmb_Drives.ItemIndex := CDDB.CdRoms.ActiveCdRom; // CDDB Wenn jetzt die Reihenfolge bei Dir nicht übereinstimmt, hast Du Fehler in Deinem Sourcen. |
Re: Falsche Reihenfolge der Laufwerke!
hallo Garfield,
vielen dank dass du dir so viel zeit dafür genommen hast!! :angel: aaaaalso... im grossen und ganzen funktioniert das nicht schlecht, aber es gibt da noch ein problem: ich habe gemerkt, dass die datei WNASPI32.DLL eine grosse rolle spielt, ich glaube das hängt mit der TCDRip zusammen. bei 2 von 3 PCs hat das programm funktioniert, aber bei einem leider nicht, und das hängt ganz sicher mit der WNASPI32.DLL zusammen. bei den einen PCs befindet sich die datei WNASPI32.DLL schon im system32-verzeichnis, aber nicht bei allen. ausserdem gibt es verschiedene versionen von dieser DLL, die dann auch nicht das selbe ergebnis in deinem beispielprogramm erzielen. habe ich auch getestet. kann man da irgendwas machen, dass bei JEDEM PC die selbe DLL (gleiche version, gleicher pfad) benutzt wird? wenn sich eine WNASPI32.DLL im system32-verzeichnis befindet, und eine im Programmverzeichnis, welche wird dann benutzt? ich denke wenn das problem mit der WNASPI32.DLL gelöst ist, dann kann ich dein beispielcode so anpassen, dass es dann auf jedem PC läuft. gruss urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
Moin Urban,
wenn Du keinen Pfad angibst sollte zuerst im Programmverzeichnis gesucht werden. Bei Windows 2000/XP kannst Du auch eine Datei mit dem Namen <Der Name Deines Programmes incl. exe>.local in das Programmverzeichnis legen, damit die in diesem Verzeichnis befindlichen DLLs geladen werden. Hierzu kannst Du einfach eine leere Datei anlegen, die diesen Namen hat (Beispielname: Projekt1.exe.local) |
Re: Falsche Reihenfolge der Laufwerke!
hi,
gilt denn das nur für DLLs oder auch für andere dateien? ich werds dann mal ausprobieren, jetzt habe ich aber leider grad keine zeit dafür... urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
Zitat:
Die verschiedenen Versionen resultieren aus den verschiedenen Anbietern. So zum Beispiel von Adaptec und Nero. Zitat:
1. Die DLL liegt im Programmverzeichnis. 2. Die DLL liegt in %Windows%\System bzw. %Windows%\System32 3. Die DLL liegt woanders und ist registriert. Zuerst wird aber meines Wissens immer im Programmverzeichnis gesucht. Theoretisch sollte jede Version funktionieren. Bei mir hat es unter Win98SE mit Adaptec ASPI 4.60 und unter WinXP mit Adaptec ASPI 4.71 funktioniert. Es sollte ausreichen wenn die 44 kb große wnaspi32.dll im Programmverzeichnis liegt. Zitat:
Nachtrag: Zum Laufwerksbuchstaben. Den bekommt man bei der TCDRip nicht. Bei der TCDDB ist seine Deklaration auskommentiert. Ob die entsprechende Funktion vorhanden ist, habe ich nicht geprüft. Im Prinzip sollte die Beschreibung des Laufwerkes ausreichend sein, so lange man den Buchstaben nicht weitergeben muss. |
Re: Falsche Reihenfolge der Laufwerke!
also ich jetzt mal das mit der *.local datei probiert.
nun habe ich aber das problem, dass bei der rechten combobox (also CDDB) in deinem beispielprogramm die drei zahlen vor dem laufwerksbuchstaben immer 0 sind, also 0:0:0. ich dachte, wenn etwas nicht stimmt, dann wäre es die CDRip komponente und nicht die CDDB :gruebel: ich benützt die WNASPI32.DLL von nero, version 2.0.1.59, 156kb gross. weisst du was jetzt das problem sein könnte? ich glaube mit der WNASPI32.DLL von Adaptec funktioniert es an einem pc, bin mir aber nicht ganz sicher. |
Re: Falsche Reihenfolge der Laufwerke!
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe kein Nero und mir deshalb die aktuelle wnaspi32.dll von
![]() Unter XP werden unter CDRip wieder die IDs mit den Laufwerksbeschreibungen werden angezeigt. Unter TCDDB werden keine IDs zurückgegeben und anstelle der Laufwerksbeschreibungen gibt es die passenden Laufwerksbuchstaben. Anscheinend verwenden beide Komponenten unterschiedliche Funktionen, welche zwar bei den Adaptec-Treibern die selben Ergebnisse liefern aber nicht bei den von Nero. Unter 98SE reicht die wnaspi32.dll von Nero nicht. Es wird die Originaldatei von Windows verlangt. Jetzt müsstest Du Dir überlegen, wie Du die Laufwerke anzeigen lassen möchtest. Dementsprechend kannst Du die Werte anordnen. Zum Beispiel wie im Anhang. Achso: Ich musste feststellen, dass die Adaptec-Treiber registriert werden müssen. Sonst gibt es Fehler. |
Re: Falsche Reihenfolge der Laufwerke!
In der Darstellung der Adresse per TargetID, AdpaterID und LunID ist ein kleiner Fehler. Ich hatte die Darstellung in der deklarierten Reihenfolge vorgenommen. Beim Vergleich mit VCDEasy und Bass.Dll/BassCD.Dll habe ich festgestellt, dass dort die TargetID und AdapterID anders herum angezeigt werden.
Desweiteren kann es zu einer Fehlermeldung wegen inkompatibler Typen 'Array' und 'Char' kommen. Die Lösung gibt es unter ![]() |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
ich hoffe es, denn bei einem von 3 PCs passen die laufwerksbuchstaben nicht zu den laufwerksbeschreibungen. kann es auch sein dass es fehler gibt wenn noch zusätzlich ein virtuelles laufwerk verwendet wird? sollte ja nicht oder? das programm habe ich bei 3 PCs getestet: PC 1: 1 CD-Laufwerk + 1 virtuelles laufwerk. funktionierte. PC 2: 2 CD-Laufwerke. funktionierte. PC 3: 2 CD-Laufwerke + 1 virtuelles laufwerk. funktionierte nicht, falsche reihenfolge. die drei zahlen vor den laufwerksbezeichnungen waren jetzt nicht mehr 0:0:0, ausser bei einem einzigen laufwerk (ich glaube das war ein virtuelles), aber das ist ja shcon möglich dass diese so sein müssen, da die anderen 2 laufwerke nicht 0:0:0 anzeigten. |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
Delphi-Quellcode:
in
Text := IntToStr(TargetID) + ':'
+ IntToStr(AdapterID) + ':' + IntToStr(LunID) + ' - ' + CDRomName;
Delphi-Quellcode:
geändert werden und schon passt die Anzeige.
Text := IntToStr(AdapterID) + ':'
+ IntToStr(TargetID) + ':' + IntToStr(LunID) + ' - ' + CDRomName; Zitat:
![]() In meinem anderen Projekt wurden Inkompatibilitäten in der SptiCD.pas wie folgt gefunden:
Delphi-Quellcode:
Vielleicht helfen diese kleinen Korrekturen bereits.
Zeile 90 - Text := @DummyStr[0];
Zeile 95 - StrPCopy( @buf[0], Format( '\\.\%s:', [ Zeile 191 - StrPCopy( @buf[0], Format( '\\.\%s:', [ Zeile 362 - StrPCopy( @buf2[0], Format( '\\.\%s:', [CdRoms.CdRom[i].DriveLetter] ) ); Zeile 408 - DriveString := @inqData[0]; Die Änderung der Anzahl der virtuellen Laufwerke mit Daemon Tools bemerkt TCDRip erst nach dem Neustart. Die TCDDB bemerkt es sofort. |
Re: Falsche Reihenfolge der Laufwerke!
könntest du bitte noch den source von deinem letzten anhang anhängen?
da ist nämlich nur die exe und die DLLs drin, da kann ich schlecht den code verändern :-D oder meinst du, ich soll den code bei dem vorletzten anhang ändern? das würde ja nichts nützen, die 3 zahlen werden dann einfach in einer anderen reihenfolre angezeigt oder? mich würde dann aber den source vom letzten anhang trotzdem noch interessieren... gruss urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
Liste der Anhänge anzeigen (Anzahl: 3)
Ja sicher kann ich das.
CDTest_2_Source ist die Source zu der EXE oben. Funktioniert nur unter WinXP und vermutlich Win2000 wie gewünscht. Bei CDTest_3 ist alles auf die Units von ASPI und SPTI reduziert. Funktioniert unter WinXP mit und ohne ASPI und unter Win98SE. |
Re: Falsche Reihenfolge der Laufwerke!
erstmal dankeschön :angel:
dann zum resultat: beim ersten pc (1 optisches + 1 virtuelles laufwerk) funktionierte das programm cdtest_2 einwandfrei, beim cdtest_3 war das resultat so: Zitat:
beim dritten pc (2 optische laufwerke) war das resultat bei cdtest_3 das gleiche wie beim ersten pc. beim cdtest_2 war das resultat folgendes: Zitat:
könnte sein dass das mit dem CDRip bei einem eingeschränkten konto nicht funktioniert oder so. jetzt müsste ich aber noch irgendwie rausbekommen, WELCHE variante für WELCHEN pc die richtige ist :gruebel: :gruebel: ach ja, alle drei pc haben win xp prof., sp2 |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
Die Laufwerke selbst sind nicht für die unterschiedlichen Anzeigen verantwortlich. Die Ursache ist wohl diese: Zitat:
Wenn man es also richtig machen will, muss man wie zum Beispiel bei VCDEasy eine Trennung zwischen SPTI und ASPI sowie nach den verschiedenen ASPI-Versionen vornehmen und entsprechende Routinen schreiben. Wenn Du VCDEasy installiert hast, kannst Du die verwendeten Treiber ablesen. Da steht dann SPTI, ASPI: Adaptec bzw ASPI: Nero. Früher durfte man nur Adaptec Version 4.60 verwenden. Jetzt wird die 4.71 empfohlen. Was Du mal probieren kannst: Lasse die wnaspi32.dll auf den Rechnern suchen, benenne sie um (zum Beispiel _ anhängen) und starte dann CDTest_3.exe. Dann sollte die Anzeige bei allen Rechnern stimmen. Bei CDTest_2.exe gibt es den CDRip-Fehler, weil da die wnaspi32.dll benötigt wird. |
Re: Falsche Reihenfolge der Laufwerke!
Liste der Anhänge anzeigen (Anzahl: 2)
So, dann wollen wir mal weitertesten.
In TForm1.Create steht als erste Zeile
Delphi-Quellcode:
Das ich diesen Wert verwendet habe war ein Zufall. Aber sehen wir die anderen beiden Werte an:
CDInterface := cdiAutoDetect;
Delphi-Quellcode:
Am besten Du testet die Wirkung der Werte.
CDInterface := cdiNTSCSI;
CDInterface := cdiASPI; |
Re: Falsche Reihenfolge der Laufwerke!
Klappt es nun?
|
Re: Falsche Reihenfolge der Laufwerke!
sry dass es so lange gedauert hat, habe grad ziemlich viel stress... :(
zum cdTest_4: beim ersten PC hats mit "SPTI" und mit "Auto" funktioniniert. beim zweiten PC hats mit "SPTI" funktioniert, und bei "Auto" war die reihenvolge der laufwerksbezeichnungen vertauscht. beim dritten war das ergebnis gleich wie beim ersten PC. das "ASPI" hat bei keinem funktioniert. noch etwas das mich störte: wenn man das programm startet und zu früh (bis ca. 3sek nach Programmstart) auf "SPTI" klickt, kamen da komische sachen wie Zitat:
wenn man etwas später nochmal auf "SPTI" klickt, stimmt es: Zitat:
und wie kann man feststellen, ob ich bei einem pc "SPTI", "ASPI" oder "Auto" anwenden muss? ach ja, stimmen denn jetzt die einträge auch mit der reihenfolge von TCDRip zusammen? gruss urbanbruhin |
Re: Falsche Reihenfolge der Laufwerke!
Zitat:
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
oder mit CASE:
uses
..., SptiCD; ... if GetOSVersion > 1 then CDInterface := cdiNTSCSI else CDInterface := cdiASPI; ...
Delphi-Quellcode:
Statt der Zahlen kann man natürlich auch die Konstantennamen verwenden.
case GetOSVersion of
0..1 : cdiASPI; 2..5 : cdiNTSCSI; else cdiAutoDetect; end; Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 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