Explorer - Drop auf eigenen Dateitypen ermöglichen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag 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)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag von STARGÅTE »

Auf eine Anwendung wie bei "open" kann ich garnicht verweisen ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag von RSBasic »

Möchtest du dein Dateityp nur mit deiner Anwendung verknüpfen oder was genau meinst du mit "open"?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag 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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag 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 ;-) .
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Explorer - Drop auf eigenen Dateitypen ermöglichen

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten