使用Qt自动注册Lav
Qt播放视频使用QMediaPlayer要注册Lav解码器,如果手动去注册,每次去使用管理员运行命令或者生成.bat文件都比较麻烦。
解决方法步骤如下:
一:编写注册Lav解码器脚本,并取消控制台的显示,生成.bat文件。
二:使用Bat to Exe将.bat文件转换为exe文件。
三:使用QSettings和QProcess进行注册。
实现步骤:
一:注册Lav脚本
/***-------------------------取消控制台显示-----------------------*****/
@echo off
:: BatchGotAdmin
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
/***-----------------注册Lav-----------------------***/
cd/d %~dp0
regsvr32/s LAVAudio.ax
regsvr32/s LAVVideo.ax
regsvr32/s LAVSplitter.ax
pause
二:转换为exe(为了Qt进行进程调用)
以及在Bat to exe工具右边菜单栏有个选择是否显示窗口的,我这边是都进行选择了。

并选择不需要管理员权限,最近发现使用这个生成的.exe在360以及win10自带的病毒防护会识别为木马进行隔离 ....?...
查了一下,是因为使用这款工具是对软件进行upx加壳?具体的也没有深究,找个时间再研究下。。zzZ
三:自动注册
检测电脑是否已注册Lav,判断方法是从注册表CLSID去查找,但是不太确定是否得当,如果大家有好的方面,麻烦告知,
谢谢啦~
(1)、填写config文件进行判断,防止每次都要去查找注册表,影响性能。
config文件可以这样添加:

(0:表示未该电脑已注册;1:表示未注册)
将程序放到服务器上,此时config文件填写数据是0,用户自动下载后就会进行本机的检测,有就会置1,否则注册后置1。
(2)、Qt读取config文件:
void RegLav::ReadIniConfigure(QString& strConfigureName, const QString& strKey, QString& strValue)
{
QString strConfigureFile = QApplication::applicationDirPath() + "/";
strConfigureFile += strConfigureName;
QSettings sett(strConfigureFile, QSettings::IniFormat);
strValue = sett.value(strKey).toString();
}
(3)、Qt检测及注册
void RegLav::regeditLav()
{
//注册表项辨别
QSettings controls(QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\{083863F1-70DE-11D0-BD40-00A0C911CE86}\\Instance\\"), QSettings::NativeFormat); //注册表controls.beginGroup(QLatin1String("/CLSID"));
QStringList clsids = controls.childGroups();
//遍历查找当前子项
for (int i = 0; i < clsids.size(); i++)
{
if (clsids.at(i) == "{171252A0-8820-4AFE-9DF8-5C92B2D66B04}")
{
m_bRegLav = true; //控制
break;
}
}
if (m_bRegLav == false)
{
QProcess lpr;
QDir lavDir(applicationDirPath());
QString lavPath = lavDir.absolutePath();
QString LavCtl = lavPath;
lavPath += "/lavRegedit.exe";
lpr.execute(lavPath); //QProcess启动外部程序,关于进程通信,找个时间再码下..zzZ
LavCtl += "/Config.ini";
QSettings sett(LavCtl, QSettings::IniFormat); //注册完后进行改变config固定键值,以防下次打开还需查找遍历注册。
sett.setValue("IsRegLav/regeditLav",1);
}
}
(4)、函数调用
具体的情况看你需要在哪边调用写好的函数。
如:其实构造函数
void RegLav::RegLav()
{
RegLav::ReadIniConfigure(QString("Config.ini"), QString("IsRegLav/regeditLav"), strLav);
if (strLav == "0")
{
regeditLav();
}
}
注意:.bat脚本转换的exe文件、lav解码器的三个ax文件及dll要放置的位置要让程序找得到,这里是放置于与主程序一起。
实现以上功能的程序,如果使用了Qt视频播放,而又需要注册Lav解码器可以参考下,菜鸡上路,实力有限,有更好的方法欢迎交流~
zzZ... zzZ...
使用Qt自动注册Lav的更多相关文章
- 制作dll自动注册工具
记录一个简单的dll自动注册工具制作:主要用到的是DllRegisterServer()方法,其实我们平常注册dll文件内部都会调用这个方法. 这里我就直接写在主程序里面了,需要注意的地方也直接在代码 ...
- pb自动注册ole控件
方法一: 1.手工注册OCX控件 将该控件随程序一起发布,然后,将此文件拷到windows\system,或者直接放在本运行目录,然后执行dos命令,run( "regsvr32 *. ...
- C#实现Dll(OCX)控件自动注册的两种方法 网上找的 然后 自己试了试 还是可以用的
尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...
- 在 node.js 的 express web 框架中自动注册路由
该方法主要是动态注册自己写的 router . 注册器 router 文件名为 loader.js . var express = require('express'); var fs = requ ...
- .NET Core扩展IServiceCollection自动注册服务
前言 在ASP.NET Core中使用依赖注入中使用很简单,只需在Startup类的ConfigureServices()方法中,通过IServiceCollection接口进行注入即可,其它的无需关 ...
- Unity3.0基于约定的自动注册机制
前文<Unity2.0容器自动注册机制>中,介绍了如何在 Unity 2.0 版本中使用 Auto Registration 自动注册机制.在 Unity 3.0 版本中(2013年),新 ...
- Unity2.0容器自动注册机制
现如今可能每个人都会在项目中使用着某种 IoC 容器,并且我们的意识中已经形成一些固定的使用模式,有时会很难想象如果没有 IoC 容器工作该怎么进展. IoC 容器通过某种特定设计的配置,用于在运行时 ...
- C++11实现一个自动注册的工厂
实现动机 工厂方法是最简单地创建派生类对象的方法,也是很常用的,工厂方法内部使用switch-case根据不同的key去创建不同的派生类对象,下面是一个伪代码. Message* create(int ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
随机推荐
- ubuntu conda install ERROR missing write permission错误
报错: ondaIOError: Missing write permissions in: /usr/local/anaconda3 # # You don't appear to have the ...
- JDK1.8中的HashMap实现
1.HashMap概述 在JDK1.8之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的节点都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通 ...
- 初始 Kafka Consumer 消费者
温馨提示:整个 Kafka 专栏基于 kafka-2.2.1 版本. 1.KafkaConsumer 概述 根据 KafkaConsumer 类上的注释上来看 KafkaConsumer 具有如下特征 ...
- bootstrapValidator JS修改内容无法验证
需求: form表单输入中有坐标,坐标可以输入也可以从地图中获取,验证插件使用的是 bootstrapValidator 问题: 当输入错误的值时会触发验证,有错误提示.当在地图上选择坐标,通过js修 ...
- 1、纯python编写学生信息管理系统
1.效果图 2.python code: class studentSys(object): ''' _init_(self) 被称为类的构造函数或初始化方法, self 代表类的实例,self 在定 ...
- bootstrap4popper.js报错Uncaught ReferenceError
这是因为bootstrap4需要umd版的popper.js <script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/pop ...
- 主席树 - 查询某区间第 K 大
You are working for Macrohard company in data structures department. After failing your previous tas ...
- JS对JSON的使用【转】
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味 ...
- SQLiteOpenHelperde的oncreate方法
main中
- 玩转Django2.0---Django笔记建站基础四(视图)
第四章 视图 4.1 探究视图 一.视图说明 视图(View)是Django的MTV架构模式的V部分,主要负责处理用户请求和生成相应的相应部分,然后在页面或其它类型文档中显示.也可以理解为视图是MVC ...