Versionsnummer einer Windowsdatei auslesen
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Versionsnummer einer Windowsdatei auslesen
Hallo, hat jemand eine Idee, wie ich die Versionsnummer einer Windows Datei auslesen kann? Ich weis, das Qt dafür nix hat, da es ja Windows typisch ist. Aber vielleicht hat doch jemand etwas Code für mich:)
hi,
ich kann dir sagen wie es in Visual Basic .Net geht
, aber unter Qt kenn ich
solch eine lösung nicht, mit hoher warscheinlichkeit kann QFileInfo das, bin
mir aber in der hinsicht nicht sicher...., ein versuch ist es alle mal wert, sonst
schau mal in diversen Qt büchern nach die du bei dir rumliegen hast ...
GOOGLE.DE/LINUX hilft bei solchen fällen auch ab und zu mal
ich kann dir sagen wie es in Visual Basic .Net geht
solch eine lösung nicht, mit hoher warscheinlichkeit kann QFileInfo das, bin
mir aber in der hinsicht nicht sicher...., ein versuch ist es alle mal wert, sonst
schau mal in diversen Qt büchern nach die du bei dir rumliegen hast ...
GOOGLE.DE/LINUX hilft bei solchen fällen auch ab und zu mal
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
So jetzte bionn ich in der Win32API fündig geworden. Nur leider stoplte ioch an der 1. Stelle. hier der Code:
nur da spielt der Compiler nicht mit:( Es sagt:
haupt.cpp:12: error: conversion from `QByteArray' to `WCHAR*' is ambiguous
C:/c++/Qt/4.0.0/include/QtCore/../../src/corelib/tools/qbytearray.h:322: note: candidates are: QByteArray::operator const void*() const <near match>
C:/c++/Qt/4.0.0/include/QtCore/../../src/corelib/tools/qbytearray.h:289: note: QByteArray::operator QNoImplicitBoolCast() const <near mat
>
haupt.cpp:25:2: warning: no newline at end of file
mingw32-make[1]: *** [tmp\obj\haupt.o] Error 1
Was nun?
Code: Alles auswählen
QFile Datei("c:\\Windows\\explorer.exe");
DWORD Infoblockgroesse;
DWORD Datenmuell;
Infoblockgroesse=::GetFileVersionInfoSize(Datei.fileName().toUtf8(),&Datenmuell);
if(Infoblockgroesse==0)
{
//wenn 0 denn Fehler
qDebug() <<"Fehler";
}
else
{
//größe gefunden
qDebug() <<"Der Infoblock ist"<<Infoblockgroesse<<"Byte gross";
}
haupt.cpp:12: error: conversion from `QByteArray' to `WCHAR*' is ambiguous
C:/c++/Qt/4.0.0/include/QtCore/../../src/corelib/tools/qbytearray.h:322: note: candidates are: QByteArray::operator const void*() const <near match>
C:/c++/Qt/4.0.0/include/QtCore/../../src/corelib/tools/qbytearray.h:289: note: QByteArray::operator QNoImplicitBoolCast() const <near mat
>
haupt.cpp:25:2: warning: no newline at end of file
mingw32-make[1]: *** [tmp\obj\haupt.o] Error 1
Was nun?
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Ok das Probelm ist behoben. Abrt nun kommt das nächste. Die Blockgröße ist immer 0:( Doch das kann nicht sein:(
Hier der neue Code:
Hier der neue Code:
Code: Alles auswählen
Application a(argc, argv);
QString Datei("c:\\Windows\\explorer.exe");
DWORD Infoblockgroesse;
DWORD Datenmuell;
Infoblockgroesse=::GetFileVersionInfoSize((WCHAR*)&Datei.toUtf8(),&Datenmuell);
if(Infoblockgroesse==0)
{
//wenn 0 denn Fehler
qDebug() <<"Fehler";
}
else
{
//größe gefunden
qDebug() <<"Der Infoblock ist"<<Infoblockgroesse<<"Byte gross";
}
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Du musst ein wchar übergeben und nicht char. GetLastError() gibt dir unter Garantie die Fehlermeldung "Datei nicht gefunden"...
-> unter Qt3: toUcs2()
-> unter Qt4: toUtf16()
Ausserdem würde ich zur Sicherheit GetFileVersionInfoSizeW benutzen
-> unter Qt3: toUcs2()
-> unter Qt4: toUtf16()
Ausserdem würde ich zur Sicherheit GetFileVersionInfoSizeW benutzen
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Utf8 ist eine 8-Bit Kodierung, wie soll es dann funktionieren wen du GetFileVersionInfoSizeW aufrufst (was du zweifelsohne machst)?BartSimpson hat geschrieben:Nee Das mit dem String muss so sein.
Und wenn Du GetFileVersionInfoSizeA benutzen würdest muss toLatin1() oder toLocal8Bit() verwendet werden.
Wobei seit Qt4 immer noch ein .constData() rangehängt werden muss da dies (leider) nicht mehr automatisch geschieht.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
So jetzte ist das Wunderwerk vollbracht. Hier ist der Code:
Mag vielleicht nicht Optimal sein, aber es geht erst mal 
Code: Alles auswählen
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString Datei("c:\\Windows\\explorer.exe");
DWORD Infoblockgroesse;
DWORD Datenmuell;
char *Infoblock=0;
UINT LaengeDerInfo;
VS_FIXEDFILEINFO *FesteInfo;
//WCHAR=16 Bit
Infoblockgroesse=::GetFileVersionInfoSize((WCHAR*)Datei.utf16(),&Datenmuell);
if(Infoblockgroesse==0)
{
//wenn 0 denn Fehler
qDebug() <<"Fehler beim Lesen der Infoblockgroesse";
}
else
{
//größe gefunden
qDebug() <<"Der Infoblock ist"<<Infoblockgroesse<<"Byte gross";
Infoblock=new char[Infoblockgroesse];
if(!::GetFileVersionInfo((WCHAR*)Datei.utf16(),0,Infoblockgroesse,Infoblock))
{
//wenn false denn Fehler
qDebug() <<"Fehler beim Lesen des Infoblockes";
}
else
{
qDebug()<<"Infoblock gelesen";
if(!::VerQueryValue(Infoblock,(WCHAR*)QString("\\").utf16(),(void**)&FesteInfo,&LaengeDerInfo))
{
//Auswetung fehlgeschlagen
qDebug()<<"Auswertung der Dateiversionsnummer Fehlgeschlagen";
}
else
{
qDebug()<<"Version:"<<HIWORD(FesteInfo->dwFileVersionMS)<<"."
<<LOWORD(FesteInfo->dwFileVersionMS)<<"."<<HIWORD(FesteInfo->dwFileVersionLS)
<<"."<<LOWORD(FesteInfo->dwFileVersionLS);
}
}
delete Infoblock;
}
return a.exec();
}
Re: Versionsnummer einer Windowsdatei auslesen
Versionsnummer einer Windowsdatei auslesen
Habe ich zwar hier im Forum gefunden.
Aber ihrgendwie bekomme ich nichts passendes zum laufen. Bitte um Unterstützung.
Also ich habe in QT Creater ein .ui gebaut mit folgenden Elementen:
Ein Textfeld in dem man den Pfad zur Datei eingeben kann die abgefragt werden soll.
Einen Run Button zum Start den vorgangs,
mit der Funktion die ausgewählte Datei auszulesen und dann in einem
separaten Textfeld die Version anzeigen zu lassen.
Nur der Passende Scrpit bekomme ich nicht hin.
Wie gesagt. Bitte um hilfe.
Danke im vorraus.
Gruß Cospieler
Habe ich zwar hier im Forum gefunden.
Aber ihrgendwie bekomme ich nichts passendes zum laufen. Bitte um Unterstützung.
Also ich habe in QT Creater ein .ui gebaut mit folgenden Elementen:
Ein Textfeld in dem man den Pfad zur Datei eingeben kann die abgefragt werden soll.
Einen Run Button zum Start den vorgangs,
mit der Funktion die ausgewählte Datei auszulesen und dann in einem
separaten Textfeld die Version anzeigen zu lassen.
Nur der Passende Scrpit bekomme ich nicht hin.
Wie gesagt. Bitte um hilfe.
Danke im vorraus.
Gruß Cospieler
Bin noch Anfänger, bitte um Verständnis.