找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 437|回复: 8

[每日一码] 判断系统32位或是64位

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-2-7 12:59:06 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 marting 于 2018-2-7 13:24 编辑

下面提供一些方法:

一、判断系统是多少位,而不是AUTOCAD

1、WMI查询 Win32_OperatingSystem

  1. (defun c:info (/ WMI Serv OSArch item prop)
  2.   (vl-load-com)
  3.   (setq        WMI    (vlax-create-object "WbemScripting.SWbemLocator")
  4.         Serv   (vlax-invoke
  5.                  WMI 'ConnectServer nil        nil nil        nil nil        nil nil        nil)
  6.         OSArch (vlax-invoke
  7.                  Serv
  8.                  'ExecQuery
  9.                  "Select OSArchitecture from Win32_OperatingSystem"
  10.                )
  11.   )
  12.   (vlax-for item OSArch
  13.     (vlax-for prop (vlax-get item 'Properties_)
  14.       (princ (vlax-get prop 'Value))
  15.     )
  16.   )
  17.   (mapcar 'vlax-release-object (list OSArch Serv wmi))
  18.   (princ)
  19. )



上面换成通用函数库的WMI查询函数是

  1. (xd::system:wmi-query "Win32_OperatingSystem" "OSArchitecture" "")


命令: (xd::system:wmi-query "Win32_OperatingSystem" "OSArchitecture" "")
("64 位")

2、WMI 查询 Win32_Processor 表的 Architecture  字段

  1. (defun _Is64Bit        (/ wmiLocater wmiService queryResult result)
  2.   ;;========================================================================
  3.   ;;
  4.   ;;  2010/04/23 | Quick & Dirty | Michael Puckett
  5.   ;;
  6.   ;;========================================================================
  7.   (vl-catch-all-apply
  8.     '(lambda ()
  9.        (vlax-for item (setq queryResult
  10.                              (vlax-invoke
  11.                                (setq wmiLocater        (vlax-create-object
  12.                                                   "WbemScripting.SWbemLocator"
  13.                                                 )
  14.                                      wmiService        (vlax-invoke
  15.                                                   wmiLocater
  16.                                                   'ConnectServer
  17.                                                   "."
  18.                                                   "root\\cimv2"
  19.                                                 )
  20.                                )
  21.                                'ExecQuery
  22.                                (strcat "Select Architecture "
  23.                                        "from   Win32_Processor "
  24.                                )
  25.                              )
  26.                       )
  27.          (setq result (vlax-get item 'Architecture))
  28.        )
  29.      )
  30.   )
  31.   (if queryResult
  32.     (vlax-release-object queryResult)
  33.   )
  34.   (if wmiService
  35.     (vlax-release-object wmiService)
  36.   )
  37.   (if wmiLocater
  38.     (vlax-release-object wmiLocater)
  39.   )
  40.   (if result
  41.     (eq 9 result)
  42.   )
  43. )
  44. [/coded]

  45. 等同于:
  46. [code=lisp]
  47. (defun _Is64Bit        ()
  48.   (if (setq
  49.         result (xd::system:wmi-query "Win32_Processor" "Architecture" "")
  50.       )
  51.     (wcmatch (car result) "*64*")
  52.   )
  53. )




3、WMI 查询 Win32_Processor 表的 Description 字段

  1. (defun _Is64Bit        (/ wmiLocater wmiService queryResult result)
  2.   ;;========================================================================
  3.   ;;
  4.   ;;  2010/04/23 | Quick & Dirty | Michael Puckett
  5.   ;;
  6.   ;;========================================================================
  7.   (vl-catch-all-apply
  8.     '(lambda ()
  9.        (vlax-for item (setq queryResult
  10.                              (vlax-invoke
  11.                                (setq wmiLocater        (vlax-create-object
  12.                                                   "WbemScripting.SWbemLocator"
  13.                                                 )
  14.                                      wmiService        (vlax-invoke
  15.                                                   wmiLocater
  16.                                                   'ConnectServer
  17.                                                   "."
  18.                                                   "root\\cimv2"
  19.                                                 )
  20.                                )
  21.                                'ExecQuery
  22.                                (strcat "Select Description "
  23.                                        "from   Win32_Processor "
  24.                                )
  25.                              )
  26.                       )
  27.          (setq result (vlax-get item 'Description))
  28.        )
  29.      )
  30.   )
  31.   (if queryResult
  32.     (vlax-release-object queryResult)
  33.   )
  34.   (if wmiService
  35.     (vlax-release-object wmiService)
  36.   )
  37.   (if wmiLocater
  38.     (vlax-release-object wmiLocater)
  39.   )
  40.   (if result
  41.     (wcmatch result "*64*")
  42.   )
  43. )


等同于:

  1. (defun _Is64Bit        ()
  2.   (if (setq
  3.         result (xd::system:wmi-query "Win32_Processor" "Description" "")
  4.       )
  5.     (wcmatch (car result) "*64*")
  6.   )
  7. )




2、注册表查询

  1. (vl-registry-descendents "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node")


二、判断AUTOCAD是多少位

  1. (vl-string-search "X64" (strcase (getvar 'PLATFORM)))


  1. (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))

函数:
  1. (defun ISX64 (/ arch)
  2.   (and (setq arch (getenv "PROCESSOR_ARCHITECTURE"))
  3.        (< 1 (strlen arch))
  4.        (eq "64" (substr arch (1- (strlen arch))))
  5.   )
  6. )

  1. (defun _acad_isx64 ()
  2.   (vl-load-com)
  3.   (> (strlen (vl-prin1-to-string (vlax-get-acad-object))) 40)
  4. )






评分

参与人数 2D豆 +10 收起 理由
/db_自贡黄明儒_ + 5
sh_h + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 769个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2018-2-7 14:24:01 | 显示全部楼层
(vl-string-search "X64" (strcase (getvar 'PLATFORM)))
(vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
这两句跟autocad有什么关系?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2018-2-7 14:45:27 | 显示全部楼层

2008下执行
命令: (getenv "PROCESSOR_ARCHITECTURE")
"x86"


命令: (strcase (getvar 'PLATFORM))
"MICROSOFT WINDOWS NT VERSION 6.2 (X86)"



2012 64位下执行:

命令: (getenv "PROCESSOR_ARCHITECTURE")
"AMD64"


命令: (strcase (getvar 'PLATFORM))
"MICROSOFT WINDOWS NT VERSION 6.2 (X64)"

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

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2018-2-7 14:53:56 | 显示全部楼层
看这返回值是windows的平台版本和处理器信息啊,不明白
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2018-2-7 14:56:24 | 显示全部楼层
本帖最后由 marting 于 2018-2-7 14:57 编辑

后面不是有 86,64的不同嘛,你可以根据这个,判断ACAD是多少位的。

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

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 67个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 17:16 , Processed in 0.410687 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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