AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programmstart via Dateiendung ;-)
Thema durchsuchen
Ansicht
Themen-Optionen

Programmstart via Dateiendung ;-)

Ein Thema von Dirk · begonnen am 25. Apr 2003 · letzter Beitrag vom 26. Apr 2003
 
Benutzerbild von Dirk
Dirk

Registriert seit: 5. Jan 2003
Ort: Hamm
8 Beiträge
 
#5
  Alt 25. Apr 2003, 23:43
Code:
  var
  dwMutex : DWORD;
  hWindow : DWORD;
  dwAtom : DWORD;
  cdWork : TcsCopyDataStruct;
begin
  // Eine eindeutige eigene Message erzeugen
  // ACHTUNG: In der IDE mit Strg-Shift-G selber generieren nicht diesen Wert übernehmen!
  //          (Es wird einfach eine GUID generiert. Eindeutiger wird ein String nicht
  //           so leicht sein können)
  // Die Variable dwMessage ist in der Unit MAIN deklariert, da sie dort noch
  // gebraucht wird
  dwMessage := RegisterWindowMessage('{3DCA657A-B681-4260-A29C-37C750C9EF43}');
  // Mutex erzeugen
  dwMutex  := CreateMutex(nil,true,'mplayer3');
  try
    if GetLastError <> ERROR_ALREADY_EXISTS then
    begin // Mutex wurde das erste Mal erzeugt, Programm normal starten
      Application.Initialize;
      Application.Title := 'YASP';
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end
    else
    begin
      // Den Fenstertitel des Programmes abfragen
      hWindow := FindWindow(nil,'YASP');
      if hWindow <> 0 then
      begin // gefunden, dann den Dateinamen an die laufende Instanz senden
        if (paramcount > 0) and FileExists(paramstr(0)) then
        begin
          // CopyData Struktur füllen

          cdWork.dwData := dwMessage; // Message, das eine zu ladende Datei da ist
          cdWork.cbData := Length(paramstr(1))+1;
          cdWork.lpData := AllocMem(cdWork.cbData); // Speicher reservieren
          try
            // Und Dateinamen eintragen
            CopyMemory(cdWork.lpData,@paramstr(1)[1],cdWork.cbData-1);
            // Fertig, Daten kopieren
            SendMessage(hWindow,WM_COPYDATA,0,lParam(@cdWork));
           
          finally
            // Speicher wieder freigeben
            FreeMem(cdWork.lpData,cdWork.cbData);
          end;
        end;
      end;
    end;
  finally
    if dwMutex <> 0 then
    begin
      CloseHandle(dwMutex);
    end;
  end;
end.
Das müsste aber soweit ok sein oder nicht?

In der (T)Form1 hab ich dann

Code:
 protected
  procedure WndProc(var msg : TMessage); override;
Code:
type
  PcsCopyDataStruct = ^TcsCopyDataStruct;
  TcsCopyDataStruct =
  packed record
    dwData : DWORD;
    cbData : DWORD;
    lpData : Pointer;
  end;
Code:
 dwMessage : DWORD;


Code:
procedure TForm1.WndProc(var msg : TMessage);
var
  frmWork  : TForm1;
  pFileName : PChar;
  dwLen    : DWORD;
  cdWork   : PcsCopyDataStruct;

begin
  if msg.Msg = WM_COPYDATA then
  begin
   
    // Adresse der übergebenen Daten laden
    cdWork := PcsCopyDataStruct(msg.lParam);
    // Message prüfen
    if cdWork.dwData = dwMessage then
    begin
      // Neues Unterfenster generieren
      //frmWork := TForm1.Create(self);
      // Datei aus übergebenem Namen laden

      Abspielen(pchar(cdWork.lpData));

    end;
  end
  else
  begin
    // Jede andere Message an die ursprüngliche Prozedure weiterreichen
     
    inherited WndProc(msg);
  end;
end;
Tjo ... und hab dann halt Abspielen() eingebaut ...
  Mit Zitat antworten Zitat
 


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 20:24 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