Auslesen der Programminformationen
-
-
%CBuilder%\Examples\Controls\VersionInfo
-
Es gibt im Internet zahlreiche Klassen und Komponenten zum Auslesen der Registerkarte Versionsinformation, aber leider besitzen nur ausführbare Dateien dieses Registerkarte.
Ich muß die Dateiinformationen von Crystal-Reportdateien auslesen. Gibt es einen Klasse für den Zugriff auf die Felder Titel,Thema... (Registerkarte Dateiinformationen). (Auslesen, nicht anschauen)
-
Da es sich um Informationen aus der Resource des jeweiligem Programm (oder DLL) handelt, kann das auch nur in ausführbaren Dateine vorhanden sein.
Für das auslesen von Informationen aus properitäre Dateien musst du das Format kennen -> hier Crystel Report
-
Diese Befürchtung hatte ich auch schon, aber offenbar ist das standardisiert, Windows kann ja diese Felder von beliebigen Dokumentan auch auslesen.
Z.b <Explorer> <Ansicht> <Spalten auswählen> , dann werden unter anderen Thema, Titel von beliebigen Dateien angezeigt, ist ne feine Sache und Windows muss also eine API dafür haben.
Zu den anderen Anfragen, um Versionsnr, Firmenname etc. von Exe oder Dll's auszulesen oder zu setzen gibt es zahlreiche Klassen und Packages, bei Bedarf schicke ich eine einfache gekapselte Klasse zu, wenn die jemand benötigt.
Ansonsten: Google nach "CFileVersion"
-
Tja, die Information, wie diese Daten aus der Datei zu interpretieren sind, kann dann aber nur "von außen" der API bekannt gemacht worden sein. Schließlich kann eine PDF oder XLS Datei nichts in der API machen, nur das dazu gehörige Programm (Adobe, Excel) bei der Installation.
oder
Es gibt doch einen Standard für solche Infos.
-
Es gibt offenbar ein Standard Interface für Dateinformationen.
http://support.microsoft.com/kb/186898/en-us
Mal sehen ob es funktioniert....
-
nur zur Info, es funktioniert !
-
Hallo!
Ich habe versucht das erste Beispiel(http://www.bytesandmore.de/rad/cpp/snipp/sc06001.php) umzusetzen, leider bringt er mir jetzt beim Compilieren eine für mich nicht verständliche Meldung:[Linker Fehler] Unresolved external 'VerInfo::VerInfo(System::AnsiString)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\BIN\UNIT1.OBJ
[Linker Fehler] Unresolved external 'VerInfo::GetVerInfo(int)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\BIN\UNIT1.OBJWäre schön wenn mir jemand von Euch weiterhelfen könnte, es darf auch eine einfachere Möglichkeit sein.
Gruß und schöne Tage noch.
Maik
-
-
Sorry, aber damit komm ich nicht klar, ich habe die Datei in mein Projekt eingebunden:
#include <FileVersionData.h>Dann möchte ich die Funktion aus dem Beispiel aufrufen:
FileVersionData1->FirmenNameDa tut sich garnichts, Meldung:
[C++ Fehler] Unit1.cpp(23): E2451 Undefiniertes Symbol 'FileVersionData1'
Ist mir auch klar, FileVersionData1 gibt es ja auch nicht!
Dann habe ich folgendes versucht:
AnsiString FileVersionData1 = "c:\\windows\\notepad.exe"; Memo1->Lines->Add(FileVersionData1->Firmenname);Jetzt bekomm ich folgende Fehlermeldung und habe keinen Lösungansatz mehr.
[C++ Fehler] Unit1.cpp(24): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich*
Kann mir bitte jemand kurz helfen.
Gruß
Maik
-
Naja, die Komponente solltest du schon installieren und dann in deine Form ziehen
-
So, danke erstmal, die Komponente ist jetzt installiert, aber wo geb ich denn den Dateinamen an, die Komponente hat ja keinerlei sichtbare Eigenschaften...
Gruß
Maik
-
Hat mir niemand noch den letzten Tipp.....??
Ich komm sonst nicht weiter.
-
Du ziehst sie auf dein Formular
Und zur Laufzeit kannst du
Label1->Caption=FileVersionData1->FirmenName;
schreiben, sofern die Instanz in deinem Formular auch FileVersionData1 heisst und du ein Label Names Label1 hast
-
Das hab ich schon verstanden, aber wie kann ich der Funktion zuweisen von welcher Datei ich denn die Version wissen möchte?
Gruß
Maik
-
Dazu ist die Komponenten nicht da. Sie holt nur die Infos aus der eigenen Datei. Habe deine Frage bisher nicht so aufgefasst, dass du Infos von externen Dateien willst!
Du kannst aber, da der Quellcode dabei ist, dass was unter Execute steht kopieren, in eine eigene Funktion und dann in dieser Zeile
DWORD InfoSize=GetFileVersionInfoSize(Application->ExeName.c_str(),&zero);
Den Namen der Datei übergeben, von der du die Infos willst.
-
Gibt es da keine einfachere Möglichkeit, wie du siehst bin ich noch nicht so der Crack!
-
Was ist den daran nun so schwer eine einzige Programmzeile zu ändern.
Dann sende mir dein Projekt zu, ich bau dir das ein (C++Builder 6)
musst allerdings bis morgen warten.
-
Hallo Christian,
Email ist schon unterwegs.
Vielen Dank.
Gruß
Maik