AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datei mit laufendem Programm öffnen!
Thema durchsuchen
Ansicht
Themen-Optionen

Datei mit laufendem Programm öffnen!

Ein Thema von BurtaN · begonnen am 25. Jan 2008 · letzter Beitrag vom 25. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
BurtaN

Registriert seit: 25. Jan 2008
35 Beiträge
 
Delphi 2009 Professional
 
#1

Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 15:11
Hallo,

ich versuche im Moment ein Programm zu schreiben, mit dessen Hilfe ich eine Datei aus dem Explorer in einem bereits laufendem Programm öffnen kann. Ich habe es schon mit ShellExecute versucht, doch dann wird das Programm immer neu gestartet. Eine weitere Möglichkeit wäre vllt. Drag and Drop. Man müsste simulieren dass die Datei in das Programm "gedropped" wird. Jedoch unterstützt das Programm zwei Arten Drag and Drop, je nachdem wo im Interface die Datei "gedropped" wird. Wie man das umsetzen könnte, habe ich bis jetzt noch nicht herausgefunden. Ich habe es lediglich geschafft, den THandle des Programmes zu finden.
Vielleicht kennt ihr auch eine ganz andere, viel einfachere Möglichkeit.

Vielen Dank für jegliche Hilfe!

BurtaN
Miniaturansicht angehängter Grafiken
bild3_130.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#2

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 16:10
Erstmal und herzlich willkommen .

Hab ich das richtig verstanden? Du schreibst ein Programm A, damit du eine Datei X in Programm B öffnen/laden kannst? Wozu das?
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 18:01
Zitat von BurtaN:
Man müsste simulieren dass die Datei in das Programm "gedropped" wird. Jedoch unterstützt das Programm zwei Arten Drag and Drop, je nachdem wo im Interface die Datei "gedropped" wird.
Hi,

dieser Beitrag könnte dafür interessant sein.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
BurtaN

Registriert seit: 25. Jan 2008
35 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 19:35
Ja,es geht darum, dass ich das Programm zum Musik machen verwende und es leider keine Setlist unterstütz. Das heißt ich muss beim Songwechsel immer mit der Maus das nächste Stück suchen und laden. Wenn ich noch Midi implentieren könnte, bräuchte ich weder Maus noch Tastatur.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 20:30
es kommt beim drag & drop drauf an wie es implementiert ist. Wenn einfach nur auf wm_dropfiles reagiert wird genügt es wenn du die entsprechende Nachricht schickst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
BurtaN

Registriert seit: 25. Jan 2008
35 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 20:37
Delphi-Quellcode:
function DropFilesOnWnd(AWnd: HWND; AFiles: String): Boolean; overload;
var LInfo: PDragInfoA;
    LRes: Boolean;
    LHGlobal: Cardinal;
begin
  LRes := False;
  if copy(AFiles, length(AFiles), 1) <> #0 then
    AFiles := AFiles + #0;
  LHGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDragInfoA) + length(AFiles) + 1);
  if LHGlobal <> 0 then
  begin
    LInfo := GlobalLock(LHGlobal);
    if LInfo <> nil then
    begin
      LInfo.uSize := SizeOf(TDragInfoA);
      Move(AFiles[1], PChar(Cardinal(LInfo) + LInfo.uSize)^, length(AFiles));
      GlobalUnlock(LHGlobal);
      LRes := PostMessage(AWnd, WM_DROPFILES, LHGlobal, 0);
    end;
    if not(LRes) then
      GlobalFree(LHGlobal);
  end;
  result := LRes;
end;

function DropFilesOnWnd(AWnd: HWnd; AFiles: TStringlist): Boolean; overload;
begin
  result := DropFilesOnWnd(AWnd, StringReplace(AFiles.Text, #13#10, #0, [rfReplaceAll]));
end;
Habe den Code benutzt aus dem verlinkten Thread. Er Funktioniert, wenn ich z.B. Wordpad als Ziel nehme. Das Ergebnis ist das gleiche als wenn ich die Datei mit dem Wordpad öffne, es funktioniert also. Falls ich es jedoch an mein Programm sende, passiert gar nichts. Ebenso passiert nichts, wenn ich eine Musik-File an Windows Media Player sende. Liegt das dann an der Drag and Drop Implentierung vom jeweiligen Programm? Was wiederrum bedeuten würde, dass ich solange Drag and Drop Möglichkeiten testen müsste, bis ich die passende zur Implentierung gefunden habe?

Danke für die guten Tipps bis jetzt!
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 20:49
Zitat von BurtaN:
Jedoch unterstützt das Programm zwei Arten Drag and Drop, je nachdem wo im Interface die Datei "gedropped" wird. Wie man das umsetzen könnte, habe ich bis jetzt noch nicht herausgefunden. Ich habe es lediglich geschafft, den THandle des Programmes zu finden.
Zitat von BurtaN:
Liegt das dann an der Drag and Drop Implentierung vom jeweiligen Programm? Was wiederrum bedeuten würde, dass ich solange Drag and Drop Möglichkeiten testen müsste, bis ich die passende zur Implentierung gefunden habe?
Kann natürlich auch sein, dass du das Handle des entsprechenden WinControls nehmen muss und nicht das des Hauptfensters.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 20:49
ungeachtet der Methode...

du sagtest doch, daß dieses Programm unterschiedliche Drop-Ziele hat ... also wirst du DropFilesOnWnd nicht an das Fenster senden müssen, sondern an das "Fenster", welches als Drop-Ziel definiert ist.

(aber wenn diese Methode nicht unterstürtzt wird, dann wär das natürlich auch sinnlos)
$2B or not $2B
  Mit Zitat antworten Zitat
BurtaN

Registriert seit: 25. Jan 2008
35 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 20:59
Ich hatte per GW_HWNDNEXT alle Fenster durchgeschaltet und versucht das "richtige" Fenster zu finden. Das eigentliche Programm hat jedoch wieder nichts gemacht. Damit müsste ich doch das Fenster, welches für Drag and Drop zuständig ist, erwischt haben. Oder kann ich dadurch nciht alle Fenster "ausprobieren".
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Datei mit laufendem Programm öffnen!

  Alt 25. Jan 2008, 21:03
Nimm doch zum Test einfach Winspector und lese das entsprechende Handle aus. GW_HWNDNEXT reicht IMHO nicht immer aus, GW_CHILD kann auch noch nötig sein, wenn das Fenster mehrere untergeordnete Fenster hat.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:29 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