找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 401|回复: 10

[求助] 如何判断CAD是否正在运行???????????

[复制链接]
发表于 2017-3-21 13:53:48 | 显示全部楼层 |阅读模式

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

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

×
我在EXCEL用VBA加入了一段判断CAD是否正在运行的程序:
On Error Resume Next
            Set acadApp = GetObject(, "AutoCAD.Application")
            If acadApp Is Nothing Then
                MsgBox "Çë′ò¿aAutoCAD¡£"
                    Else

大部分机器都没问题,32位或64位,可有的机器监测不到CAD是否在运行,估计是系统进程的事,大家帮着分析一下有可能什么地方出现了问题?如何解决?
我在EXCEL论坛发表这类问题,都说上面的方法没问题,可在实际装机器时就出现了无法监测CAD
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-3-21 15:03:20 | 显示全部楼层
检测不到CAD到时候,CAD是什么版本呢?

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

使用道具 举报

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-3-21 17:24:51 | 显示全部楼层
本帖最后由 st788796 于 2017-3-21 17:26 编辑

  1. Sub 所有进程()
  2. Set objs = GetObject("WinMgmts:").InstancesOf("Win32_Process")
  3. For Each Obj In objs
  4. tmp = tmp & WorksheetFunction.Text(a + 1, "[DBNum2][$-804]0:  ") + vbTab + Obj.Description + Chr(13)
  5. a = a + 1
  6. Next
  7. MsgBox tmp, 65, "提醒:"
  8. End Sub

  1. Option Explicit

  2. Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
  3. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  4. Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
  5. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
  6. Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  7. Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
  8. Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
  9. Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
  10. Private Declare Sub RtlMoveMemory Lib "kernel32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

  11. '==========================================================
  12. '通过进程名获得PID所用 上面声明过的这里暂且注释掉
  13. '私有的CreateToolhelp32Snapshot
  14. Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
  15. Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
  16. Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
  17. '私有的TerminateProcess
  18. Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
  19. 'Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  20. 'Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
  21. Private Const TH32CS_SNAPPROCESS = &H2&

  22. Private Type PROCESSENTRY32
  23.     dwSize As Long
  24.     cntUsage As Long
  25.     th32ProcessID As Long
  26.     th32DefaultHeapID As Long
  27.     th32ModuleID As Long
  28.     cntThreads As Long
  29.     th32ParentProcessID As Long
  30.     pcPriClassBase As Long
  31.     dwFlags As Long
  32.     szExeFile As String * 260
  33. End Type
  34. Const PROCESS_TERMINATE = 1

  35. '==============================================================
  36. '通过进程PID获取应用程序的完整路径
  37. Public Function GetProcessPathByProcessID(pid As Long) As String
  38.     On Error GoTo ErrLine
  39.     Dim cbNeeded As Long
  40.     Dim szBuf(1 To 250) As Long
  41.     Dim Ret As Long
  42.     Dim szPathName As String
  43.     Dim nSize As Long
  44.     Dim hProcess As Long
  45.     hProcess = OpenProcess(&H400 Or &H10, 0, pid)
  46.     If hProcess <> 0 Then
  47.        Ret = EnumProcessModules(hProcess, szBuf(1), 250, cbNeeded)
  48.        If Ret <> 0 Then
  49.          szPathName = Space(260)
  50.          nSize = 500
  51.          Ret = GetModuleFileNameExA(hProcess, szBuf(1), szPathName, nSize)
  52.          GetProcessPathByProcessID = Left(szPathName, Ret)
  53.        End If
  54.     End If
  55.     Ret = CloseHandle(hProcess)
  56.     If GetProcessPathByProcessID = "" Then
  57.        GetProcessPathByProcessID = "SYSTEM"
  58.     End If
  59. ErrLine:
  60. End Function


  61. '通过进程名获得进程PID
  62. Public Function GetProcessPID(sProcess As String) As Long
  63.     Dim lSnapShot As Long
  64.     Dim lNextProcess As Long
  65.     Dim tPE As PROCESSENTRY32
  66.     Dim lProcess As Long
  67.     Dim lExitCode As Long
  68.     lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
  69.     If lSnapShot <> -1 Then
  70.         tPE.dwSize = Len(tPE)
  71.         lNextProcess = Process32First(lSnapShot, tPE)
  72.         Do While lNextProcess
  73.             If LCase$(sProcess) = LCase$(Left(tPE.szExeFile, InStr(1, tPE.szExeFile, Chr(0)) - 1)) Then
  74.                 'Dim lProcess As Long
  75.                 'Dim lExitCode As Long
  76.                 GetProcessPID = tPE.th32ProcessID
  77.                 CloseHandle lProcess
  78.             End If
  79.             lNextProcess = Process32Next(lSnapShot, tPE)
  80.         Loop
  81.         CloseHandle (lSnapShot)
  82.     End If
  83. End Function

  84. '通过进程名获得应用程序的路径(通过上面两个函数)
  85. Public Function GetProcessPath(sProcess As String) As String
  86.     Dim aa As Long
  87.     aa = GetProcessPID(sProcess)
  88.     GetProcessPath = GetProcessPathByProcessID(aa)
  89. End Function

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-3-21 18:04:51 | 显示全部楼层

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

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-3-22 08:35:38 | 显示全部楼层

说的是在 Excel 运行的 VBA ,改在 AutoCAD 下有什么意义?

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-3-22 08:45:23 | 显示全部楼层

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-3-22 09:15:59 | 显示全部楼层

Windows 10 64bit 管理员权限测试 OK

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

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

发表于 2017-3-23 14:06:31 | 显示全部楼层
关键是GetObject(, "AutoCAD.Application")不能根据Pid选择进程,CreateObject也不行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 07:35 , Processed in 0.449498 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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