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 开发过程中,基于功能隔离.进程安全.进程保活等等考虑,我们经常需要为应用划分进程,然后不得不面临跨进程通信和跨进程共享数据的挑战. 跨进程通信 相对来说,跨进程通信比较简单,常用的方式 ...
随机推荐
- vmware虚拟机设置时区、时间
首先查看时间发现和百度的时间不一样 [root@www ~]# dateWed Dec 5 14:00:32 CST 2018 1.配置ntp服务器,设置时区同步,请参照ntp篇 https://w ...
- UniEAP Platform V5.0 Unable to compile class for JSP
流程设计器报错: http://127.0.0.1:8080/framework/workflow/webdesign/procmodify/procmodifydetail.jsp?isLoadDa ...
- WebSocket-Node
WebSocket Client & Server Implementation for Node 参考资料:[https://github.com/theturtle32/WebSocket ...
- 【HANA系列】SAP HANA Studio代码提示设置方法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA Studio代 ...
- const char* to char*(当函数传递参数时)
来自 https://blog.csdn.net/rongrongyaofeiqi/article/details/52442169 https://blog.csdn.net/hebbely/art ...
- websocket服务器推送 (node+express+vue+socket)
简介: 此项目需要懂一点node.express 功能: 1.前端用户登录,查看服务端推送的消息,用户只能在一个地方登录,也就是单点登录 2.服务端首先登录,上传需要推送的信息文本,后台读取文本后,存 ...
- nodejs实现服务端重定向
nodejs实现服务端重定向:https://www.jianshu.com/p/5a1500fcd713
- 为webService添加Interceptor(拦截器)
今天写一个简单的拦截器,以webService接口为例: 背景:H5的一个项目,只要调用H5webService 接口下面的方法都会触发一个AuthorityInterceptor去验证是否调用类型是 ...
- Office批量授权(VL)版本和激活方法
Office 2010 Office 2010中文专业增强版 32位 文件名: SW_DVD5_Office_Professional_Plus_2010w_SP1_W32_ChnSimp_CORE_ ...
- springboot2.0自适应效果错误响应
实现效果当访问thymeleaf渲染页面时,显示的是自定义的错误页面 当以接口方式访问时,显示的是自定义的json数据响应 1. 编写自定义异常 package cn.jfjb.crud.except ...