测试环境:Delphi7 + Win7

发起端

unit uRequest;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TfrmRequest = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
frmRequest: TfrmRequest; implementation uses
ShellAPI, superobject, EncdDecd; {$R *.dfm} //推荐此种方式
procedure TfrmRequest.Button1Click(Sender: TObject);
var
sExeName, sParams: string;
soParams: ISuperObject;
begin
//待执行的应用程序路径,可以是绝对路径,也可以是相对路径。
//当然目录地址可以通过ShellExecute的第五个参数设置,如果不设置,默认的就是当前目录。
sExeName := 'Response.exe';
//标准的传参是允许通过空格的方式传入多个参数的,
//但是有可能某个参数值中就有空格,所以这里采用JSON的方式,转义之后再接收
soParams := SO();
soParams.S['name'] := '张三';
soParams.I['age'] := ;
soParams.S['url'] := 'https://www.baidu.com/'; sParams := UTF8Encode(AnsiToUtf8(soParams.AsJSon()));
ShellExecute(, 'open', PChar(sExeName), PChar(sParams), nil, SW_SHOWNORMAL);
end; //不建议此种方式
procedure TfrmRequest.Button2Click(Sender: TObject);
var
sExeName, sParams: string;
begin
sExeName := 'Response.exe';
//传参是允许通过空格的方式传入多个参数的
sParams := '张三 20 www.baid.com';
ShellExecute(, 'open', PChar(sExeName), PChar(sParams), nil, SW_SHOWNORMAL);
end; end.

接收端(即被打开的应用程序)

unit uResponse;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TfrmResponse = class(TForm)
btnResponse: TButton;
Memo1: TMemo;
procedure btnResponseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
function ReponseParam: Boolean;
public
{ Public declarations }
end; var
frmResponse: TfrmResponse; implementation uses
superobject, EncdDecd; {$R *.dfm} procedure TfrmResponse.btnResponseClick(Sender: TObject);
var
i: Integer;
s: string;
begin
for i := to ParamCount do
begin
s := ParamStr(i);
ShowMessage(s);
end;
end; function TfrmResponse.ReponseParam: Boolean;
var
sResponse: string;
soParams: ISuperObject;
begin
Result := False;
//接受传参
if ParamCount = then Exit;
//注意,传参的下标是从1开始
case ParamCount of
:
begin
sResponse := ParamStr();
sResponse := UTF8Decode(sResponse);
soParams := SO(sResponse);
Memo1.Lines.Add('姓名:' + soParams.S['name']);
Memo1.Lines.Add('年龄:' + IntToStr(soParams.I['age']));
Memo1.Lines.Add('博客地址:' + soParams.S['url']);
end;
:
begin
Memo1.Lines.Add('姓名:' + ParamStr());
Memo1.Lines.Add('年龄:' + ParamStr());
Memo1.Lines.Add('博客地址:' + ParamStr());
end;
else
Exit;
end; Result := True;
end; procedure TfrmResponse.FormCreate(Sender: TObject);
begin
if not ReponseParam then
close;
end; end.

Delphi---ShellExecute跨进程调用exe的更多相关文章

  1. Android中的跨进程调用技术AIDL

    什么是AIDL Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用 ...

  2. Android四大组件应用系列5——使用AIDL实现跨进程调用Service

    一.问题描述 Android应用程序的四大组件中Activity.BroadcastReceiver.ContentProvider.Service都可以进行跨进程.在上一篇我们通过ContentPr ...

  3. Android菜鸟的成长笔记(21)——跨进程调用Service

    我们都知道在Android中的每一个应用是一个进程,其实每一个应用就相当于Linux系统里面的一个用户,进程和进程之间的通信其实就相当于用户和用户之间的通信,为了实现这种跨进程通信,Android提供 ...

  4. 跨进程调用Service(AIDL Service)

    1.什么是aidl:aidl这是 Android Interface definition language的缩写,一看就明确.它是一种android内部进程通信接口的描写叙述语言.通过它我们能够定义 ...

  5. c# 进程调用exe

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostic ...

  6. Android 跨进程调用忽略权限

    Framework层: @Override    public StackInfo getStackInfo(int stackId) {        final int callingUid = ...

  7. umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android

    先简单介绍下5.0版的变化.5.0最大的特色是调用简单,采用了链式语法,形如: new ShareAction(context).setPlatform(share_media) .withText( ...

  8. Android跨进程通信的四种方式

    由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...

  9. Android 跨进程数据共享

    Android 开发过程中,基于功能隔离.进程安全.进程保活等等考虑,我们经常需要为应用划分进程,然后不得不面临跨进程通信和跨进程共享数据的挑战. 跨进程通信 相对来说,跨进程通信比较简单,常用的方式 ...

随机推荐

  1. json中loads()和dumps()的应用

    import json s = {'name': 'jack'} #将dict转换成strl = json.dumps(s)print(type(l)) #将str转换成dictm = json.lo ...

  2. java:Maven(Maven_ssm)

    1.maven_ssm: DOS命令向maven仓库导入jar包: mvn install:install-file -Dfile=F:\jars\json-lib-2.4-jdk15.jar -Dg ...

  3. IK分词器的安装与使用IK分词器创建索引

    之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了. 1. i ...

  4. firewalld防火墙简介

    1.防火墙 防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘 对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测, 对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬件, ...

  5. 【VS开发】使用 NuGet 管理项目库

    NuGet 使用 NuGet 管理项目库 Phil Haack 无论多么努力,Microsoft 也没办法提供开发人员所需要的每一个库. 虽然 Microsoft 在全球的员工人数接近 90,000, ...

  6. sqlplus语句示例

    我们通常所说的DML.DDL.DCL语句都是sql*plus语句,它们执行完后,都可以保存在一个被称为sql buffer的内存区域中,并且只能保存一条最近执行的sql语句,我们可以对保存在sql b ...

  7. excel常用公式--时间序列类

    year,month,day:返回对应于某个日期的年月日.Year作为1900 - 9999之间的整数返回. weekday:返回对应于某个日期的一周中的第几天. WEEKNUM:返回特定日期的周数. ...

  8. for循环练习题:拆解字符并输入下标

    test = input('请输入:') for item in range(0,len(test)): print(item,test[item])

  9. 微信内置浏览器不支持 onclick 如何解决?(原因是因为内面中的内容或者标签大部分是动态生成的)

    使用了很多onclick事件,但是在Android的微信内置浏览器中,onclick是不能被执行的. 开始的写法是: // $(".contentPic").click(funct ...

  10. npm学习(十二)之高级用法

    如何使用距离标记标记包 如何使用双因素身份验证 如何使用安全令牌 如何从CLI更改配置文件设置 理解包和模块