找回密码
 加入
搜索
查看: 9000|回复: 25

[AU3基础] [已解决]局域网内建立华丽的圣诞树,同时也请教各位老师帮忙看看有没有更好的方法。

 火.. [复制链接]
发表于 2015-12-15 10:26:22 | 显示全部楼层 |阅读模式
本帖最后由 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[0], 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个脚本,给不同网段的人用。。我也有更好的想法,一开始有个选择框,让两个网段的人自行选择,但问题是很多电脑白痴他们不一定知道自己处于什么网段。。但如果要让脚本自动识别本机所在的网段,我感觉远远超出了我的能力。。不知道其他高手有什么办法没。
发表于 2015-12-15 11:23:01 | 显示全部楼层
路过。。。。。。。。。。。。
发表于 2015-12-15 12:27:11 | 显示全部楼层
Msgbox(0, '', @IPAddress1)
 楼主| 发表于 2015-12-15 14:07:04 | 显示全部楼层
回复 3# afan


    老师,假设有10开头的IP和192开头的IP,如果获取的IP是以192开头的,要怎么写呢?能使用通配符吗
发表于 2015-12-15 14:15:06 | 显示全部楼层
回复 4# xing999999


    不是老师,是老菜鸟。
Msgbox(0, '到不同网段测试下就明白了…', '\\' & @IPAddress1 & '\Public\sd\3.txt')
 楼主| 发表于 2015-12-15 14:29:15 | 显示全部楼层
回复 5# afan


    msgbox(0, '', @IPAddress1)
已经可以获取网卡1里面的IP了,虽然有些电脑有2个网卡,但这个并不影响判断。
我就是想判断如果返回来的值是192开头的就指去192的服务器地址,如果是10开头的就指去10开头的地址。

用if then else 的语句,但我不知道怎么来表达192开头的值。。。如果是sql可以是 like '192%'
发表于 2015-12-15 17:49:29 | 显示全部楼层
Msgbox(0, @IPAddress1, StringRegExpReplace(@IPAddress1, '\..+', ''))
 楼主| 发表于 2015-12-15 18:31:48 | 显示全部楼层
本帖最后由 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[0], 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
因为程序在关闭的时候会自动添加注册表里的启动项,所以检测到程序关闭,则自动删除注册表里的启动项,然后退出脚本。但是这里我总是写不对,能否指教下。
 楼主| 发表于 2015-12-15 18:33:25 | 显示全部楼层
就是程序一出来,就自动弹出MSGBOX了。。而我希望的是等程序关闭后,才弹出这个MSGBOX
 楼主| 发表于 2015-12-15 18:52:15 | 显示全部楼层
回复 7# afan


    老大。。。正则,我是新手,我很想学这个,但是我找了半天资料,完全没头绪。。
发表于 2015-12-15 18:57:44 | 显示全部楼层
回复 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[0], 1) ;产生随机数
Local $iPid = Run($aExePath[$nRan]) ;运行程序
Local $hWnd = WinWait('[REGEXPTITLE:(?i)(打开文件 - 安全警告|frmMain)]'))
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')
 楼主| 发表于 2015-12-15 22:25:22 | 显示全部楼层
谢谢版主,目前还在研究。。你写得这么简练,我看得好痛苦。。
 楼主| 发表于 2015-12-15 22:53:21 | 显示全部楼层
Msgbox(0, @IPAddress1, StringRegExpReplace(@IPAddress1, '\..+', ''))

我真的是搞不懂,版主。。。
正则我找\..+找不到。。只找到.表示任意1个字符。
我网卡1的IP是10.20.13.10
运行后获得10
于是我尝试\.+ 结果获得10201310
我再尝试\.. 结果获得10030
我继续尝试..+ 结果获得空白
最后又尝试\+ 获得10.20.13.10

能否告诉我\..+到底是什么意思?我百度了好长时间,StringRegExp也看了半天(因为StringRegExpReplace的帮助里要求去看StringRegExp)。。。
 楼主| 发表于 2015-12-15 22:53:22 | 显示全部楼层
本帖最后由 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。。。当场昏过去了
发表于 2015-12-15 23:59:37 | 显示全部楼层
回复 14# xing999999


    呵呵
. 前面加了 \ 是用来转义的,转义之后它就可以匹配真实的点了,不转义的话 . 可以匹配任意字符,就像第二个 . 一样,所以,连起来的表达式 \..+ 就是代表匹配 点及其后一个以上的所有字符,那就是 .20.13.10 ,因为是替换模式,因此就将匹配到的替换掉了,也就只剩下 10 了。
正则一般不解释,麻烦,以后自己多练,自然就理解了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-25 09:14 , Processed in 0.106620 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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