Seite 1 von 1
exe einer externen app finden ohne hdd durchsuchen
Verfasst: 9. Juli 2008 12:46
von T1c4L
Hi alle!
ich hab eine frage, falls ich QDesktopService falsch verstanden habe sagt mir bescheid, ich les dann nochmal nach!
mit QDesktopServices kann ich ja z.bspl. eine url ausführen ( "c:\text.doc" )
daraufhin wird ja die Datei mit einem entsprechendem regstrierten Program, was vermutlich beim windows beispiel word ist öffnen und die datei laden.
Gibt es eine Möglichkeit den Pfad zur word.exe im Vorfeld herauszubekommen?
Dank im voraus!
cheers,
mike
Verfasst: 9. Juli 2008 13:10
von ReaperX
Ich bin noch recht neu in Sachen Qt als nicht hauen

.
was mir Spontan da einfallen würde wären einmal Registry oder du versuchst über den Mime-Type an das verknüpfte Programm zu kommen. Beispielcode kann ich dir dafür allerdings grad nicht liefern.
Gruß
Sebastian
Verfasst: 9. Juli 2008 13:49
von T1c4L
wie könnt ich das machen? ich nutze STL c++ mit QT 4.3.4
Verfasst: 9. Juli 2008 14:33
von macman
Guck dir QSettings an, den Pfad zu Word findest du in der Registry unter HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe
Wie du jetzt heraus findest mit welcher App *.doc verknüpft ist, könnte ja auch OpenOffice oder Papyrus sein, das überlasse ich dir. Die Info findet sich bestimmt auch in der Registry

Verfasst: 9. Juli 2008 14:38
von T1c4L
Hi macman
QSettings werd ich mr mal anschauen, das mit word war nur einbeispiel...
gehen wir davon aus das ich nur die dateiendung habe bzw. das filename der zu öffnenden datei. Gibt es einen Weg herauszufinden wie die applicaion fuer die datei heisst?
Ihr kennt das doch wenn eine endung registriert ist kann man sie doppelklicken, sie wird automatisch mit der passenden anwendung geladen. wenn es keine anwednung gibt popt der dialog aufindem man eine anwendung auswählen kann.
Man muss doch irgendwie an diese information rankommen mittels QT.
=( help
Verfasst: 9. Juli 2008 14:52
von -=Freaky=-
T1c4L hat geschrieben:Man muss doch irgendwie an diese information rankommen mittels QT.
es wurde doch schon gesagt, dass diese verknuepfungen dateiendung<->programm unter windows wohl irgendwo in der registry stehen werden.
google mal danach, da wird bestimmt was zu finden sein.
unter linux systemen wird es wohl in irgendwelchen configs des desktop environments stehen.
mfg,
julian
Verfasst: 9. Juli 2008 16:18
von macman
T1c4L hat geschrieben:Man muss doch irgendwie an diese information rankommen mittels QT.
Mit Sicherheit nicht, wozu auch. Warum willst Du wissen mit welcher App irgendwas geöffnet wird? Um an die Informationen heran zu kommen wird so plattformspezifisch sein, das du selbst was basteln musst. Und wo man die Informationen her bekommt, wirst du an anderen Stellen fragen müssen, und zwar für jede Plattform einzeln.
Verfasst: 9. Juli 2008 17:13
von T1c4L
Warum willst Du wissen mit welcher App irgendwas geöffnet wird?
Ich halte dies besser als blind drauf eine Exe zu starten...
Beispiel.:
.mm Dateien sollen mit einem Tool (Freemind) geöffnet werden.
Ich könnte jetzt natürlich hatcodier den pfad zur freemind.exe via QProcess ausführen... fände ich aber sehr dämlich. Da die exe ja nicht immer im selben verzeichnis liegt. Sowas ist ja von PC zu PC anders. mal liegt sie in C:\Programme, mal direkt auf C:\ etc....
mit QDesktopServices kann ich diese .mm Datei öffnen lassen ohne zu wissen wo sich die Exe befindet... aber mit QDesktopServices hab ich keinen zugriff auf den process um zum Beispel rauszufinden ob der User die Application Freemind geschlossen hat.
Daher brauch ich den Pfad zur Exe.
Verfasst: 9. Juli 2008 17:15
von T1c4L
Ihr könnt doch ersehen worauf ich hinaus will oder? Vieleicht ist ja Qprocess der QDesktopservices dafuer der falsche ansatz...
Bin um hilfe sehr dankbar!
Thx an alle die bisher geantwortet haben!
Verfasst: 10. Juli 2008 07:35
von macman
T1c4L hat geschrieben:Ihr könnt doch ersehen worauf ich hinaus will oder?
Du willst die Kontrolle über den Prozess und das geht nur wenn Du ihn selbst startest, schon klar. Es gibt aber keinen Weg der auf allen Plattformen funktioniert, dafür ist das zu speziell. Unter Win steht alles in der Registry, beim Mac würde ich den launchd befragen und bei Linux weiß ich es gar nicht mehr. Schon Ewigkeiten nichts mehr mit gemacht.
Verfasst: 11. Juli 2008 16:50
von pfid
macman hat geschrieben:T1c4L hat geschrieben:Ihr könnt doch ersehen worauf ich hinaus will oder?
Du willst die Kontrolle über den Prozess und das geht nur wenn Du ihn selbst startest, schon klar. Es gibt aber keinen Weg der auf allen Plattformen funktioniert, dafür ist das zu speziell. Unter Win steht alles in der Registry, beim Mac würde ich den launchd befragen und bei Linux weiß ich es gar nicht mehr. Schon Ewigkeiten nichts mehr mit gemacht.
Nunja, man könnte ja zum Beispiel in die Quellen zu QDesktopServices schauen, und nachsehen wie Trolltech das macht
Da ist irgendwo ein Plattform-Switch und die entsprechenden Aufrufe. Vielleicht wird da sogar QProcess verwendet und man kanns einfach kopieren.
Verfasst: 12. Juli 2008 19:05
von macman
pfid hat geschrieben:Da ist irgendwo ein Plattform-Switch und die entsprechenden Aufrufe.
Aber auch nur wie man den Befehl an den Desktop übergibt. Der Service wird nicht nach dem entsprechenden Programm suchen und QProcess wird wahrscheinlich auch nicht benutzt. Das ist jetzt aber Theorie, hab nicht nach geguckt

Verfasst: 14. Juli 2008 11:19
von Sephral
Hallo,
unter Windows macht die Auflösung die shell32.dll über die Funktion "FindExecutable".
Der Funktion übergibt man den Pfad zur Datei als Parameter und bekommt den Pfad der verknüpften Anwendung zurück.
C++ Beispiele wie man die Funktion anspricht finden sich im Netz.
Ciao,
Sephral