WM_COPYDATAを使用して、次のようにDelphiXEでコマンドラインパラメータを別のアプリインスタンスに渡します。
function DAppInstance.SendParamsToPrevInstance(AWindowHandle: THandle): Boolean;
var
copyData: TCopyDataStruct;
cmdParams : string;
i : integer;
begin
cmdParams := '';
for i := 1 to ParamCount do
cmdParams := cmdParams + ParamStr(i); //#1
//cmdParams := cmdParams + '"' + ParamStr(i) + '" '; //#2
//cmdParams := cmdParams + format('"%s" ', [ParamStr(i)]); //#3
//cmdParams := cmdParams + format('%s;', [ParamStr(i)]); //#4
copyData.lpData := pchar(cmdParams);
copyData.cbData := 1 + (bytelength(cmdParams));
copyData.dwData := WaterMark; //ID for APP
result := SendMessage(AWindowHandle,
WM_COPYDATA,
Application.Handle,
LPARAM(@copyData)) = 1;
end;
文字列が引用符で囲まれている/追加されている場合、異なる結果が得られます。
#1が使用されている場合-文字列はクリーンになりますが、ファイル名にスペースを含めることができるため、引用符で囲まれていない場合は使用できません。
C:\Users\MX4399\Research\delphi\instance\doc with spaces.doc
#2を使用して文字列を引用するか、何か(#3、#4)を追加すると、最終的に3つのパラメーターとして表示されます。
"C:\Users\MX4399\Research\delphi\instance\doc with spaces.doc"'#$FF00'궳獧