[已解决]局域网内建立华丽的圣诞树,同时也请教各位老师帮忙看看有没有更好的方法。
本帖最后由 xing999999 于 2015-12-16 18:17 编辑想法:
做个简单的圣诞树,首先有12个圣诞树EXE文件,我把他们放在服务器的共享目录里。然后用AU3建立一个脚本,当运行这个脚本,那么进入这个服务器的这个目录里随机运行里面的一个EXE文件。
前期准备:
在服务器的public文件夹里(公共文件夹,任何人都有权限访问),建立一个SD的文件夹,然后放上12个EXE文件,并且建立一个3.txt的文件,把12个EXE文件都写进这个TXT,我是按绝对路径写的,比如:\\192.168.60.99\Public\sd\1.exe
AU3代码如下:Local $fk = MsgBox(1, "圣诞树即将打开", "这是一个由XXX创建的圣诞树软件" & @CRLF & "每一次打开的圣诞树都不同哦~~")
If $fk = 1 Then
$TXT = FileOpen("\\192.168.60.99\Public\sd\3.txt") ;打开txt文件,引号内为文件路径
$All = FileRead($TXT) ;读取内容
$All = StringReplace($All, @CRLF, "|") ;>
$Lin = StringSplit($All, "|") ;>拆分出没一行的内容
$Ran = Random(1, $Lin, 1) ;产生随机数
Run($Lin[$Ran]) ;运行程序
If WinExists("打开文件 - 安全警告") Then
Send("!{R}");网络直接提取会有警告的话,发送快捷键直接运行
EndIf
EndIf
Exit
结果:以上是可以正常执行的
问题:但是问题来了,我这里的网段比较多,有10.12.13.0/24网段,也有192.168.60.0/24网段,有什么办法可以让脚本自动识别这些网段?我最笨的想法就是做2个文件夹,里面的TXT分别是指去2个网段,同时也做2个脚本,给不同网段的人用。。我也有更好的想法,一开始有个选择框,让两个网段的人自行选择,但问题是很多电脑白痴他们不一定知道自己处于什么网段。。但如果要让脚本自动识别本机所在的网段,我感觉远远超出了我的能力。。不知道其他高手有什么办法没。 路过。。。。。。。。。。。。 Msgbox(0, '', @IPAddress1) 回复 3# afan
老师,假设有10开头的IP和192开头的IP,如果获取的IP是以192开头的,要怎么写呢?能使用通配符吗 回复 4# xing999999
不是老师,是老菜鸟。Msgbox(0, '到不同网段测试下就明白了…', '\\' & @IPAddress1 & '\Public\sd\3.txt') 回复 5# afan
msgbox(0, '', @IPAddress1)
已经可以获取网卡1里面的IP了,虽然有些电脑有2个网卡,但这个并不影响判断。
我就是想判断如果返回来的值是192开头的就指去192的服务器地址,如果是10开头的就指去10开头的地址。
用if then else 的语句,但我不知道怎么来表达192开头的值。。。如果是sql可以是 like '192%' Msgbox(0, @IPAddress1, StringRegExpReplace(@IPAddress1, '\..+', '')) 本帖最后由 xing999999 于 2015-12-15 18:38 编辑
Opt("TrayIconDebug", 1)
Local $fk = MsgBox(1, "圣诞树即将打开", "这是一个由XXX建的圣诞树软件" & @CRLF & "每一次打开的圣诞树都不同哦~~")
;~ Local $IP = MsgBox(0, '', @IPAddress1)
;~ If $IP
If $fk = 1 Then
$TXT = FileOpen("\\192.168.60.99\Public\sd\3.txt") ;打开txt文件,引号内为文件路径
$All = FileRead($TXT) ;读取内容
$All = StringReplace($All, @CRLF, "|") ;>
$Lin = StringSplit($All, "|") ;>拆分出没一行的内容
$Ran = Random(1, $Lin, 1) ;产生随机数
Run($Lin[$Ran]) ;运行程序
If WinExists("打开文件 - 安全警告") Then
Send("!{R}")
EndIf
EndIf
WinWait("frmMain");等程序出来
Sleep(1000)
Local $reg=WinExists("frmMain");检测程序窗口是否存在
Local $end=MsgBox(0,"完整退出","因防止软件开机自启,所以请按确定进行完整退出")
While $reg=0
MsgBox(0,"完整退出","因防止软件开机自启,所以请按确定进行完整退出");如果程序窗口不存在,按确认进行删除开机启动
If $end=1 Then
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Christmas Garland Light");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Christmas Globe");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Christmas snow globe");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Garland Christmas Show");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Garland Christmas Tree");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Green Christmas Tree");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Little Tree");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Live Xmas Tree");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Magic Tree");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Painted Christmas Tree");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Pretty Christmas Tree");删除程序退出时候添加的开机启动
Sleep(100)
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","Snowman Garland");删除程序退出时候添加的开机启动
Sleep(100)
EndIf
WEnd
Exit因为程序在关闭的时候会自动添加注册表里的启动项,所以检测到程序关闭,则自动删除注册表里的启动项,然后退出脚本。但是这里我总是写不对,能否指教下。 就是程序一出来,就自动弹出MSGBOX了。。而我希望的是等程序关闭后,才弹出这个MSGBOX 回复 7# afan
老大。。。正则,我是新手,我很想学这个,但是我找了半天资料,完全没头绪。。 回复 10# xing999999
慢慢学,多思考,少 Sleep…Opt('TrayIconDebug', 1)
If MsgBox(1, '圣诞树即将打开', '这是一个由XXX建的圣诞树软件' & @CRLF & '每一次打开的圣诞树都不同哦~~') <> 1 Then Exit
Local $sFile = '\\192.168.60.99\Public\sd\3.txt'
Local $sAll = FileRead($sFile) ;读取内容
Local $aExePath = StringSplit($All, @CRLF, 1) ;>拆分
Local $nRan = Random(1, $aExePath, 1) ;产生随机数
Local $iPid = Run($aExePath[$nRan]) ;运行程序
Local $hWnd = WinWait(''))
If StringInStr(WinGetTitle($hWnd), '打开文件 - 安全警告') Then Send('!{R}')
ProcessWaitClose($iPid)
Local $sReg = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'
RegDelete($sReg, 'Christmas Garland Light');删除程序退出时候添加的开机启动
RegDelete($sReg, 'Christmas Globe')
RegDelete($sReg, 'Christmas snow globe')
RegDelete($sReg, 'Garland Christmas Show')
RegDelete($sReg, 'Garland Christmas Tree')
RegDelete($sReg, 'Green Christmas Tree')
RegDelete($sReg, 'Little Tree')
RegDelete($sReg, 'Live Xmas Tree')
RegDelete($sReg, 'Magic Tree')
RegDelete($sReg, 'Painted Christmas Tree')
RegDelete($sReg, 'Pretty Christmas Tree')
RegDelete($sReg, 'Snowman Garland')
谢谢版主,目前还在研究。。你写得这么简练,我看得好痛苦。。 Msgbox(0, @IPAddress1, StringRegExpReplace(@IPAddress1, '\..+', ''))
我真的是搞不懂,版主。。。
正则我找\..+找不到。。只找到.表示任意1个字符。
我网卡1的IP是10.20.13.10
运行后获得10
于是我尝试\.+ 结果获得10201310
我再尝试\.. 结果获得10030
我继续尝试..+ 结果获得空白
最后又尝试\+ 获得10.20.13.10
能否告诉我\..+到底是什么意思?我百度了好长时间,StringRegExp也看了半天(因为StringRegExpReplace的帮助里要求去看StringRegExp)。。。 本帖最后由 xing999999 于 2015-12-15 22:54 编辑
Msgbox(0, @IPAddress1, StringRegExpReplace(@IPAddress1, '\..+', ''))
我真的是搞不懂,版主。。。
正则我找\..+找不到。。只找到.表示任意1个字符。
我网卡1的IP是10.20.13.10
运行后获得10
于是我尝试\.+ 结果获得10201310
我再尝试\.. 结果获得10030
我继续尝试..+ 结果获得空白
最后又尝试\+ 获得10.20.13.10
能否告诉我\..+到底是什么意思?我百度了好长时间,StringRegExp也看了半天(因为StringRegExpReplace的帮助里要求去看StringRegExp)。。。
因为如果那2个.表示只是取前2位,我就还好理解。问题是我把IP改成192.20.13.10。。结果又获取了192。。。当场昏过去了 回复 14# xing999999
呵呵
. 前面加了 \ 是用来转义的,转义之后它就可以匹配真实的点了,不转义的话 . 可以匹配任意字符,就像第二个 . 一样,所以,连起来的表达式 \..+ 就是代表匹配 点及其后一个以上的所有字符,那就是 .20.13.10 ,因为是替换模式,因此就将匹配到的替换掉了,也就只剩下 10 了。
正则一般不解释,麻烦,以后自己多练,自然就理解了
页:
[1]
2