Dateiverknüpfungen Dateizuordnungen open/edit überprüfen ...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Dateiverknüpfungen Dateizuordnungen open/edit überprüfen ...

Beitrag von Xaby »

Mit

Code: Alles auswählen

RunProgram (DateiName)
kann ich einfach ein Programm starten, welches mir DateiName öffnet.

Zum Beispiel:

RunProgram("Test.txt") öffnet den Editor.
RunProgram("Test.CSV") Tabellenkalkulation
RunProgram("Test.JPG") einen Bildbetrachter ...

nun gibt es aber auch Endungen, die nicht verknüpft sind.

Wenn ich bei solchen Dateien mit RunProgram() versuche die Datei zu öffnen, erscheint folgender Text:

--------------------
Für diesen Vorgang ist keine Anwendung der angegeben Datei zugeordnet. Erstellen Sie ein Zuordnung, indem Sie unter "Systemsteurung" auf "Ordneroptionen" klicken.

[OK]

---------------------

Ich würde gern im Vorfeld wissen, ob eine Dateizuordnung vor liegt oder nicht. Genauso würde ich gern wissen, wie ich es anstelle, dass ich auslesen kann, mit welchem Programm eine Datei betrachtet wird und mit welchem sie bearbeitet wird.

Beispiel: JPEGs können viele Programme betrachten. Aber der Explorer kann es nicht bearbeiten. Dazu brauche ich ein Bildbearbeitungsprogramm.

Genauso Videos oder Musik. Bei Texten sind die Betrachter meist auch gleich die dazugehörigen Bearbeitungsprogramme.

Gibt es eine OS-unabhängige Lösung?

Ich würde gern eine Art [Öffnen mit / Bearbeiten mit] Option in einem ExplorerGadget haben ...

Klar, der User könnte jedes Mal mit einem OpenFileRequester das entsprechende BetrachterProgramm und BearbeiterProgramm raussuchen, aber die meisten Leute haben ja schon Verknüpfungen und wollen das nicht immer wieder einstellen müssen ...

Jemand eine Idee?

Pssst.: (wenn es geht, ohne Registry-FachChinesisch) /:->
http://www.purebasic.fr/german/viewtopi ... et&start=0

Dank euch. :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Pssst.: (wenn es geht, ohne Registry-FachChinesisch)
Ohne Erklärung, um so einfacher :wink:

Code: Alles auswählen

Procedure.s GetAssociatedProgram(Extension.s)
  Protected AssociatedProgram$, hKey.l, KeyValue.s, datasize.l, Pos.l

  KeyValue.s = Space(255)
  datasize.l = 255

  If RegOpenKeyEx_(#HKEY_CLASSES_ROOT, "." + Extension, 0, #KEY_READ, @hKey)  = #ERROR_SUCCESS
    If RegQueryValueEx_(hKey, "", 0, 0, @KeyValue, @datasize) = #ERROR_SUCCESS
      KeyNext.s = Left(KeyValue, datasize-1)
      hKey.l = 0
      KeyValue.s = Space(255)
      datasize.l = 255
      If RegOpenKeyEx_(#HKEY_CLASSES_ROOT, KeyNext + "\Shell\Open\Command", 0, #KEY_READ, @hKey) = #ERROR_SUCCESS
        If RegQueryValueEx_(hKey, "", 0, 0, @KeyValue, @datasize) = #ERROR_SUCCESS
          AssociatedProgram$ = Left(KeyValue, datasize-1)
        EndIf
      EndIf
    EndIf
  EndIf
  Pos = FindString(LCase(AssociatedProgram$), ".exe", 1)
  If Pos <> 0
    AssociatedProgram$ = Left(AssociatedProgram$, Pos + 4)
    AssociatedProgram$ = RemoveString(AssociatedProgram$, Chr(34), 1)
  EndIf

  ProcedureReturn AssociatedProgram$
EndProcedure

Define.s TXTProgramm = GetAssociatedProgram("txt")

If TXTProgramm = ""
  Debug "Für txt besteht keine Zuordnung"
Else
  Debug "txt ist " + GetFilePart(TXTProgramm) + " zugeordnet in " + GetPathPart(TXTProgramm)
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

du bist der Größte.

Noch ne Frage. Ich hab gemerkt, wenn ich normal im Explorer bin und eine Videodatei anklicke öffnet Windows sie mit dem Player, den ich als immer öffnen mit ... angegeben habe.

Wenn ich es aber über RunProgram() mache nimmt er einen anderen zugeordneten Player ...

Hast für mich da noch ne Lösung?


Und mit deiner Methode bekomme ich leider auch nur das noch zugewiesene Programm, aber nicht das eigentlich als Standard eingestellt ist. ABER DU BIST GUT, komme damit auf jeden Fall etwas weiter als ohne DU.

Dank dir, vielleicht läuft dir die andere Lösung ja auch über den Weg.

Oder kann ich irgendwo, wo du eine NULL stehen hast, auch andere Zahlen ausprobieren? Und damit alle verknüpften Programme bekommen?

:roll:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

Datei.s = ""
; statt:
RunProgram(Datei)
; dieses
ShellExecute_(0, @"open", @Datei, 0, 0, #SW_SHOW)
; weil PB führt zwar dasselbe aus, aber setzt den 2ten Parameter 0 statt "open"!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

In der PB-Hilfe gibt es glaub ich auch nicht alle Parameter.

Mir war so als hätte ich auch Befehle bei der Dateiverknüpfung wie oben beschrieben ... gesehen wie:

RUN
OPEN
EDIT
CREATE

... bin mir aber nicht sicher. Würde auch gern ne vollständige Liste davon haben. Denn dann wüsste ich ja auch, was zum Betrachten und was zum Bearbeiten ist.


>> hab's ersetzt
Nee, tut mir leid. Macht keinen Unterschied. Öffnet immer noch mit dem falschen Programm.

Aber wir kommen der Sache näher :mrgreen:

Kannste mir den Gefallen noch tun? :shock: :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Du kannst @"open" auch durch @"print" oder @"edit" ersetzen.
Default ist eigentlich 0, so wie PB das macht, aber "open" muß nicht Default
sein :mrgreen:
Oder war das umgekehrt, probier es aus, bis es passt :D
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Bei Videodateien gibt es auch noch PLAY oder?

Hängt vielleicht damit zusammen.

Noch eine SchbäschelFrage:

Ich weiß nun durch dich, welche EXE meine Daten öffnet.
Klingen aber komisch die Namen (meist :? :mrgreen: )

Nun gibt es doch EIGENSCHAFTEN und dann VERSION:
PRODUKTNAME ...

die Sachen, die man auch ganz gut mit dem jaPBe in den einstellen PROJEKT EINSTELLUNGEN unter VERSION einstellen kann ...

wie kann ich mir das von der EXE zurückgeben lassen oder vom Windows oder wie auch immer? Hoffe, es wird keine schwere HeaderArbeit draus ...

Kannst mir einen Tipp geben?

:allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Okay, du bist wirklich der allerbeste.

Folgendes hab ich festgestellt:

Auch wenn manchmal keine File Assoziation vorliegt, kann ich sie dennoch öffnen mit dem Explorer zum Beispiel oder Editor ...

sag mal, was war damals IsFunction()?

den gibt's wohl in PB 4.xx nicht mehr. Obwohl es in der History nicht als fehlend steht ...

???? :freak:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> sag mal, was war damals IsFunction()?

Code: Alles auswählen

GetFunction()
Einfach austauschen, dann läufts
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten