概述
听说抖音上流行一种用代码做程序表白的东西,,,,
当然我也不是要表白,,,,
但是好像蛮有意思的,,,,
于是,又学了一下vbs脚本,做了几个很不错的祝福脚本,不懂代码的可以直接戳传送门下载,但是想自己改内容的话,下面有讲
效果示范
<iframe height=498 width=510 src='http://player.youku.com/embed/XMzk4Nzk4NDE5Ng==' frameborder=0 'allowfullscreen'>
貌似不能看,只能点进去看,好吧,,,
思路
目前这个脚本分成了4个板块的功能,想自己改的可以通过下面的讲解自己改内容,或者启动我原来没有启动的功能
首先,把程序下载以后,拖到桌面上,右键用记事本打开,对!用记事本打开,vbs脚本不需要花里胡哨的编辑器云云,直接暴力记事本打开,查看源码
1)开篇交互对话框
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
Dim a,cut,b,Str,flag flag=false cut=1 a=Inputbox( "你相信这世界上存在圣诞老人吗?" ,, "相信" ) MsgBox "..." MsgBox "其实我就是圣诞老人" MsgBox "虽然我没有礼物给你" MsgBox "呜呜,你是不是生气啦" MsgBox "那我给你变个魔术好不好" a=Inputbox( "要不要变魔术?" ,, "要" ) If a<> "要" Then MsgBox "呜呜,真的不给机会吗?" Do b=InputBox(Str+ "试一下吧" ,, "不" ) Str=Str& "请" If b<> "不" Then flag=true Exit Do Else cut=cut+1 End If If cut=5 Then MsgBox "那好吧,再见!" Exit Do End If Loop Else flag=true End If |
Dim关键字用来声明变量,当然在vbs里变量不声明也可以用,但是退出那个块以后变量就释放掉了,所有最好还是前面声明一下,之后的程序应该比较好看懂,有输入对话框,显示对话框,提示输入,inputbox的输入对话框第2个参数省略了,第3个参数是默认的输入框里的内容,这里面的素有双引号内的东西都可以自己改,在选择是否变魔术那里,选5次否,脚本退出
2)打开记事本,念打油诗
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
If flag=true Then Set WS=WScript.CreateObject( "WScript.Shell" ) WS.run( "notepad" ),3 WScript.Sleep 500 WS.AppActivate( "notepad" ) WS.SendKeys "+" arr=Array( "听" , "说" , "你" , "被" , "拐" , "卖" , "真" , "的" , "把" , "我" , "吓" , "坏" , "你" , "虽" , "从" , "小" , "痴" , "呆" , "却" , "对" , "社" , "会" , "无" , "害" , "谁" , "人" , "如" , "此" , "大" , "胆" , "竟" , "敢" , "拿" , "你" , "去" , "卖" , "我" , "真" , "替" , "他" , "担" , "心" , "卖" , "得" , "掉" , "才" , "怪" , "" ) f(arr) WScript.Sleep 3000 For i=0 To 90 WScript.Sleep 30 WS.SendKeys "{BS}" Next arr=Array( "好" , "啦" , "好" , "啦" , "不" , "逗" , "你" , "了" , "" ) Clipboard= "MsHta vbscript:ClipBoardData.setData(" "Text" "," "" &str1& "" ")(Window.Close)" WS.Run(Clipboard) For i=0 To 8 WScript.Sleep 200 Clipboard= "MsHta vbscript:ClipBoardData.setData(" "Text" "," "" &arr(i)& "" ")(Window.Close)" WS.Run(Clipboard) WS.SendKeys "^v" Next WScript.Sleep 3000 For i=0 To 90 WScript.Sleep 30 WS.SendKeys "{BS}" Next |
以及f函数的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Function f(a) Dim str1 Clipboard= "MsHta vbscript:ClipBoardData.setData(" "Text" "," "" &str1& "" ")(Window.Close)" WS.Run(Clipboard) For i=0 To 47 WScript.Sleep 200 Clipboard= "MsHta vbscript:ClipBoardData.setData(" "Text" "," "" &a(i)& "" ")(Window.Close)" WS.Run(Clipboard) WS.SendKeys "^v" If i>0 Then If (i Mod 6=0) Then WScript.Sleep 400 WS.SendKeys "{ENTER}" End If End IF Next End Function |
下载了vbs脚本以后就会发现,这一部分其实并没与启动,因为虽然这部分代码有,但是关键部分都被我注释掉了,如你所见'在vbs脚本中就是注释(大号字体标注),也就是英文的单引号,如果想启动,就把这一部分的注释全部去掉,这部分的原理就是把汉字数组的每个字依次传到剪贴板,然后偶模拟键盘Ctrl+V,由于频繁操作剪贴板,这部分执行可能会导致缺字打印(电脑缓不过来),之后进行模拟键盘的删除操作,把写好的打油诗删除,准备下面的英语正文。
3)接着上面的记事本,写英文
这是整个脚本的重点,写出像视频中的效果那样,一个字母一个字母敲的效果,先上一段代码:
1
2
3
4
5
|
AutoTime=75 say(AutoTime) Function say(AutoTime) End Function |
什么?就这么点吗?当然不是!!!这部分的代码有上千上,内容就在function中间,当然你也看出这是个函数了,那我们的内容也是模拟键盘输入,所以,你觉得怎么搞这部分呢?
用数组存字符串,然后模拟键盘输出吗?
试过很多次了,都失败了,貌似只能一个一个敲
然后,写一个字母的代码量,,,,大概是40个字母
当然,不可能真的一个字一个字敲啊,为什么不写一个程序出来,专门写vb的模拟键盘输入代码呢?
C++实现英文转vbs模拟键盘输入代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include<iostream> #include<fstream> using namespace std; int main() { ifstream ifile; ifile.open( "D:\\in.txt" ); ofstream ofile; ofile.open( "D:\\out.txt" ); char str[100]; while (ifile.getline(str, 100)) { if (str[0] == '\0') { ofile << "WS.SendKeys \"{ENTER}\"" << endl << endl<<endl; } else { for (int i(0); i < strlen(str); i++) { ofile << "WScript.Sleep AutoTime" << endl; ofile << "WS.SendKeys \"" << str[i] << "\"" << endl; } ofile << "WScript.Sleep 1000" << endl; ofile << "WS.SendKeys \"{ENTER}\"" << endl << endl << endl; } } ofile.close(); ifile.close(); return 0; } |
两个文件,in.txt,你要显示的英文,可以空行,可以逗号问好,但是,必须用英文输入法
对,就像这样,对吧,很容易,然后就会生成一个1k多行的out.txt
把里面内容全选复制,然后放在function say 的中间,这一步就完成了
AutoTime是每个字的间隔,可以自己定义,75效果就蛮好的
4)祝福网页
又是一个在脚本里没出现的功能,
1
2
3
4
5
6
7
8
9
10
11
|
Function link() Set Seven = WScript.CreateObject( "WScript.Shell" ) strDesktop = Seven.SpecialFolders( "Desktop" ) set oShellLink = Seven.CreateShortcut(strDesktop & "\Titordong.url" ) oShellLink.TargetPath = "https://www.cnblogs.com/Titordong/" oShellLink.Save Set oShellLink= Nothing strDesktop = Seven.SpecialFolders(4) mypath=strDesktop& "\Titordong.url" Seven.run mypath End Function |
如果你有博客,或者你有自己写的网页,甚至你自己的qq空间也行,把链接复制,然后oShellLink.TargetPath = "https://www.cnblogs.com/Titordong/"里面的后面引号里替换,就ok
效果就是可以再桌面建立一个快捷方式链接,然后自动打开你指向的这个链接,当然这个在程序里要调用的话,要在say(AutoTime)后面加一行link()
后记
vbs脚本功能很强(好像之前说过),切记每行只能有一个语句哦!而且,用英文输入法写,包括代码,也包括英文的祝福&搞笑,至于为什么不用中文,,,键盘上也没有中文按键啊~
原文链接:https://www.cnblogs.com/Titordong/p/10204042.html