找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 803|回复: 11

[求助]:vc怎么检测autocad是否在运行?

[复制链接]
发表于 2002-11-25 11:44:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如果我要让autocad只能运行一次怎么办?望高手赐教!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-11-25 18:30:34 | 显示全部楼层

  1.   [FONT=courier new]
  2. void CExcelaDlg::OnAutocadtest()
  3. {
  4.         // TODO: Add your control notification handler code here
  5.         IAcadApplication m_autocad;
  6.         IAcadDocuments m_acaddocs;
  7.         IAcadDocument  m_acaddoc;
  8.         IAcadModelSpace m_acadmodel;

  9.         LPDISPATCH pDisp;
  10.         LPUNKNOWN pUnk;
  11.         CLSID clsid;
  12.         BeginWaitCursor();
  13.         ::CLSIDFromProgID(L"AutoCAD.Application",&clsid);
  14.         if(::GetActiveObject(clsid,NULL,&pUnk)==S_OK)
  15.         {
  16.                 VERIFY(pUnk->QueryInterface(IID_IDispatch,(void**) &pDisp)==S_OK);
  17.                 m_autocad.AttachDispatch(pDisp);
  18.                 pUnk->Release();
  19.         }
  20.         else
  21.         {
  22.                 if(!m_autocad.CreateDispatch("AutoCAD.Application"))
  23.                 {
  24.                         AfxMessageBox("Autocad program not found\n");
  25.                         exit(1);
  26.                 }
  27.         }
  28.         m_autocad.SetVisible(true);
  29.         m_acaddocs.AttachDispatch(m_autocad.GetDocuments(),true);
  30.         m_acaddoc.AttachDispatch(m_acaddocs.Add(vtMissing),true);
  31.         m_acadmodel.AttachDispatch(m_acaddoc.GetModelSpace(),true);
  32.         m_acadmodel.AddCircle(pVal,100);
  33.        
  34.         m_acadmodel.ReleaseDispatch();
  35.         m_acaddoc.ReleaseDispatch();
  36.         m_acaddocs.ReleaseDispatch();
  37.         m_autocad.ReleaseDispatch();


  38.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-25 22:04:46 | 显示全部楼层

Re: [求助]:vc怎么检测autocad是否在运行?

最初由 zsl_007 发布
[B]如果我要让autocad只能运行一次怎么办?望高手赐教! [/B]

有几个办法:
1.致信Autodesk,要求autocad自身只能运行一个实例
2.自己写个 Windows 外壳(Shell), 监控,只允许运行一个实例
3.拦截WinExec()
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-26 11:31:12 | 显示全部楼层
"1.致信Autodesk,要求autocad自身只能运行一个实例"?
这个方法行的通吗?  若以个人的名义致信Autodesk呢?
请赐教.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-26 13:12:25 | 显示全部楼层
indal,你用的是com调用吧,可不可以稍微解释一下,有好多东东我不知道是怎么来的!
我用等待线程的方式也实现了,给大家看看!
        AfxGetMainWnd()->BeginWaitCursor();//设置等待光标
        long errorflag;
        //从注册表获得autocad的路径
        errorflag=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\autodesk\\autocad\\r15.0\\acad-1:804",0,KEY_ALL_ACCESS,&hkey);
        if (errorflag!=ERROR_SUCCESS)
        {
                //AfxMessageBox("AutoCad2000未安装,请先安装AutoCad2000!");
                return;
        }
        errorflag=RegQueryValueEx(hkey,"acadlocation",NULL,&dwtype, (LPBYTE)KeyValue,&Len);
        if (errorflag!=ERROR_SUCCESS)
        {
                //AfxMessageBox("AutoCad2000未安装,请先安装AutoCad2000!");
                return;
        }
        AppPath="acad.exe";
        //创建进程,执行AutoCAD并在启动时执行绘图程序
        flag=CreateProcess((LPCSTR)AppPath,NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,GetAppPath(),&StartupInfo,&ProcessInformation);
        if (flag)
        {
                AfxGetMainWnd()->ShowWindow(SW_HIDE);//隐藏主窗口
                WaitForSingleObject(ProcessInformation.hProcess,INFINITE);//等待AutoCAD执行完毕
                AfxGetMainWnd()->ShowWindow(SW_SHOW);//显示主窗口
                AfxGetMainWnd()->SetFocus();//恢复主窗口的焦点
        }

        AfxGetMainWnd()->EndWaitCursor();//结束等待光标
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-10 09:07:20 | 显示全部楼层
我有一方法,自己开发一ARX程序,该程序检测内存中是否有autocad在运行,如有就马上向当前autoca运行实例发退出命令,用注册表方法加载该ARX程序,OK!

检测进程实例是否存在,用到VC的知识,到www.vccode.com
www.vckbase.com
两个站点找这方面的例程很多。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-10 09:51:06 | 显示全部楼层
如果获得autocad的路径会不会有多种情况?R14 R2000 R2000i R2002的Key值是否一样?各语言版本的Key值是否一样?请指教!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-10 16:05:07 | 显示全部楼层
好像不一样吧,比如中文和英文ACAD2K在注册表中的curVer值就不一样。
使用中我是先读curVer的键值,然后再找相应的项去读Path的,虽然没错,
但也老觉得不保险。

COM的GetPath()方法得到的一定是正确的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2006-5-28 00:26:17 | 显示全部楼层
在程序中不用COM方法能判断AutoCAD进程是否存在吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-28 08:17:24 | 显示全部楼层
我用VB去驱动AutoCAD,用VB做程序启动界面比较容易,而且也很稳定。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-29 13:22:03 | 显示全部楼层
实际上这个问题说得比较泛,有以下几点要澄清:
1、是否只允许特定版本的CAD在本地只有一个实例
2、是否只允许特定客户程序启动CAD一次
如果全部按照泛指,即只允许本地机器上只有一个CAD实例在运行,并且不论他的启动方式如何,那最好的办法是采用函数钩子法来处理:Windows系统范围内对CreateProcessA(W)、CreateProcessAsUserA(W)设置钩子,监视所有进程创建与销毁。简化实现为CBT钩子,但对于OLE方式的CAD启动好像检测不到。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-29 17:14:45 | 显示全部楼层
正在找这个
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 12:30 , Processed in 0.221262 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表