Hallo,
habe mir mal die mühe gemacht das abzutippen und des letzte beispiel mit rein zu nehmen. Aber immernoch ohne erfolg. Wenn ich ParamCount abfrag bekomme ich immer nur eine 1. Wenn ich in Delphi unter Start / Parameter was eintrage startet er auch met mehreren, nur nicht vom windows her. Ich habe mal den ganzen Code mit reingesetzt, vieleicht kann mir jemand sagen wo da der haken ist. Schon seit wochen bin ich am probieren aber wenn man keinen vortschrit erkennt wird das echt deprimierend.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PcsCopyDataStruct = ^TcsCopyDataStruct;
TcsCopyDataStruct =
packed record
dwData : DWORD;
cbData : DWORD;
lpData : Pointer;
end;
TForm1 =
class(TForm)
Memo1: TMemo;
Label1: TLabel;
procedure FormShow(Sender: TObject);
protected
procedure WndProc(
var msg : TMessage);
override;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
dwMessage : DWORD;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.WndProc(
var msg : TMessage);
var
cdWork : PcsCopyDataStruct;
begin
if msg.Msg = dwMessage
then
begin
cdWork := PcsCopyDataStruct(msg.LParam);
if cdWork.dwData = dwMessage
then
begin
Memo1.Lines.LoadFromFile(PChar(cdWork.lpData));
end;
end
else
begin
inherited WndProc(msg);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
if (ParamCount > 0)
and (FileExists(ParamStr(1)))
then
begin
Label1.Caption := IntToStr(ParamCount);
memo1.Lines.LoadFromFile(ParamStr(1));
end;
end;
end.
und die andere
Delphi-Quellcode:
program Project1;
uses
Windows,
Sysutils,
Messages,
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var
dwMutex : DWORD;
hWindow : DWORD;
dwMessage : DWORD;
cdWork : TcsCopyDataStruct;
begin
dwMessage := RegisterWindowMessage('{44387CDE-D2EE-44A6-A97B-62627929A80F}');
dwMutex := CreateMutex(nil, true, 'Project1');
try
if GetLastError <> ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
begin
hWindow := FindWindow(nil, 'Project1');
if hWindow <> 0 then
begin
if (ParamCount > 0) and FileExists(ParamStr(1)) then
begin
cdWork.dwData := dwMessage;
cdWork.cbData := Length(ParamStr(1))+1;
cdWork.lpData := AllocMem(cdWork.cbData);
try
CopyMemory(cdWork.lpData, @ParamStr(1)[1], cdWork.cbData-1);
SendMessage(hWindow, WM_COPYDATA, 0, LPAram(@cdWork));
finally
FreeMem(cdWork.lpData, cdWork.cbData);
end;
end;
end;
end;
finally
if dwMutex <> 0 then
begin
CloseHandle(dwMutex);
end;
end;
end.
Ich habe es auch schon über die Registry versucht und andere sachen auch schon, nichts davon klappt.
Ich bitte um hinweise zur berichtigung "meines" Codes. Danke!