AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi nur eine anwendung mit parametern
Thema durchsuchen
Ansicht
Themen-Optionen

nur eine anwendung mit parametern

Ein Thema von nitroex · begonnen am 8. Feb 2004 · letzter Beitrag vom 8. Feb 2004
 
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5

Re: nur eine anwendung mit parametern

  Alt 8. Feb 2004, 15:56
Hallo,
hier kommt die Lösung:
Achtung: das hier ist der Projektquelltext
Delphi-Quellcode:
program Project2;

uses
  Windows,
  Messages,
  SysUtils,
  Forms,
  Unit1 in 'Unit1.pas{FormSemaphore};

{$R *.res}

var
  hTargetWnd : hWnd;
  hSemaphore : THandle;
  aCopyData : TCopyDataStruct;
  aParam : String;

begin
  hSemaphore:=CreateSemaphore(Nil,0,1,'Semaphore_1');
  If hSemaphore<>0 then
    begin
    If GetLastError=ERROR_ALREADY_EXISTS then
      begin
      // Suche jetzt das Hauptfenser der ersten Instanz
      hTargetWnd:=FindWindow('TFormSemaphore',Nil);
      If hTargetWnd<>0 then
        begin
        If ParamCount>0 then // wurden Parameter übergeben
          begin
          aParam:=ParamStr(1); // Wenn im Explorer auf eine Datei geklickt
                               // und die Dateiendnung mit dem Programm verknüpft
                               // ist, steht in ParamStr(1) der Pfad und Dateiname
                               // dieser Datei.
          //verpacke den Dateinamen in eine TCopyDataStruct
          With aCopyData do
            begin
            dwData:=0;
            cbData:=StrLen(PChar(aParam))+1; // Nullterminierung berücksichtigen mit +1 !!!
            lpData:=PChar(aParam);
            end; // with aCopyData do
          // schicke jetze die WM_COPYDATA Botschaft das Hauptfenser der ersten Instanz
          SendMessage(hTargetWnd,WM_COPYDATA,LongInt(Application.Handle),LongInt(@aCopyData));
          end; // If ParamCount>0 then
        end; // If hTargetWnd<>0 then
      end // If GetLastError=ERROR_ALREADY_EXISTS then
        else
          begin
          Application.Initialize;
          Application.CreateForm(TFormSemaphore, FormSemaphore);
          Application.Run;
          CloseHandle(hSemaphore);
          end;
    end;
end.
Jetzt kommt die unit des Hauptformulars
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFormSemaphore = class(TForm)
    Label1: TLabel;
    ListBox1: TListBox;
    Label2: TLabel;
  private
    { Private-Deklarationen }
   procedure WMCopyData(var Message : TWMCopydata); message WM_COPYDATA;
  public
    { Public-Deklarationen }
  end;

var
  FormSemaphore: TFormSemaphore;

implementation

{$R *.dfm}

{ TTFormSemaphore }

procedure TFormSemaphore.WMCopyData(var Message: TWMCopydata);
{Hier empfängt das Programm die WM_COPYDATA Botschaft.
in Message.CopyDataStruct.lpdata steht jetzt der Pfad und der Dateiname.
Jetzt muss das nur passend verarbeitet werden.}

var
    sText : Array[0..255] of Char;
begin
  Label2.Caption:='WM_CopyData';
  StrLCopy(sText,Message.CopyDataStruct.lpdata,Message.CopyDataStruct.cbdata);
  ListBox1.Items.Add(sText);
end;

end.
  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 23:16 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