Seite 1 von 2

Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 04:45
von STARGÅTE
Tachchen,

ich möchte gerne auch eine Aktion starten lassen, wenn ich (wie bei .exe oder .zip) eine andere Datei per Drag&Drop auf diese Datei ziehe.

Im Netz habe ich Creating Drop Handlers gefunden, womit ich jedoch leicht überfordert bin.

Hat jemand von euch schon Erfahrung damit oder gar ein Stück Code ?

Hintergrund: Ich habe mir mein eigenes Container-Format geschrieben, und möchte nun eben auch Dateien durch Drop direkt hinzufügen, ohne erst mein Container zu öffnen (dort hab ich ja Drop, dank PB)

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 13:04
von RSBasic
1. Du generierst eine ClassID/GUID:

Code: Alles auswählen

EnableExplicit

Procedure.s MakeGUID()
  Protected guid.GUID, lpsz.s{76}
  If CoCreateGuid_(@guid) = #S_OK
    ProcedureReturn PeekS(@lpsz, StringFromGUID2_(guid, @lpsz, 76), #PB_Unicode)
  EndIf
EndProcedure

MessageRequester("","GUID: "+MakeGUID(),0)
2. Du musst ein paar Registry-Einträge erstellen und zwar die, die auf der MSDN-Seite beschrieben sind:

Dann müsste das eigentlich funktionieren.

Die Registry-Beispielcodes fürs Lesen und Schreiben findest du hier im Forum, wenn du z.B. nach RegCreateKeyEx suchst.

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 13:13
von DarkDragon
Dafür musst du eine COM DLL schreiben, was mit PB wirklich grauenvoll ist:
http://msdn.microsoft.com/en-us/library/cc144165(v=vs.85).aspx#implement hat geschrieben:Implementing Drop Handlers

Like all Shell extension handlers, drop handlers are in-process Component Object Model (COM) objects implemented as DLLs. They export two interfaces in addition to IUnknown: IPersistFile and IDropTarget.
Viele COM DLLs exportieren globale Variablen etc., was in PB nicht implementiert ist. Man müsste also auf die FASM Ebene runtergehen und dort die Symbole zusätzlich exportieren beim schreiben der DLL.

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 14:38
von STARGÅTE
Auf eine Anwendung wie bei "open" kann ich garnicht verweisen ?

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 14:43
von RSBasic
Möchtest du dein Dateityp nur mit deiner Anwendung verknüpfen oder was genau meinst du mit "open"?

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 14:44
von DarkDragon
STARGÅTE hat geschrieben:Auf eine Anwendung wie bei "open" kann ich garnicht verweisen ?
Nein. Schon bei Windows Vista war diese Methode veraltet soweit ich weiß. Alles wird COM!

@RSBasic:
Nein, er will wenn man etwas auf einen von ihm registrierten Dateitypen draufschmeißt wissen, was es ist.

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 15:09
von RSBasic
Hm okay,
aber ginge das nicht automatisch?
Wenn man einen Dateityp mit einer eigenen Anwendung verknüpft und man nimmt irgendeine Datei und dropt es auf die Datei mit dem registierten Dateityp, dann müsste doch danach automatisch die Anwendung, die mit dem Dateityp verknüpft ist, gestartet werden und in der Anwendung kann man mit ProgramParameter ermitteln, welche beliebige Datei gedropt wurde:
Bild

Oder habe ich dich falsch verstanden und er will was ganz anderes?

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 15:12
von DarkDragon
RSBasic hat geschrieben:Hm okay,
aber ginge das nicht automatisch?
Wenn man einen Dateityp mit einer eigenen Anwendung verknüpft und man nimmt irgendeine Datei und dropt es auf die Datei mit dem registierten Dateityp, dann müsste doch danach automatisch die Anwendung, die mit dem Dateityp verknüpft ist, gestartet werden und in der Anwendung kann man mit ProgramParameter ermitteln, welche beliebige Datei gedropt wurde:
Bild

Oder habe ich dich falsch verstanden und er will was ganz anderes?
Nein, du hast alles richtig verstanden, doch es geht nicht automatisch ;-) .

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 15:19
von RSBasic
Danke für deine Antwort.

Ich wollt' eigentlich einen neuen Film anschauen, aber egal.
Ich hab einen neuen Dateityp in der Registry erstellt und wollte eine beliebige Datei auf meine Datei droppen.
Hm mist, jetzt weiß ich, wo das Problem liegt.
Ich werd mal ein bisschen herumexperimentieren.

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Verfasst: 12.03.2011 15:42
von RSBasic
Ok habs versucht :mrgreen: , ich hab im Prinzip alles gemacht, was man machen sollte, außer natürlich die Befehlaufrufe über COM+, aber am Ende hat es leider immernoch nicht funktioniert.