Board logo

标题: Microsoft 网络的文件和打印机共享→勾选/取消勾选→VBS版 [打印本页]

作者: baomaboy     时间: 2007-5-13 01:09    标题: Microsoft 网络的文件和打印机共享→勾选/取消勾选→VBS版

谢谢eech的测试和lxmxn版主的ncpa.cpl,解决了非经典开始菜单下运行出错的bug。
增加了ronin要求的自动判断勾选状态,本机测试通过,但通用性差,需要的请自行修改。
注:运行参数 i 后没有任何反应是正常状态,因为检测到已经开启共享了不需要执行,反之 参数 u 也一样。

  Quote:
'''NetShare_Power.VBS by baomaboy
'''支持参数 i 开启,u 关闭,如:"wscript.exe NetShare_Power.VBS i"
Dim WshSHell
On Error Resume Next
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Args = WScript.Arguments
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Services\lanmanserver\Linkage","Route", arrValues
For Each strValue In arrValues
DuoString=DuoString&strValue
Next
NetShareState = InStr(DuoString,"{86522D76-E90D-4C8B-957E-FA3603378EA5}")
if Args.Count=0 then
intAnswer = MsgBox("【是】将开启“Microsoft 网络的文件和打印机共享”项,"&Chr(10)&Chr(10)&"【否】将关闭“Microsoft 网络的文件和打印机共享”项。", vbQuestion + vbYesNoCancel, "开/关Microsoft 网络的文件和打印机共享” - baomaboy")
If intAnswer = vbYes and NetShareState = 0 Then
Call Exc
end if
If intAnswer = vbNo and NetShareState <> 0 Then
Call Exc
end if
elseif LCase(Args(0)) = "i" and NetShareState = 0 then
Call Exc
elseif LCase(Args(0)) = "u" and NetShareState <> 0 then
Call Exc
end if
Sub Exc()
WshSHell.Run "control.exe ncpa.cpl"
WScript.Sleep 1000
WshSHell.SendKeys "{DOWN}{UP}"
WScript.Sleep 1000
WshSHell.SendKeys "%FR"
WScript.Sleep 1000
WshSHell.SendKeys "{DOWN}{ }"
WScript.Sleep 1000
WshSHell.SendKeys "{TAB 5}{Enter}"
WScript.Sleep 3000
WshSHell.SendKeys "%FC"
End Sub
Set WshSHell = Nothing
WScript.Quit

 

[ Last edited by baomaboy on 2008-3-24 at 11:59 PM ]
作者: wudixin96     时间: 2007-5-13 10:52
发现2000下。似乎没效果哦
作者: eech     时间: 2007-5-13 12:58
XPSP2运行后,
开始菜单闪一下
弹出搜索的窗口,
http://photo1.bababian.com/uploa ... 75245B6A0D150A6.jpg
然后自动关闭这个窗口
作者: ronin     时间: 2007-5-13 14:01
使用正常,谢谢baomaboy帮我解决了两个大问题
作者: baomaboy     时间: 2007-5-13 14:37


  Quote:
Originally posted by eech at 2007-5-13 12:58:
XPSP2运行后,
开始菜单闪一下
弹出搜索的窗口,
http://photo1.bababian.com/uploa ... 75245B6A0D150A6.jpg
然后自动关闭这个窗口

^_^ 发现你的系统总与大家的有些异样啊,不过这个问题到是看明白了,你应该用的是xp默认的菜单,换成”经典开始“就行了,
等会儿写个两个菜单都适用的本版更新一下,
呵呵 你的测试很好啊,这两个代码更加完善了,适用性更强了。
作者: ronin     时间: 2007-5-13 14:47
等待你的新版本哦
作者: baomaboy     时间: 2007-5-13 15:07


  Quote:
Originally posted by ronin at 2007-5-13 14:47:
等待你的新版本哦

已经改进了关于使用非“经典开始菜单”时运行出错的bug
作者: eech     时间: 2007-5-13 15:46
对了,baomaboy兄,你写的脚本是去掉这项的吧

http://photo1.bababian.com/uploa ... DF054EAA4D5DE47.jpg
作者: baomaboy     时间: 2007-5-13 16:13


  Quote:
Originally posted by eech at 2007-5-13 15:46:
对了,baomaboy兄,你写的脚本是去掉这项的吧

http://photo1.bababian.com/uploa ... DF054EAA4D5DE47.jpg

是的,你的多了虚拟机。另外发图片时用“插入图片”功能或用代码发大家就可以直接看到了
[img]http://photo1.bababian.com/upload/20070513/C345DEC54A6B2CE7ADF054EAA4D5DE47.jpg[/img]


[ Last edited by baomaboy on 2007-5-13 at 04:15 PM ]
作者: ronin     时间: 2007-5-13 16:39
baomaboy能不能改成勾选和取消勾选两个VBS?这样才方便批处理调用,在控制开通共享和关闭共享时候要分别调用才行
作者: baomaboy     时间: 2007-5-13 17:01


  Quote:
Originally posted by ronin at 2007-5-13 16:39:
baomaboy能不能改成勾选和取消勾选两个VBS?这样才方便批处理调用,在控制开通共享和关闭共享时候要分别调用才行

理论上可以啊,一会儿有时间,我改一下,不用两个VBS,加个判断一个VBS就行。
作者: baomaboy     时间: 2007-5-13 17:02
刚才没看到还要调用,如果不用两个VBS要加参数调用。
作者: ronin     时间: 2007-5-13 17:18
我觉得用两个和参数调用都可以
作者: baomaboy     时间: 2007-5-13 17:47


  Quote:
Originally posted by ronin at 2007-5-13 17:18:
我觉得用两个和参数调用都可以

是可以,要么两个VBS文件,要么一个VBS文件加参数调用,

嗯 那个 “判断勾选” 可能要读一下注册表或用到WMI,你可以先试试看。我现在没时间,之后再试。
作者: ronin     时间: 2007-5-14 10:10
发现了一个问题,批处理设置IP和其它电脑有重复时候,这个VBS就没有效果
作者: baomaboy     时间: 2007-5-14 11:06
我这里单机没局域网环境所以没法调试,我猜测可能是打开,网络连接属性后,系统弹出一个提示IP地址冲突的错误提示框打断了sendkeys的过程,也许可以加个窗口判断....全是猜测
作者: ronin     时间: 2007-5-14 12:29
那就不用去管,这个几率极少,而且应该可以通过批处理来修正
作者: baomaboy     时间: 2007-5-14 16:17
To ronin

加入了自动判断勾选状态....本机测试成功....
作者: ronin     时间: 2007-5-14 21:48
测试了,加 i 参数,可以运行,但和以前那个一样,只是在勾选和取消勾选之间运行,加 U 没反应
作者: baomaboy     时间: 2007-5-14 23:26
呵呵 你说的应该是正常现象,有两种情况是没反应的,
1,加参数 i 时,已经检测到勾选,当然不会执行。
2,加参数 u 死,已经检测到关闭了,也当然不会执行。
必须要这样,因为只要执行,勾选状态就会改变。
作者: ronin     时间: 2007-5-15 09:09
1,加参数 i 时,已经检测到勾选,当然不会执行
这个情况下,无论有没有勾选都会执行

2,加参数 u 死,已经检测到关闭了,也当然不会执行。
有没有勾选都没有反应
作者: baomaboy     时间: 2007-5-15 15:34
你用的什么系统?可能是文件共享的CLSID由于系统版本或其他原因不一样导致的,看来这样改的通用性不是很好,我想想看能不能用其他办法。另外你用下面的代码在勾选状态下执行,发张截图上来我看看。如下图:



'''NetShare_Power.VBS by baomaboy
'''支持参数 i 开启,u 关闭,如:"wscript.exe NetShare_Power.VBS i"
Dim WshSHell
'On Error Resume Next
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Args = WScript.Arguments
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Services\lanmanserver\Linkage","Route", arrValues
For Each strValue In arrValues
DuoString=DuoString&strValue&vbcr
Next
msgbox DuoString
Set WshSHell = Nothing
WScript.Quit

作者: ronin     时间: 2007-5-15 17:40
和你的不一样,系统是winxp sp2


[ Last edited by ronin on 2007-5-15 at 05:41 PM ]
作者: Climbing     时间: 2007-5-28 15:30
顶楼的脚本通用性太差,如果用户有多个本地连接怎么办?脚本运行过程中,当前窗口的焦点转移了又如何?

归根结底,只能怪Windows设计的太差,不是所有的鼠标操作都可以转换为命令行方式,总之,wmic设计的还不够完善,否则完全应该可以通过wmic来解决这个问题。
作者: ronin     时间: 2007-5-29 16:35
看来这个问题是很难解决
作者: zengconfig     时间: 2008-11-24 00:24    标题: 勾选"microsoft 网络的文件和打印机共享"的问题

能用DOS命令或修改注册表来勾选"microsoft 网络的文件和打印机共享"和"microsoft网络客户端"吗?这个问题困扰我太长时间了,一直没有大侠帮我解决这个问题,这样能不能实现?在此先谢谢大侠了!