Qt访问注册表并调用子进程
在实际应用中需要在一个进程启动另外一个进程,可以将子进程的路径写入注册表中,然后主进程读取注册表中子进程路径,启动子进程,并以命令行参数的形式传入参数,启动子进程。具体实现方式如下
(1) 子进程通过bat文件将路径写入注册表
reg add "HKEY_CLASSES_ROOT\btoolpplayerprotocol\shell\open\command" /t REG_SZ /d "\"%~dp0btoolpplayer.exe\" \"%%1\"" /f
/v表示名称,这里没有说明是默认值
/t表示类型
/d表示值
%cd%代表的是当前工作目录(current working directory,variable);
%~dp0代表的是当前批处理文件所在完整目录(the batch file's directory,fixed)。
(2) 主进程访问注册表读取路径信息
这里可以直接加入键名称,然后直接根据键名称访问键值,下面是遍历获取exe,不太合适。
QSettings reg("HKEY_CLASSES_ROOT\\btoolpplayerprotocol\\shell\\open\\command", QSettings::NativeFormat);
QStringList keyList = reg.childKeys();
QString location = "";
foreach(QString key, keyList)
{
QString slocation = reg.value(key).toString();
if (slocation!="" || slocation.contains("exe", Qt::CaseSensitive))
{
location = slocation;
break;
}
}
(3) 采用process访问进程
int index = location.indexOf("exe", 0);
index += 3;
location = location.mid(1, index-1);
QStringList Qstringlist;
Qstringlist << csCmd;
QProcess process;
LOGIC_TRACE("start paltplayer begin! ");
process.startDetached(location, Qstringlist);//分离
LOGIC_TRACE("start paltplayer end! ");
(4) bat从注册表中将键值删除
reg delete "HKEY_CLASSES_ROOT\btoolpplayerprotocol" /f
最新文章
- 怎样两个月完成Udacity Data Analyst Nanodegree
- JMeter中BeanShell实现写入文件
- 预定义接口-迭代器Iterator
- 自定义控件开发的调试及DesignMode的状态处理
- c++ 爬虫
- easyui中Tab的tools按钮刷新当前tab
- poj 3620 Avoid The Lakes【简单dfs】
- LXPanel自定义添加应用程序到快速启动栏
- 后台写js 并跳转
- 孙鑫HTML视频学习总结
- jQuery选择表格中的列
- 内核对象kobject和sysfs(2)——kref分析
- Sql的基础知识提升(二)
- Socket编程实践(7) --Socket-Class封装(改进版v2)
- ES搜索引擎基本操作
- 面试遇到两个稍显变态的题目,mark一下
- 嵌入式常用技术概览之IIC(I2C)
- java变量的作用域和基本数据类型转换
- PHP 日期时间类 Carbon 的常见用法
- [osg][opengl]透视投影的参数Perspective