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
Antwort Antwort
Benutzerbild von nitroex
nitroex

Registriert seit: 8. Feb 2004
Ort: Weimar
31 Beiträge
 
Delphi 7 Enterprise
 
#1

nur eine anwendung mit parametern

  Alt 8. Feb 2004, 15:08
Doswidania!!

Ich bin gerade dabei, ein Prog zu schreiben, welches bestimmte Dateien öffnen und bearbeiten kann.
Nun möchte ich bewirken, dass, wenn ein User auf eine mit meinem Prog verlinkte Datei (z.B: .html oder .php)clickt, mein Prog, wenn noch keine Instanz jenem dessen existiert das Prog geöffnet wird, die Datei (über Prarmeter) bearbeitet werden kann (shon gelöst!!).

Das eigentliche Problem heißt: Wenn shon eine Instanz geöffnet ist, soll die neue bendet werden, aber der Parameter soll irgentwie an die schon existierent existanz übergeben werden!!

Wie geht denn dass?!?!?????!?!?

Danke fuer eventuelle Antworten oder Hinweise.

nitroex
hab ich vergessen
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: nur eine anwendung mit parametern

  Alt 8. Feb 2004, 15:14
Such mal nach Hier im Forum suchenMutex.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: nur eine anwendung mit parametern

  Alt 8. Feb 2004, 15:42
Hm, genau das hatten wir schonmal.. wenn ich mich nur erinnern könnte...

Naja, such noch ein bisschen, du findest es sicher hier in der DP!

MfG Lefko.
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: nur eine anwendung mit parametern

  Alt 8. Feb 2004, 15:43
Bezüglich des Mehrfachstarts sollte das gehen
Delphi-Quellcode:
var LHandle: Cardinal;
    Lclass: Array[0..255] of Char;
begin
  CreateMutex(nil,True,'Beliebiger Ausdruck für den Mutex'); //kein mehrfachstart
  if GetLastError = ERROR_ALREADY_EXISTS then //kein mehrfachstart
  begin
    Lhandle := FindWindow(nil, nil);
    while Lhandle <> 0 do
    begin
      GetClassName(Lhandle, Lclass, 255);
      if (Lhandle <> handle) and (string(Lclass) = self.ClassName) then
      begin
        SendMessage(Lhandle, WM_USER + 2, 0, 0); //an dieser Stelle ist dein Einfallsreichtum gefragt, bei meiner Programmvariante sende ich einfach eine message an die bereits laufende instanz welche sich dann in den fordergrund bringt
        Lhandle := 0;
      end else Lhandle := GetWindow(Lhandle, GW_HWNDNEXT);
    end;
    Application.Terminate;
  end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
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
Benutzerbild von nitroex
nitroex

Registriert seit: 8. Feb 2004
Ort: Weimar
31 Beiträge
 
Delphi 7 Enterprise
 
#6

Danke!!!

  Alt 8. Feb 2004, 19:28
Danke!! Das hat mir extremistisach weitergeholfen.

nitorex
hab ich vergessen
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:52 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