我的代码是这样的:
#include <QApplication>
#include <QAxObject>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建Inventor的COM组件对象
QAxObject *inventor = new QAxObject();
inventor->setControl("Inventor.Application");
// 检查是否连接成功
if (!inventor->isNull()) {
// 获取已打开的文档数和活动文档的名称
qDebug()<<"已经连接上";
QAxObject *activeDoc = inventor->querySubObject("ActiveDocument");
if (activeDoc != NULL) { // 判断获取活动文档对象是否成功
qDebug()<<"已获取到活动文档对象";
// 获取文档名称
QString documentName = activeDoc->dynamicCall("FullFileName").toString();
qDebug()<<"文档名称:"<<documentName;
}
else
{
qDebug()<<"activeDoc获取有问题";
}
} else {
qDebug() << "Failed to connect Inventor";
}
// 清除对象
delete inventor;
return app.exec();
}
输出结果:已经连接上
activeDoc获取有问题
#include <QCoreApplication>
#include <QAxObject>
#include <QDebug>
#include<windows.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
HRESULT r = OleInitialize(0);
if (r != S_OK && r != S_FALSE) {
qWarning("Failed to initialize Ole");
}
// 创建Inventor对象
QAxObject *inventor = new QAxObject("Inventor.Application");
// 显示Inventor窗口
inventor->dynamicCall("Visible",true);
// 打开指定路径的Inventor文档
QAxObject *doc = inventor->querySubObject("Documents")->querySubObject("Open(const QString&)", "D:\\xxDWJ\\xx打样\\打样-轮胎踏板\\25铝管堵头.ipt");
// 获取文档名称
QString docName = doc->dynamicCall("FullFilename").toString();
// 输出文档名称
qDebug() << "Document name: " << docName;
OleUninitialize();
返回 a.exec();
}
进程呢打开没有任何问题 说明ok,,但是如何获取 当前进程呢?
亲,建议你放弃QT,换VB.NET哦
If my post answers your question, please click the "Accept as Solution" button. This helps everyone find answers more quickly!
如果我的回帖解决了您的问题,请点击 "接受为解决方案" 按钮. 这可以帮助其他人更快的找到解决方案!
王 承之
Autodesk AGN [Inventor 俱乐部] Leader
Inventor Club | Bilibili
先使用C++的GetActiveObject方法试试,另外用pyqt不是简单很多吗?
#include <QCoreApplication>
#include <QAxObject>
#include <QDebug>
#include <windows.h>
#include <atlbase.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (FAILED(hr)) {
qWarning("Failed to initialize COM.");
return -1;
}
// 尝试获取当前打开的Inventor对象
CLSID clsid;
hr = CLSIDFromProgID(L"Inventor.Application", &clsid);
if (SUCCEEDED(hr)) {
IUnknown *pInventor = nullptr;
hr = GetActiveObject(clsid, NULL, (LPVOID*)&pInventor);
if (SUCCEEDED(hr) && pInventor) {
qDebug() << "Found running Inventor instance.";
QAxObject *inventor = new QAxObject(pInventor);
pInventor->Release();
} else {
qDebug() << "No running Inventor instance found.";
}
} else {
qDebug() << "Failed to get CLSID for Inventor.";
}
CoUninitialize();
return a.exec();
}