Frage: File Association für einen Musik Player

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Frage: File Association für einen Musik Player

Beitrag von udg »

Hallo.

Ich habe folgendes Script gefunden und nach bestem Wissen für meine Zwecke erweitert.
Nun, mehr als das ganze in die Registry eintragen tut es aber noch nicht...

... weder das Player Icon wird für das entsprechende SoundfileFormat übernommen, noch kann ich dann das entsprechende SoundFile doppelklicken, sodass es mir dann automatisch den Player öffnet und abgespielt wird.

Kann mir bitte jemand helfen der dies schon einmal bewerkstelligt hat und genau weiss wie dies zu realisieren ist?
Leider hatte ich beim 3ten Versuch falsche Fehler im Code die mir dann die Reg zerschossen hat und ich den PC neu aufsetzen musste. :shock: :shock:

ACHTUNG: UMSCHREIBEN AM CODE KANN WIE
OBEN GESCHRIEBEN, DAS SYSTEM RUINIEREN.

weiterin ist der hier aufgeführte Code nicht richtig. Nur mein erster Versuch gewesen.
Hier mein Script:

Code: Alles auswählen

#SHCNE_ASSOCCHANGED = $8000000
#SHCNF_IDLIST = $0

Define.s extension, fileType, description, icon, open
Define.i fileKey, shellKey, keyPtr

extension = ".v2m"
fileType = "V2MPlayer.File.v2m"
RegCreateKey_(#HKEY_CLASSES_ROOT, extension, @keyPtr)
RegSetValue_(keyPtr, "", #REG_SZ, @fileType, 0)

description = "v2m module"
fileKey = RegCreateKey_(#HKEY_CLASSES_ROOT, fileType, @keyPtr)
RegSetValue_(keyPtr, "", #REG_SZ, @description, 0)

icon = "c:\V2M Player_Beta.exe ,-1"   ;replace with ProgramFilename() + ",-1"
RegCreateKey_(fileKey, "DefaultIcon", @keyPtr)
RegSetValue_(keyPtr, "", #REG_SZ, @icon, 0)

open = "c:\V2M Player_Beta.exe %1"   ;replace with ProgramFilename() + " %1"
shellKey = RegCreateKey_(fileKey, "shell", @keyPtr)
RegCreateKey_(shellKey, "open", @keyPtr)
RegSetValue_(keyPtr, "", #REG_SZ, @open, 0)

SHChangeNotify_(#SHCNE_ASSOCCHANGED, #SHCNF_IDLIST, 0, 0)
LG
Zuletzt geändert von udg am 12.02.2014 01:05, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
N00B
Beiträge: 122
Registriert: 11.07.2007 22:28

Re: Frage: File Association für einen Musik Player

Beitrag von N00B »

Mein Tip, benutz VirtualBox und setz da ein virtuelles Windows auf (das kannst zurücksetzen wenn es zurschossen hast)
und probier erst mal die internen Windows Befehle für solche Experimente in dem virtuellen Windows (um überhaupt zu gucken, ob es gehen würde, wenn denn was in die Registry geschmissen wird)

Mit dem Windows Shell Befehl "Reg" kannst Registry Keys setzen usw

Code: Alles auswählen

Konsolenregistrierungsprogramm für Windows - Version 3.0
Copyright (C) Microsoft Corp. 1981-2001. Alle Rechte vorbehalten


REG Befehl [Parameterliste]

  Befehl  [ QUERY   | ADD    | DELETE  | COPY    |
            SAVE    | LOAD   | UNLOAD  | RESTORE |
            COMPARE | EXPORT | IMPORT ]

Rückgabecode: (Mit Ausnahme von REG COMPARE)

  0 - Erfolgreich
  1 - Fehlgeschlagen

Geben Sie Folgendes ein, um die Hilfe für einen Befehl anzuzeigen:

  REG Befehl /?

Beispiele:

  REG QUERY /?
  REG ADD /?
  REG DELETE /?
  REG COPY /?
  REG SAVE /?
  REG RESTORE /?
  REG LOAD /?
  REG UNLOAD /?
  REG COMPARE /?
  REG EXPORT /?
  REG IMPORT /?
http://de.wikipedia.org/wiki/VirtualBox
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage: File Association für einen Musik Player

Beitrag von udg »

Danke für deinen Beitrag. Habe alles perfekt inzwischen eingearbeitet und funktioniert.

Es schreibt mir die Registry Keys für die Befehle:
~ eigenes Icon (wird aus der Player Exe gelesen und für die Soundfiles übernommen
~ doppelklick der Musikdatei öffnet den Player und spielt die Musik ab

alles so wie es sein soll.

nochmals vielen Dank.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
N00B
Beiträge: 122
Registriert: 11.07.2007 22:28

Re: Frage: File Association für einen Musik Player

Beitrag von N00B »

Gerngeschehen :)

Freut mich das alles so funzt wie es soll, jetzt kennst ja VirtualBox, ist echt richtig nützlich das Teil :allright: da kannst dich so richtig austoben :bounce:
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage: File Association für einen Musik Player

Beitrag von udg »

Ich hatte es so gelöst:
einen Wiederherstellungspunkt angelegt, dann probiert und wenns Fehler gab, System zurückgesetzt.
Funzt :) und passt so.

Virtuelle Umgebung wollte ich nicht erst installieren. Hatte auch erst die Idee das Ganze über ein 2tes Benutzerkonto zu machen aber dort ist die Registry Systemübergreifend. (bringt also nix)

Einziges Problem was ich im Moment noch habe:
Wenn ich ein anderes Soundfile doppelklicke öffnet es mir den Player erneut. Der Sound wird also nicht in den bereits geöffneten player geladen und abgespielt.
Muss ich noch suchen wie es richtig gemacht wird.

Grüße
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Frage: File Association für einen Musik Player

Beitrag von Bisonte »

Eventuell mal bei einem anderen Player in der Registry "abgucken", wie der das macht.... WMP oder evt. WinAmp.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Re: Frage: File Association für einen Musik Player

Beitrag von jear »

Wenn ich ein anderes Soundfile doppelklicke öffnet es mir den Player erneut. Der Sound wird also nicht in den bereits geöffneten player geladen und abgespielt.
Eine der Lösungen:

Wenn der Player startet, prüft er, ob bereits ein Kumpel läuft. Dieser hat zuvor ein Mutex creiert z.B. "Player schon unterwegs". Daher wird der Versuch diesen Mutex erneut zu erstellen mit einem Fehler abgewiesen. In diesem Falle muss der zweite Player dem Fenster des Ersten per Message Pfad und Namen der neuen Datei senden und sich sang und klanglos beenden. Der Erste stoppt das Abspielen der vorherigen Datei und startet die neue Datei.

Klingt kompliziert, ist es aber nicht.

Code: Alles auswählen

; Wenn Player schon läuft
Player_running = CreateMutex_(0, 0, @"Player schon unterwegs") 

If GetLastError_() = #ERROR_ALREADY_EXISTS
  
  ; finde Fenster des ersten Players
  ; sende diesem Fenster Pfad und Dateinamen
  ; warte Quittung ab
  
  End
  
EndIf ; ERROR_ALREADY_EXISTS ============>>>>
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage: File Association für einen Musik Player

Beitrag von udg »

Danke für den Code Schnipsel.

Leider finde ich noch nicht den passenden Code um das Ganze ordentlich lauffähig zu bekommen.

im Moment ist es so:
der Player startet, wenn ich nun auf ein Soundfile doppelklicke schließt sich der Player und ein neuer wird geöffnet und spielt den neuen Sound.
so solls ja aber nicht sein :(

zum verzweifeln.

Ich häng mal den Player als Beispiel an:
http://rghost.net/private/52395439/f3b9 ... 6da5d6e104

Wie realisiere ich, dass es nur einen neuen Song reinlädt (nicht den Player schließt und wieder neu öffnet) und natürlich die Position des Players nicht verändert. denn beim Neustart wird dieser ja immer zentriert geladen.

Danke Euch
LG
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
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

Re: Frage: File Association für einen Musik Player

Beitrag von ts-soft »

Den Tipp von jear befolgen!

Bei jedem Start feststellen, bin ich die erste Instance (per CreateMutex_() oder auch durch eine
Datei).
Bin ich nicht die erste Instance, dann das Handle zur ersten Instance ermitteln und z.B. per
#WM_COPY_DATA den zu spielenden Titel mitteilen.
Danach nur noch beenden, die erste Instance muß nur noch auf die Message reagieren und
den übermittelten Titel abspielen.
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
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage: File Association für einen Musik Player

Beitrag von udg »

hallo,

ich habe mit seinem Beispiel angefangen und stecke jedoch fest. das Fenster wird nicht erkannt. Keine ahnung warum.
Der Player besteht aus 2 Fenstern.
Fenster 0 beinhaltet die Grafik und Fenster 1 die Gadgets und den Code.
Beide sind verknüpft mit: SetWindowCallback(@MainCallback(), 1)
sodass man sie nur zusammen verschieben kann (sie nicht unabhängig voneinander rumschwirren)

im Moment: Ratlosigkeit. werde weiterprobieren

Danke
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten