AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Datei per Doppelklick dem bereits geöffneten Programm übergeben

Datei per Doppelklick dem bereits geöffneten Programm übergeben

Ein Thema von Friday · begonnen am 2. Jan 2017 · letzter Beitrag vom 3. Jan 2017
Antwort Antwort
Seite 1 von 3  1 23   
Friday

Registriert seit: 6. Mai 2008
104 Beiträge
 
Delphi 11 Alexandria
 
#1

Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 13:30
Hallo,
ich lasse nur eine Instanz meiner Anwendung zu, mit folgendem Code:
Code:
Initialization
  mHandle:=CreateMutex(nil,True,'Programmname');
  if GetLastError=ERROR_ALREADY_EXISTS then
    Halt;

finalization
  if mHandle<>0 then
    CloseHandle(mHandle)
Wenn ich eine Datei mit der Endung die meinem Programm zugewiesen ist, doppelklicke öffne ich sie in dem ich ParamStr(x) in der FormShow Routine meiner Anwendung überprüfe und dann die Datei-Öffnen-Routine aufrufe.

Bloss wie mache ich es wenn ich auf eine Datei meiner Endung doppelklicke und mein Programm bereits geöffnet ist? Ich müsste for dem "Halt" die ParamStr(x) auslesen und der ersten Instanz meines Programmes übergeben. Ist das ein Fall für SharedMemory oder die COM Schnittstelle oder gibt es auch einen einfacheren / direkteren Weg an den ich jetzt nicht denke?

danke schonmal
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 13:37
WM_COPYDATA fällt mir da spontan ein. Beispiele sollten sich im Forum finden lassen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.145 Beiträge
 
Delphi 12 Athens
 
#3

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 14:21
IPC

mail-slots
pipes
messages
named MMF oder unnamed MMF via message (RegisterWindowMessage+SendMessage)
uvm.

Und mit Delphi-Referenz durchsuchenHalt beendet man kein VCL-Programm, jedenfalls nicht, wenn man es "ordentlich" machen will.
Entweder wie in der OH genannt oder garnicht erst ins Application.Run reinlaufen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Jan 2017 um 14:24 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.173 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 14:23
Und mit Halt beendet man kein VCL-Programm, jedenfalls nicht, wenn man es "ordentlich" machen will.
Was ist denn daran nicht ok? Vor allem wenn er es im init-Block seiner DPR anscheinend macht.
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#5

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 14:36
Ich würde das mit GlobalAlloc und einer WM_USER-Nachricht machen. WM_COPYDATA erfordert ein eigenes Fenster, das Dir beim Programmbeginn noch nicht zur Verfügung steht.

Ablauf:
Code:
GlobalAlloc(ausreichende Größe, um den übergebenen Dateipfad darin unterzubringen)
GlobalLock()
Pfad in den Speicherbereich übertragen
GlobalUnlock()
SendMessage(WM_USER+x, Handle aus GlobalAlloc)

Verarbeiten im empfangenden Programm:
GlobalLock
herauskopieren des Inhalts
GlobalUnlock
PostMessage (z.B: WM_USER+x+1)
Return

GlobalFree()
Beenden

Geändert von Mikkey ( 2. Jan 2017 um 14:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 14:52
WM_COPYDATA erfordert ein eigenes Fenster, das Dir beim Programmbeginn noch nicht zur Verfügung steht.
Wieso? Sein Programm läuft doch schon, also ist auch ein Fenster da, an das man die Nachricht schicken kann.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#7

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 15:04
WM_COPYDATA erfordert ein eigenes Fenster, das Dir beim Programmbeginn noch nicht zur Verfügung steht.
Wieso? Sein Programm läuft doch schon, also ist auch ein Fenster da, an das man die Nachricht schicken kann.
Zitat aus der MS-Doku:
Zitat:
Parameters
wParam
A handle to the window passing the data.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.145 Beiträge
 
Delphi 12 Athens
 
#8

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 18:09
Auch dein SendMessage braucht ein Window-Handle, genauso wie WM_COPYDATA.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#9

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 18:40
Auch dein SendMessage braucht ein Window-Handle, genauso wie WM_COPYDATA.
Aber nur für das Zielfenster, das sich mit FindWindow leicht herausfinden lässt. Bei WM_COPYDATA ist ein Fenster des Senders erforderlich (warum auch immer).
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

AW: Datei per Doppelklick dem bereits geöffneten Programm übergeben

  Alt 2. Jan 2017, 18:55
Von "erforderlich" kann ich im MSDN aber nirgends etwas lesen. Vielmehr verstehe ich das so, dass man hier optional das Fensterhandle des Senders hinterlegen kann. Ich würde es einfach mal mit einer 0 probieren, sollte das nicht klappen, mit HWND_MESSAGE oder so.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz