在C++中其结构为

typedef struct _SHELLEXECUTEINFO {
DWORD cbSize; // typedef unsigned long DWORD;
ULONG fMask;
HWND hwnd;
LPCTSTR lpVerb;
LPCTSTR lpFile;
LPCTSTR lpParameters;
LPCTSTR lpDirectory;
int nShow;
HINSTANCE hInstApp;
LPVOID lpIDList;
LPCTSTR lpClass;
HKEY hkeyClass;
DWORD dwHotKey;
union {undefined
HANDLE hIcon;
HANDLE hMonitor;
} DUMMYUNIONNAME;
HANDLE hProcess;

} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

其中参数lpParameters 表示需要传递的参数,如果要传递多个参数,默认是使用空格作为分隔符,如:

lpParameters = _T("bob jack mak");

但如果我们的参数中也含有空格呢?比如我们传递的路径中难免会有空格,这时就可以用以下书写方式进行传递,在每个参数收尾添加双引号,比如传递这三个字符串:“I want you”,“yes”,“I’m happy”

lpParameters = _T("\"I want you\" \"yes\" \"I'm happy\"");

如果现在我们要传递带有json格式的参数,用以上方式也不行了,至少在我这里是这样,因为json数据中的字段中带有双引号,如以下json格式:

{"name": "BeJson","url": "http://www.bejson.com","page": 88,"isNonProfit": true
}

这时候的解决办法就是将json数据进行编码,如Base64编码,ShellExecuteEx启动的程序接收到参数后再进行Base64解码,下面以QT代码进行展示:

//files为json字符串
std::string en_files = ZBase64::Encode((const unsigned char*)files.toStdString().c_str(), files.length());
QString en_qfiles = QString::fromStdString(en_files);
QString args = QString("\"%1\" \"%2\" \"%3\" \"%4\"").arg(ip).arg(QString::number(port)).arg(ser_version).arg(en_qfiles);
SHELLEXECUTEINFO sei = { sizeof(sei) };
sei.lpParameters = (LPCWSTR)args.unicode();

下面是调用的exe进行解码部分

if (argc != 5)
{return -1;
}
else
{int out_len = 0;QString encode_files = argv[4];std::string decode_files = ZBase64::Decode(encode_files.toStdString().c_str(), encode_files.length(), out_len);
}

ShellExecuteEx传递参数包含json数据相关推荐

  1. delphi读取xml中的内容property name传递参数_python3 Json和XML数据解析

    一.Json数据解析 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码. json.loads(): 对数据进行 ...

  2. Android开发 Intent传递参数,获取数据为null

    android开发 Activity通过Intent传递参数,获取失败的原因 启动一个有返回值的activity (MapActivity) Intent intent = new Intent(Up ...

  3. springMVC框架下JQuery传递并解析Json数据

    json作为一种轻量级的数据交换格式,在前后台数据交换中占领着很重要的地位.Json的语法很简单,採用的是键值对表示形式.JSON 能够将 JavaScript 对象中表示的一组数据转换为字符串,然后 ...

  4. python json.dumps()函数输出json格式,使用indent参数对json数据格式化输出

    最近使用json.dumps()来输出json数据,发现输出的数据是一行,看着太别扭了,不美观.发现可以使用indent参数来控制 import jsondicts={"name" ...

  5. 获取微信推文的实际链接地址(包含JSON数据以及推文msg_data_id)

    前提: 现在随着公众平台的要求越来越多,搜狗微信的爬虫难度越来越高,很多爬虫都没有用了,但是现在很多业务还是要用到历史推文的一些数据,其实很多数据(阅读量.点赞数.封面图片地址.标题.简介)都可以用过 ...

  6. python多进程传递参数,python多进程数据传递

    python multiprocessing多进程数据传递使用列队太多bug了,有限制, 可以使用multiprocessing.Manager()来传递数据 可以解决queues列队的阻塞问题 im ...

  7. 前台传递JSON数据,后台spring mvc如何接收数据

    如何传递JSON数据到后台? 方式一, 使用post请求,请求类型为:application/x-www-form-urlencoded; charset=UTF-8 $.ajax({url : ur ...

  8. Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据

    原文:https://automatetheboringstuff.com/2e/chapter16/ 在第 15 章,你学习了如何从 PDF 和 Word 文档中提取文本.这些文件是二进制格式的,需 ...

  9. ajax 前端怎么处理数据,如何使用ajax异步处理JSon数据

    基于jQuery的ajax数据库异步处理,网上有很多教程,今天再次分享这个话题,算是抛砖引玉,不了解的童鞋可以来学习下. 先我们来看一个官方的实例 使用 ajax请求来获得 JSON 数据,并输出结果 ...

最新文章

  1. Net设计模式实例之桥接模式( Bridge Pattern)(2)
  2. sprint计划会议总结
  3. 微信背单词类小程序,小鸡单词源码下载,打卡微信小程序
  4. python四十五:归一化继承
  5. BigDeciml转String为0.00时避免踩坑
  6. 是否要入坑强化学习,看了这篇文章再说
  7. zabbix网络发现主机
  8. Spring Boot EasyUI edatagrid 扩展
  9. TAIGA项目管理平台快速安装
  10. python 文本处理操作
  11. SNIP物体检测算法理解
  12. Springboot druid 监控sql语句
  13. 怎么在oracle建表,在linux怎么操控oracle建表
  14. 计算机频繁启动是何原因,电脑开机频繁断电又重启怎么回事?
  15. overleaf插入参考文献
  16. 【C++】队列优先队列详解——deque.queue.priority_queue
  17. besiege机器人_《围攻》双脚机器人制作图文教程 双脚机器人怎么制作
  18. EPT和VPID简介
  19. 微信程序开发系列教程(二)微信订阅号+人工智能问答服务
  20. you-get视频解析下载

热门文章

  1. Ajax原理,技术封装与完整示例代码
  2. 教女朋友学习 vue中的指令及其自定义指令
  3. 1047: 寻找嫌疑人
  4. Magenta - 概述
  5. uboot如何向内核传参
  6. 【代码的小乐趣】修改SpringBoot启动图案
  7. 智能家居的发展现状以及未来发展趋势的分析
  8. ES 替换时序数据库
  9. 论文阅读笔记 | MLP系列——AS-MLP
  10. java recordset 记录数_【求助】asp中怎样获得一个记录集(Recordset)的所有行数?