Moin Zusammen,
und so wäre man dann auf der sicheren Seite:
Diesmal über die Message WM_COPYDATA
(gekürzt, der Rest steht oben)
Delphi-Quellcode:
program Multifileload;
uses
//...
messages, // wg. WM_COPYDATA
//...
var
//...
cdWork : TcsCopyDataStruct;
begin
//...
else
begin
// Den Fenstertitel des Programmes abfragen
hWindow := FindWindow(nil,'Multifiledemo');
if hWindow <> 0 then
begin // gefunden, dann den Dateinamen an die laufende Instanz senden
if (paramcount > 0) and FileExists(paramstr(1)) 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;
//...
end.
Delphi-Quellcode:
//...
// Deklaration für die CopyData Strutur
type
PcsCopyDataStruct = ^TcsCopyDataStruct;
TcsCopyDataStruct =
packed record
dwData : DWORD;
cbData : DWORD;
lpData : Pointer;
end;
var
frmMAIN: TfrmMAIN;
dwMessage : DWORD;
implementation
uses MDIPart;
{$R *.DFM}
procedure TfrmMAIN.WndProc(var msg : TMessage);
var
frmWork : TfrmSub;
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 := TfrmSub.Create(self);
// Datei aus übergebenem Namen laden
frmWork.Memo1.Lines.LoadFromFile(PChar(cdWork.lpData));
end;
end
else
begin
// Jede andere Message an die ursprüngliche Prozedure weiterreichen
inherited WndProc(msg);
end;
end;
//...
end.