Delphi---ShellExecute跨进程调用exe
测试环境: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的更多相关文章
- Android中的跨进程调用技术AIDL
什么是AIDL Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用 ...
- Android四大组件应用系列5——使用AIDL实现跨进程调用Service
一.问题描述 Android应用程序的四大组件中Activity.BroadcastReceiver.ContentProvider.Service都可以进行跨进程.在上一篇我们通过ContentPr ...
- Android菜鸟的成长笔记(21)——跨进程调用Service
我们都知道在Android中的每一个应用是一个进程,其实每一个应用就相当于Linux系统里面的一个用户,进程和进程之间的通信其实就相当于用户和用户之间的通信,为了实现这种跨进程通信,Android提供 ...
- 跨进程调用Service(AIDL Service)
1.什么是aidl:aidl这是 Android Interface definition language的缩写,一看就明确.它是一种android内部进程通信接口的描写叙述语言.通过它我们能够定义 ...
- c# 进程调用exe
using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostic ...
- Android 跨进程调用忽略权限
Framework层: @Override public StackInfo getStackInfo(int stackId) { final int callingUid = ...
- umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android
先简单介绍下5.0版的变化.5.0最大的特色是调用简单,采用了链式语法,形如: new ShareAction(context).setPlatform(share_media) .withText( ...
- Android跨进程通信的四种方式
由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...
- Android 跨进程数据共享
Android 开发过程中,基于功能隔离.进程安全.进程保活等等考虑,我们经常需要为应用划分进程,然后不得不面临跨进程通信和跨进程共享数据的挑战. 跨进程通信 相对来说,跨进程通信比较简单,常用的方式 ...
随机推荐
- Linux监控命令之==>strace
一.命令介绍 strace 常用来跟踪进程执行时的系统调用和所接收的信号.在Linux 世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式 ...
- LeetCode.1047-重复删除字符串中的所有相邻重复项
这是小川的第389次更新,第419篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第251题(顺位题号是1047).给定一个小写字母的字符串S,重复删除两个相邻且相等的字母 ...
- tensorflow 2.0 技巧 | 自定义tf.keras.Model的坑
自定义tf.keras.Model需要注意的点 model.save() subclass Model 是不能直接save的,save成.h5,但是能够save_weights,或者save_form ...
- Linux 命令 watch 监测命令的运行结果
watch 命令周期性地执行命令,全屏显示输出命令.watch命令可以监测一个命令的运行结果 命令参数 -n, --interval 设置间隔时间.默认情况下,watch 每隔 2 秒执行一次命令. ...
- Tomcat部署SSL证书过程中遇到的问题
在CentOS7中Tomcat部署SSL证书时遇到的问题 1.配置servlet.xml 配置tomcat/conf/server.xml 加入以下代码 <Connector port=&quo ...
- 软考题型—PERT图(项目计划评审技术)
经历过软件危机和大量软件项目的失败,人们对软件工程产业现状进行分析后,得出普遍性结论便是:软件项目成功率低的原因很可能就是项目管理能力太弱.由于软件本身的特殊性和复杂性,将项目管理思想引入软件工程领域 ...
- PythonDay10
第十章函数进阶 今日内容 函数的参数 动态参数 动态接收位置参数 动态接收关键字参数 函数的注释 名称空间 函数的嵌套 global.nonlocal global的宗旨 nonlocal宗旨 1.函 ...
- HNUSTOJ-1674 水果消除(搜索或并查集)
1674: 水果消除 时间限制: 2 Sec 内存限制: 128 MB提交: 335 解决: 164[提交][状态][讨论版] 题目描述 “水果消除”是一款手机游戏,相信大家都玩过或玩过类似的游戏 ...
- p标签在div中水平垂直居中且文本左对齐
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 弹出ifream
top.$.jBox("iframe:"+'${ctx}/synopsis/hmlwxSynopsis/addItem', {title: "添加作品",w ...