当前位置:服务支持 >  软件文章 >  后台启动SOLIDWORKS应用程序方法

后台启动SOLIDWORKS应用程序方法

阅读数 6
点赞 0
article_banner

在某些情况下,使用独立应用程序时,在后台启动应用程序(不可见)可能会有所帮助。此方法可提供更好的用户体验和更好的性能。

任何窗口进程都可以通过使用“ProcessStartInfo”来隐藏其主窗口。(https://learn.microsoft.com/zh-cn/dotnet/api/system.diagnostics.processstartinfo)

var prcInfo = new ProcessStartInfo()
{
    FileName = appPath,
    CreateNoWindow = true,
    WindowStyle = ProcessWindowStyle.Hidden
};

然而,对于 SOLIDWORKS 应用程序,此代码可能并不总是有效。隐藏窗口的替代方法是使用Windows32 API的ShowWindow函数(https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-showwindow)。在应用此方法之前,需要等到创建句柄(until the handle is created)并且 SOLIDWORKS 完全加载。

除此之外,在启动 SOLIDWORKS 实例时使用 /r 参数也是有益的。此参数将允许隐藏初始屏幕并加快启动速度。对于 SOLIDWORKS Professional 和 Premium,也可以使用 /b 参数在后台启动 SOLIDWORKS(仍然可见,still visible)。

/b 标志由 SOLIDWORKS 任务计划程序处理,不适用于 SOLIDWORKS 标准版,因为任务计划程序不包含在此包中。

下面的函数考虑了上述所有要点,并在后台启动了 SOLIDWORKS 的新会话。将此函数与创建 C# 独立应用程序中的代码结合使用。

某些SOLIDWORKS  API 方法可能无法执行或行为不正确,因为 SOLIDWORKS 应用程序不可见。

private static ISldWorks StartSwAppBackground(string appPath, int timeoutSec = 20)
{
    var timeout = TimeSpan.FromSeconds(timeoutSec);

    var startTime = DateTime.Now;

    var prcInfo = new ProcessStartInfo()
    {
        FileName = appPath,
        Arguments = "/r", //no splash screen,无初始屏幕
        CreateNoWindow = true,
        WindowStyle = ProcessWindowStyle.Hidden
    };

    var prc = Process.Start(prcInfo);

    ISldWorks app = null;

    var isLoaded = false;

    var onIdleFunc = new DSldWorksEvents_OnIdleNotifyEventHandler(() =>
    {
        isLoaded = true;
        return 0;
    });

    try
    {

        while (!isLoaded)
        {
            if (DateTime.Now - startTime > timeout)
            {
                throw new TimeoutException();
            }

            if (app == null)
            {
                app = GetSwAppFromProcess(prc.Id);

                if (app != null)
                {
                    (app as SldWorks).OnIdleNotify += onIdleFunc;
                }
            }

            System.Threading.Thread.Sleep(100);
        }

        if (app != null)
        {
            const int HIDE = 0;
            ShowWindow(new IntPtr(app.IFrameObject().GetHWnd()), HIDE);
        }
    }
    catch
    {
        throw;
    }
    finally
    {
        if (app != null)
        {
            (app as SldWorks).OnIdleNotify -= onIdleFunc;
        }
    }

    return app;
}

文章翻译自https://www.codestack.net/

仅供学习使用。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空