问题描述
使用QAxObject的setControl注册接口时返回失败的解决方法
二次开发接口名称
WPS文字 KWPS.Aplication
WPS的Excel KET.Application
WPS的演示文档 KWPP.Application
Word Word.Application
Excel Excel.Application
Powerpoint Powerpoint.Application
二次开发接口的数值串:
WPS文字 {000209FF-0000-4b30-A977-D214852036FF}
WPS的Excel {45540001-5750-5300-4B49-4E47534F4655}
WPS的演示文档 {44720441-94BF-4940-926D-4F38FECF2A48}
解决方案1-更改注册表:
在win10的系统中wps的安装包没有将注册表的路径写全,所有需要手动书写注册表内容。
目前来看这种方式能解决在win10系统下的excel和ppt的模式
Excel的KET模式
reg copy HKCU\SOFTWARE\Classes\KET.Application HKLM\SOFTWARE\Classes\KET.Application /s /reg:32
reg copy HKCU\SOFTWARE\Classes\KET.Application.9 HKLM\SOFTWARE\Classes\KET.Application.9 /s /reg:32
reg copy HKCU\SOFTWARE\Classes\CLSID\{45540001-5750-5300-4B49-4E47534F4655} HKLM\SOFTWARE\Classes\CLSID\{45540001-5750-5300-4B49-4E47534F4655} /s /reg:32
PPT的KWPP模式
reg copy HKCU\SOFTWARE\Classes\KWPP.Application HKLM\SOFTWARE\Classes\KWPP.Application /s /f /reg:32
reg copy HKCU\SOFTWARE\Classes\KWPP.Application.9 HKLM\SOFTWARE\Classes\KWPP.Application.9 /s /f /reg:32
reg copy HKCU\SOFTWARE\Classes\CLSID\{44720441-94BF-4940-926D-4F38FECF2A48} HKLM\SOFTWARE\Classes\CLSID\{44720441-94BF-4940-926D-4F38FECF2A48} /s /f /reg:32
解决方案2-使用数值串注册:
以下是kwps的情况,其他接口类似处理即可
QAxObject *m_pExcel = new QAxObject();
if (!(m_pExcel->setControl("KWPS.Aplication")))
{
if (!(m_pExcel->setControl("{000209FF-0000-4b30-A977-D214852036FF}")))
return;
}
解决方案3-MMP的坑爹货,真特么的坑爹
为什么说坑爹呢,以ket为例,在win10的系统中如果你没有改注册表,那么你就算用数值串也注册不了,实际要解决这个问题还是要先改注册表,无非是用户自己改还是代码给你跑一遍的区别罢了。这种情况下,我特么的都把注册表改好了,我还需要加上这个使用数值串来注册吗?需要的!!ket和kwpp使用这种方式后能直接通过名称注册,可是特么的kwps还有坑啊,他就算这样了也不能通过名称注册。此处省略无数头草泥马
void run()
{
QAxObject *m_pExcel = new QAxObject();
RegisterKet()
if (!(m_pExcel->setControl("KET.Application")))
{
if (!(m_pExcel->setControl("{45540001-5750-5300-4B49-4E47534F4655}")))
return;
}
}
void RegisterKet()
{
QProcess p(NULL);
p.setStandardInputFile("\\log.txt");
QString command = "reg copy HKCU\\SOFTWARE\\Classes\\KET.Application HKLM\\SOFTWARE\\Classes\\KET.Application /s /f /reg:32";
p.start(command);
p.waitForFinished();
command = "reg copy HKCU\\SOFTWARE\\Classes\\KET.Application.9 HKLM\\SOFTWARE\\Classes\\KET.Application.9 /s /f /reg:32";
p.start(command);
p.waitForFinished();
command = "reg copy HKCU\\SOFTWARE\\Classes\\CLSID\\{45540001-5750-5300-4B49-4E47534F4655} HKLM\\SOFTWARE\\Classes\\CLSID\\{45540001-5750-5300-4B49-4E47534F4655} /s /f /reg:32";
p.start(command);
p.waitForFinished();
}