测试环境: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. 字体Lucida Console

    曾经有个段子说的是,一眼能认出黑客的原因就是因为对方在使用黑屏荧光字加Lucida Console其实这正说明了Lucida Console在终端使用的受欢迎程度.Lucida Console也是英文 ...

  2. nginx子配置文件实例

    [root@bogon conf.d]# cat /etc/nginx/conf.d/test6.conf server { listen 8085; server_name 192.168.0.20 ...

  3. java:easyui(jQueryEasyUI,分页)

    1.介绍: jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复杂的ja ...

  4. 接口自动化-python unittest+requests+HTMLrunner

    从2015年毕业入行软件测试,快满4年了,之前技术分享都在百度贴吧上面,现在正式开始在博客中记录工作技术,努力成长,加油 接口测试的步骤1.组装好该接口需要的参数数据2.使用get或post附带参数数 ...

  5. ELK+Kafka日志收集环境搭建

    1.搭建Elasticsearch环境并测试: (1)删除es的容器 (2)删除es的镜像 (3)宿主机调内存: 执行命令:sudo sysctl -w vm.max_map_count=655360 ...

  6. 【Qt开发】Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包

    Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包 今天开始系统的学习QT,第一个测试的问题就是在纯净的系统中如何正常运行,也就是找出QT生成的exe的依赖库 ...

  7. 10大IT社区

    技术社区导航 http://tooool.org/ 1. cnblogs 人多内容质量最高 2.csdn csdn的注册人数多,但新手多 3.java eye java eye注册用户刚突破10万,但 ...

  8. 面试--hr常问的问题

    程序员换工作,会有技术面试(可能不止一轮的技术面),还会有hr的面试,技术面主要是偏向于技术问题,hr面试主要问的一些问题,下面做下汇总: 1.你换工作的原因,你为何辞职 必问的问题,送分题或者送命题 ...

  9. [转帖]SSH命令总结

    SSH命令总结 ssh-keygen ssh-copy-id 等命令自己用过 但是知道的不系统 也知道 转发命令 但是也只是知道一点点... ttps://www.cnblogs.com/chenfa ...

  10. Python:什么是进阶,如何进阶?

    目录 Python:什么是进阶,如何进阶? 1. 什么是进阶? 2. 如何进阶? 3. 除此之外呢? Python:什么是进阶,如何进阶? 1. 什么是进阶? 一门编程语言的基础部分,往往非常简单.如 ...