dinosaurhxe 发表于 2011-5-5 14:37:38

获取本机IP地址

(setq obj (vlax-get-or-create-object "rcbdyctl.setting"))
(setq ip   (vlax-get-property obj 'GetIPAddress))
(vlax-release-object obj)
上述代码为获取本机IP地址,若干年前在由明总和英雄无敌指点而得。
如今换了Win 7系统,发现这段代码不能用了。
仔细查了一下
第一行在XP下返回:#<VLA-OBJECT ISetting 1a130df8>
而在Win 7 下返回:nil
不知Win 7 下“rcbdyctl.setting"应该改为什么?

highflybird 发表于 2011-5-5 15:23:09

恐怕在windows 7下不能这样使用。
最好用其他办法。参见我下面的帖子

http://bbs.mjtd.com/thread-85042-1-1.html

dinosaurhxe 发表于 2011-5-5 16:10:59

拜读大作中……

dinosaurhxe 发表于 2011-5-5 16:59:26

有点高深啊,没能读太懂,但看到“WINSOCK对象 ;;获取本机的内网IP”这段,XP和Win 7下测试
(setq wsock (vlax-create-object "MSWinsock.Winsock"))
均返回nil

xiaxiang 发表于 2011-5-5 17:02:13

试试我这段在win7下可以吗

(defun c:DLLTest ( )
    (alert
      (strcat
            "IPAddress = ["
            (vlax-invoke
                (vla-GetInterfaceObject
                  (vlax-get-acad-object)
                  "DLLTest.Utility"
                )   
                'GetIPAddress            
            )
            "]"
      )   
    )
   
    (princ)
   
)将附件动态库拷贝到支持路径下。执行lsp程序。

dinosaurhxe 发表于 2011-5-5 17:26:21

非常感谢楼上,但我刚在XP下试了一下暂时不行。
; 错误: Automation 错误。 加载应用程序时出现问题

而且这得拷个文件到支持目录,比较麻烦。

再次感谢!

highflybird 发表于 2011-5-5 18:29:02

本帖最后由 highflybird 于 2011-5-5 18:42 编辑

回复 dinosaurhxe 的帖子

其实我在那篇帖子里面讲了几种方法。
winsock不是所有的机器都有。

(defun GetIP (/ SWbemLocator Service IPSet lst IP Address)
(setq SWbemLocator (vlax-create-object "WbemScripting.SWbemLocator"))         
(setq Service (vlax-invoke obj 'ConnectServer))
(setq IPSet (vlax-invoke Service 'InstancesOf "Win32_NetworkAdapterConfiguration"))
(setq lst nil)
(vlax-for IP IPSet
    (if (setq Address (vlax-get IP 'IPAddress ))
      (setq lst (cons Address lst))
    )
)
(vlax-release-object IPSet)
(vlax-release-object Service)
(vlax-release-object SWbemLocator)

(reverse lst)
)


其实还有另外一种方法,就是读取注册表中的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
那几个数值,就可以得到的。

dinosaurhxe 发表于 2011-5-5 19:19:19

(setq Service (vlax-invoke obj 'ConnectServer))在XP和Win7中出现同样的错误。
; 错误: ActiveX 服务器返回错误: 未知名称: CONNECTSERVER

读注册表是个不错的方法,可怎么遍历 Interfaces下几个目录的IpAddress呢?

dinosaurhxe 发表于 2011-5-5 19:28:32

嗯,找到方法了,感谢!(defun getmyip (/ lst str)
(setq        lst
       (vl-registry-descendents
           "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces"
       )
)
(setq str "")
(foreach ele lst
    (setq str
           (strcat
             str
             ";"
             (nth
             1
             (vl-registry-read
               (strcat
                   "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\"
                   ele
               )
               "IPAddress"
             )
             )
           )
    )
)
str
)

dinosaurhxe 发表于 2011-5-5 19:39:24

还有个问题,XP下是IPAddress而Win7下是DhcpIPAddress。
页: [1] 2
查看完整版本: 获取本机IP地址