ShellExecuteEx传递参数包含json数据
在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数据相关推荐
- delphi读取xml中的内容property name传递参数_python3 Json和XML数据解析
一.Json数据解析 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码. json.loads(): 对数据进行 ...
- Android开发 Intent传递参数,获取数据为null
android开发 Activity通过Intent传递参数,获取失败的原因 启动一个有返回值的activity (MapActivity) Intent intent = new Intent(Up ...
- springMVC框架下JQuery传递并解析Json数据
json作为一种轻量级的数据交换格式,在前后台数据交换中占领着很重要的地位.Json的语法很简单,採用的是键值对表示形式.JSON 能够将 JavaScript 对象中表示的一组数据转换为字符串,然后 ...
- python json.dumps()函数输出json格式,使用indent参数对json数据格式化输出
最近使用json.dumps()来输出json数据,发现输出的数据是一行,看着太别扭了,不美观.发现可以使用indent参数来控制 import jsondicts={"name" ...
- 获取微信推文的实际链接地址(包含JSON数据以及推文msg_data_id)
前提: 现在随着公众平台的要求越来越多,搜狗微信的爬虫难度越来越高,很多爬虫都没有用了,但是现在很多业务还是要用到历史推文的一些数据,其实很多数据(阅读量.点赞数.封面图片地址.标题.简介)都可以用过 ...
- python多进程传递参数,python多进程数据传递
python multiprocessing多进程数据传递使用列队太多bug了,有限制, 可以使用multiprocessing.Manager()来传递数据 可以解决queues列队的阻塞问题 im ...
- 前台传递JSON数据,后台spring mvc如何接收数据
如何传递JSON数据到后台? 方式一, 使用post请求,请求类型为:application/x-www-form-urlencoded; charset=UTF-8 $.ajax({url : ur ...
- Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据
原文:https://automatetheboringstuff.com/2e/chapter16/ 在第 15 章,你学习了如何从 PDF 和 Word 文档中提取文本.这些文件是二进制格式的,需 ...
- ajax 前端怎么处理数据,如何使用ajax异步处理JSon数据
基于jQuery的ajax数据库异步处理,网上有很多教程,今天再次分享这个话题,算是抛砖引玉,不了解的童鞋可以来学习下. 先我们来看一个官方的实例 使用 ajax请求来获得 JSON 数据,并输出结果 ...
最新文章
- Net设计模式实例之桥接模式( Bridge Pattern)(2)
- sprint计划会议总结
- 微信背单词类小程序,小鸡单词源码下载,打卡微信小程序
- python四十五:归一化继承
- BigDeciml转String为0.00时避免踩坑
- 是否要入坑强化学习,看了这篇文章再说
- zabbix网络发现主机
- Spring Boot EasyUI edatagrid 扩展
- TAIGA项目管理平台快速安装
- python 文本处理操作
- SNIP物体检测算法理解
- Springboot druid 监控sql语句
- 怎么在oracle建表,在linux怎么操控oracle建表
- 计算机频繁启动是何原因,电脑开机频繁断电又重启怎么回事?
- overleaf插入参考文献
- 【C++】队列优先队列详解——deque.queue.priority_queue
- besiege机器人_《围攻》双脚机器人制作图文教程 双脚机器人怎么制作
- EPT和VPID简介
- 微信程序开发系列教程(二)微信订阅号+人工智能问答服务
- you-get视频解析下载