![]() |
"Datenträgerdialog" & Bilder von Datenträger ü
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ich möchte mein Programm gerne in dem im Anhang zu findenen Dialog eintragen. Dieser Dialog erscheint ja immer, wenn man einen Datenträger, wie z.B. USB-Stick od. Kamera (für mich wichtig anschließt). Natürlich möchte ich mich nicht nur eintragen, sondern mein Programm soll beim Anwählen auch gestartet werden. Ich möchte genauso wie im Screenshot Bilder von USB-Stick und Kamera auf die Festplatte übertragen. Wie komme ich da z.B. an die Parameter (Laufwerksbuchstaben) ran? Der eigentliche Kopiervorgang ist ja bei einem USB-Stick kein Problem, aber vielleicht bei der Kamera: Da gibt es ja allerhand Technologien wie WIA oder TWAIN. Muss ich die verwenden, oder darf ich die Kamera ganz normal als Datenträger behandeln (wäre praktisch)? Vielen Dank, Andreas |
Re: "Datenträgerdialog" & Bilder von Datenträg
*push*
MSDN-Suchbegriffe, etc. wären auch schon hilfreich. Allerdings weiß ich ja nicht einmal wie der Dialog heißt... Vielen Dank, Andreas |
Re: "Datenträgerdialog" & Bilder von Datenträg
*push*
|
Re: "Datenträgerdialog" & Bilder von Datenträg
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
soweit habe ich es zumindest bei mir geschafft, dass bei Bildern mein Programm angezeigt wird und auch gestartet werden kann.
Delphi-Quellcode:
Getestet mit WinXP SP1.
uses
Registry; procedure TForm1.Button1Click(Sender: TObject); var Reg : TRegistry; ProgPfad: AnsiString; begin ProgPfad:= 'C:\Project1.exe'; Reg:= TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\ShowPicturesOnArrival\', true) then begin Reg.WriteString('MBMyBild',''); Reg.CloseKey; end; if Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MBMyBild\', true) then begin Reg.WriteString('Action','Mein Bild öffnen'); Reg.WriteString('DefaultIcon',ProgPfad+',0'); Reg.WriteString('InvokeProgID','My.Bilder'); Reg.WriteString('InvokeVerb','ShowMyBild'); Reg.WriteString('Provider','Bild Test'); Reg.CloseKey; end; Reg.RootKey := HKEY_CLASSES_ROOT; if Reg.OpenKey('\CLSID\{51BD566E-A02D-4387-9A82-D929EA8C20B1}\LocalServer32\', true) then begin Reg.WriteString('', ProgPfad); Reg.CloseKey; end; if Reg.OpenKey('\CLSID\{51BD566E-A02D-4387-9A82-D929EA8C20B1}\ProgID\', true) then begin Reg.WriteString('','My.Bilder'); Reg.CloseKey; end; if Reg.OpenKey('\My.Bilder\', true) then begin Reg.WriteString('','My.Bilder'); Reg.CloseKey; end; if Reg.OpenKey('\My.Bilder\CLSID\', true) then begin Reg.WriteString('','{51BD566E-A02D-4387-9A82-D929EA8C20B1}'); Reg.CloseKey; end; if Reg.OpenKey('\My.Bilder\Shell\ShowMyBild\DropTarget', true) then begin Reg.WriteString('CLSID','{51BD566E-A02D-4387-9A82-D929EA8C20B1}'); Reg.CloseKey; end; finally Reg.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); var Reg : TRegistry; begin Reg:= TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\ShowPicturesOnArrival\', false) then begin Reg.DeleteValue('MBMyBild'); Reg.CloseKey; end; if Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\', false) then begin if reg.KeyExists('MBMyBild') then Reg.DeleteKey('MBMyBild'); Reg.CloseKey; end; Reg.RootKey := HKEY_CLASSES_ROOT; if Reg.OpenKey('\CLSID\', false) then begin if reg.KeyExists('{51BD566E-A02D-4387-9A82-D929EA8C20B1}') then Reg.DeleteKey('{51BD566E-A02D-4387-9A82-D929EA8C20B1}'); Reg.CloseKey; end; if reg.KeyExists('\My.Bilder\') then Reg.DeleteKey('\My.Bilder\'); finally Reg.Free; end; end; Du kannst dich ja auch selber noch mit der Registry beschäftigen. Unter dem Schlüssel 'SOFTWARE\Microsoft\Windows\CurrentVersion\Explore r\AutoplayHandlers\EventHandlers' konnte man auch noch andere Sachen wie Bilder eintragen. Ich habe eben gerade nach den Suchbegriff ShowPicturesOnArrival gesucht, eventuell kommst du damit noch weiter. |
Re: "Datenträgerdialog" & Bilder von Datenträg
Vielen Dank für die Antwort!
Ich habe leider aus schulischen Gründen nicht sofort Zeit mich damit zu befassen. Bei eventuellen Fragen werde ich mich wieder melden. Vielen Dank, Andreas |
Re: "Datenträgerdialog" & Bilder von Datenträg
Vielen Dank noch einmal für die Unterstützung!
Ich hab erstmal herausgefunden, wie ich meine Anwendung registriere, damit ich in der Liste aufscheine. Mein einziges Problem ist nur noch das reagieren meiner Anwendung auf die Events. Zur Zeit will ich sowieso nur auf volume-basierte Devices zugreifen (die meisten modernen Kameras decke ich damit ja ab). Zu diesem Zweck habe ich mir ![]() Da steht unter anderem: Zitat:
Zitat:
Muss ich da eine Shell-Extension schreiben? Ich steh etwas planlos davor... :gruebel: Was ich erreichen will ist, dass entweder meine bereits geöffnete Anwendung benachrichtigt wird, oder falls nicht vorhanden, meine Anwendung geöffnet wird. Da würde sich eine Shell-Extension anbieten oder nicht? Sie bearbeitet die Events und reicht sie an die Hauptanwendung weiter. Nur wie leite ich sie weiter? Oder denke ich völlig falsch? Und kann ich das IDropTarget-Objekt gleichzeitig dazu verwenden, Dateien vom Explorer per Drag & Drop zu öffnen? Oder sind diese beiden IDropTargets zwei verschiedene paar Schuhe? Vielen Dank, Andreas |
Re: "Datenträgerdialog" & Bilder von Datenträg
Hi,
was IDropTarget betrifft hilft dir eventuell ![]()
Delphi-Quellcode:
noch anpassen und deine GUID eintragen, die auch in der Registry steht.
Class_test1: TGUID = '{35F45D48-100C-4603-AA40-D10516B07704}';
Als ich meinen USB Stick auf dem sich auch Bilder befinden hineinsteckte erscheint ja dieser Dialog. Dort habe ich auf meinen Eintrag geklickt und plötzlich stand in der ListBox jedenfalls das Laufwerk 'E:\', also der Laufwerksbuchstabe des Sticks. Meine bereits geöffnete Anwendung mit der Listbox wurde in dem Moment also benachrichtigt. Zitat:
|
Re: "Datenträgerdialog" & Bilder von Datenträg
Hmmm, danke!
Naja ganz das Wahre scheint deine Lösung nicht zu sein. Immerhin berichtet der Threadstarter davon: Zitat:
Es scheint darauf hinauszulaufen, einen COM-Server zu schreiben (Automatisierungsobjekt), der IDropTarget implementiert. Zitat:
Zitat:
Wo implementiere ich IDropTarget? Schreibe ich eine Shellextension, oder baue ich das direkt in meine Anwendung ein? Ich würde zu letzterem tendieren, da ich dann das IDropTarget unter Umständen auch direkt für OLE-Drag & Drop verwenden kann (Näheres dazu wäre toll). Die Frage ist für mich: Wie kann man den OleServer da richtig implementieren. Denn ich würde dieses Interface gern extra in einem Objekt kapseln und nicht so "nebenbei" im TForm "mitimplementieren" (Vor allem, da das anscheinend wie im Zitat ersichtlich Nebenwirkungen hat.). Wär gut, wenn sich da irgendein OLE/COM-Guru äußern könnte. ![]() Zitat:
Danke, Andreas |
Re: "Datenträgerdialog" & Bilder von Datenträg
Ich habe mich jetzt etwas über das IDragDrop-Interface informiert.
Normalerweise scheint das IDragDrop-Interface für OLE-Drag & Drop verwendet zu werden. Im Falle der Autoplay-Handler verwendet man anscheinend ebenfalls dieses Interface. Hoffentlich ist das selbe Interface gemeint, weil im Autostart-MSDN-Artikel steht, dass dieses Interface erst ab WinXP existiert. An anderer Stelle im MSDN wird so getan, als gäbe es das schon ewig. Ich werde jetzt einmal versuchen mir so eine IDragDrop-Komponente zu bauen und dann mal sehen, ob das dann auch gleich funktioniert, oder ob es da noch einige Probleme gibt. EDIT: Eine Sache ist mir noch unklar: Zitat:
Wie lange das dauert, weiß ich noch nicht so genau, da man ja auch noch an seiner Matura basteln muss. ;-) Für weitere Unterstützung bin ich weiterhin dankbar (Insbesondere, was meine vorigen Fragen betrifft). Vielen Dank, Andreas |
Re: "Datenträgerdialog" & Bilder von Datenträg
Zitat:
was ich noch fragen wollte startet nun bei dir das Programm (bei meinem Code 'C:\Project1.exe') wenn man auf den selbst erstellten Eintrag im Dialog klickt? Also bei mir wird das Programm gestartet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz