马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 marting 于 2018-2-7 13:24 编辑
下面提供一些方法:
一、判断系统是多少位,而不是AUTOCAD
1、WMI查询 Win32_OperatingSystem
 - (defun c:info (/ WMI Serv OSArch item prop)
- (vl-load-com)
- (setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
- Serv (vlax-invoke
- WMI 'ConnectServer nil nil nil nil nil nil nil nil)
- OSArch (vlax-invoke
- Serv
- 'ExecQuery
- "Select OSArchitecture from Win32_OperatingSystem"
- )
- )
- (vlax-for item OSArch
- (vlax-for prop (vlax-get item 'Properties_)
- (princ (vlax-get prop 'Value))
- )
- )
- (mapcar 'vlax-release-object (list OSArch Serv wmi))
- (princ)
- )
上面换成通用函数库的WMI查询函数是
 - (xd::system:wmi-query "Win32_OperatingSystem" "OSArchitecture" "")
命令: (xd::system:wmi-query "Win32_OperatingSystem" "OSArchitecture" "")
("64 位")
2、WMI 查询 Win32_Processor 表的 Architecture 字段
 - (defun _Is64Bit (/ wmiLocater wmiService queryResult result)
- ;;========================================================================
- ;;
- ;; 2010/04/23 | Quick & Dirty | Michael Puckett
- ;;
- ;;========================================================================
- (vl-catch-all-apply
- '(lambda ()
- (vlax-for item (setq queryResult
- (vlax-invoke
- (setq wmiLocater (vlax-create-object
- "WbemScripting.SWbemLocator"
- )
- wmiService (vlax-invoke
- wmiLocater
- 'ConnectServer
- "."
- "root\\cimv2"
- )
- )
- 'ExecQuery
- (strcat "Select Architecture "
- "from Win32_Processor "
- )
- )
- )
- (setq result (vlax-get item 'Architecture))
- )
- )
- )
- (if queryResult
- (vlax-release-object queryResult)
- )
- (if wmiService
- (vlax-release-object wmiService)
- )
- (if wmiLocater
- (vlax-release-object wmiLocater)
- )
- (if result
- (eq 9 result)
- )
- )
- [/coded]
- 等同于:
- [code=lisp]
- (defun _Is64Bit ()
- (if (setq
- result (xd::system:wmi-query "Win32_Processor" "Architecture" "")
- )
- (wcmatch (car result) "*64*")
- )
- )
3、WMI 查询 Win32_Processor 表的 Description 字段
 - (defun _Is64Bit (/ wmiLocater wmiService queryResult result)
- ;;========================================================================
- ;;
- ;; 2010/04/23 | Quick & Dirty | Michael Puckett
- ;;
- ;;========================================================================
- (vl-catch-all-apply
- '(lambda ()
- (vlax-for item (setq queryResult
- (vlax-invoke
- (setq wmiLocater (vlax-create-object
- "WbemScripting.SWbemLocator"
- )
- wmiService (vlax-invoke
- wmiLocater
- 'ConnectServer
- "."
- "root\\cimv2"
- )
- )
- 'ExecQuery
- (strcat "Select Description "
- "from Win32_Processor "
- )
- )
- )
- (setq result (vlax-get item 'Description))
- )
- )
- )
- (if queryResult
- (vlax-release-object queryResult)
- )
- (if wmiService
- (vlax-release-object wmiService)
- )
- (if wmiLocater
- (vlax-release-object wmiLocater)
- )
- (if result
- (wcmatch result "*64*")
- )
- )
等同于:
 - (defun _Is64Bit ()
- (if (setq
- result (xd::system:wmi-query "Win32_Processor" "Description" "")
- )
- (wcmatch (car result) "*64*")
- )
- )
2、注册表查询
 - (vl-registry-descendents "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node")
二、判断AUTOCAD是多少位
 - (vl-string-search "X64" (strcase (getvar 'PLATFORM)))
 - (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
函数:
 - (defun ISX64 (/ arch)
- (and (setq arch (getenv "PROCESSOR_ARCHITECTURE"))
- (< 1 (strlen arch))
- (eq "64" (substr arch (1- (strlen arch))))
- )
- )
 - (defun _acad_isx64 ()
- (vl-load-com)
- (> (strlen (vl-prin1-to-string (vlax-get-acad-object))) 40)
- )
|