Auslesen, welchr datei type mit welchem programm gestartet w

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Auslesen, welchr datei type mit welchem programm gestartet w

Beitrag von hanibal »

Hallo,
Ich möchte gerne unter Gnome und unter KDE auslesen, welches Programm zum öffnen von welchen Dateitypen zuständig ist. so wie unter nautilus.

Am besten so, das man auch die liste mit den öffnen mit möglichkeiten kriegt.

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Auslesen, welchr datei type mit welchem programm gestart

Beitrag von theo »

Schön!
Find ich gut, dass das mal einer macht.
Viel Glück!

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

äh, das war eigentlich als frage gemient ;)

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Achso. Schade eigentlich. ;-)
Das Problem beginnt damit, dass man unter Linux eigentlich erstmal gar nicht wissen kann, welchen Dateityp man vorliegen hat.
Die Dateinamenserweiterung ist nämlich nicht vorgeschrieben.
Das kannste gerne mal ausprobieren. Entferne einfach z.B. in Konqueror die Erweiterung : test.png -> test
Konqueror zeigt dir trotzdem das PNG an.

Das ist in OpBitmap z.B. auch partiell umgesetzt.
Dort ist der releveante Teil der Mime Datenbank
http://www.freedesktop.org/wiki/Specifi ... -info-spec" onclick="window.open(this.href);return false;
im der Datei mimexml.pas drin und wird standardmässig mit opbitmapformats.pas in die Anwendung kompiliert.
in der Mime-Datenbank findet man mehr oder weniger komplizierte regeln, wie die Datei durch ihren Header zu bestimmen ist (Siehe tag )

Mir ist gerade aufgefallen, dass ich das in opbitmapformats nicht durchgezogen habe. Hier also der "Patch" (Siehe //NEU), wie opbitmapformats auch Dateien ohne Erweiterung öffnen kann.

opbitmapformats.pas Zeile: 264

Code: Alles auswählen

procedure TOPPicture.LoadFromFile(const FileName: string);
var cls: TOpBmpClass;
fs:TFileStream;
begin
  cls := GetClassFromMimeFile(FileName);
  //NEU
  if cls=nil then
  begin
   fs:=TFileStream.Create(FileName,fmOpenRead);
   cls:=GetClassFromMimeStream(fs);
   fs.free;
  end;
  //END NEU
 
  if cls <> nil then
  begin
    if fCurrentFormat <> nil then FreeAndNil(fCurrentFormat);
    fCurrentFormat := cls.create;
    if Assigned(fOnProgress) then fCurrentFormat.OnOPProgress := fOnProgress;
    (fCurrentFormat as cls).LoadFromFile(FileName);
    fMimeType := fLastMime;
  end else raise EPasBitMapError.Create('File Format not supported');
end;
Für das finden der mit dem Mime-Typen verknüpften Programme unter versch. DE ist mir nichts pfannenfertiges bekannt.
Vielleicht weiss Christian was. Er hat mal in Utils.pas mit gconftool-2 was gemacht.
Ansonsten Docs lesen und sich durch die Dateien hangeln. Es ist alles da, man muss nur wissen wie man's ausliest ;-)

Ich fänd's schön, wenn du das allgemein lösen könntest. Mindestens für Gnome/KDE.

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

http://cweiske.de/howto/launch/allinone.html" onclick="window.open(this.href);return false;

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

@creed steiger:
Mit kfmclient exec filename scheint irgendwas zu klappen.
Einen /usr/kde/ Folder hab ich aber z.B. unter OpenSuSE 10.2 nicht.
Das beantwortert Hanibals Frage nach der Liste verknüpfter Anwendungen eigentlich noch nicht.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

In meiner Utils Unit gibts das schon lang alles fix und fertig und Plattformunabhängig. Man müsste halt nur mal reinschaun :p.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:In meiner Utils Unit gibts das schon lang alles fix und fertig und Plattformunabhängig. Man müsste halt nur mal reinschaun :p.
Immer schön den Ball flach halten ;-)

Deine Lösung ist ein Anfang. Aber so richtig Plattformunabhängig ist das nicht.
Die Pfade, die du in GetProcessforExtension auslesen willst:
/usr/share/application-registry/
/usr/share/mime-info/
existieren auf meinem Suse KDE noch nicht mal.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Bei allen Debian basierenden funktionierts, mit SuSE hab ichs nie probiert. Wär trotsdem sicher besser als ganz von vorn anzufangen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

bei mir exestieren diese, und ich habe mir diese auch schon angeguckt, aber meine frage ist erstmal ja nicht, wie ich erfahre welchen mime tipe eine datei hat, sondern welche anwendung zu verwenden ist bei welchem mime type.

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

ich habe sie gerade unter debian gefunden :)

/etc/gnome-vfs-2.0/defaults.list


@Cristian: Unter welcher Lizenz steht deine Utils.pas eigentlich? kann ich die für ein gpl programm nutzen?

PS: Mann kann auch einfach gnome-open benutzen ;)

Danke für eure Hilfe :)
Zuletzt geändert von hanibal am So 3. Feb 2008, 12:35, insgesamt 3-mal geändert.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Plattformunabhängig ist aber eben nicht _nur_ auf allen debian-basierten Distributionen läufts ;)
Johannes

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

Ja, aber fürn anfang reicht es ja.

Das programm was ich schreeiben will soll sowieso ein Pluginsystem bekommen, dann kann man später einfach ein Suse Plugin schreiben, bzw ein KDE Plugin. Wobei ich das Programm eigentlich sowieso nur für Gnome Schreiben will, aber mal schauen, mit Lazarus ist es ja relativ einfach aus einem GTK+ Programm ein QT Programm zu machen ;)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wenn wir schon beim Klugscheissen sind, Plattformunabhängig ist nicht möglich.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

KDE regelt das intern so:
http://developer.kde.org/documentation/ ... /mime.html" onclick="window.open(this.href);return false;
muss ich mir mal näher betrachten

kfmclient exec,
gnome-open,
exo-open oder
xdg-open
sind natürlich Alternativen,bieten aber keine
Auswahl an sondern starten direkt.

Antworten