强大而有趣的记事本

我是一个对编程有着激情的男孩,当然,这篇文章与编程有关啦。这是我在这个网站的第一篇文章,有错误之处还望大家指正。文章将会涉及到批处理和VBS脚本,并且有着大量源码,希望看此文的人对上述东西有所了解。本文重点是介绍怎么用记事本实现批处理和VBS脚本的混合编程,以达到一些强大或有趣的作用。
记事本是非常强大的一个工具。不要以为它只能记些文字,通过某些方法,记事本还能够实现很多有趣而和强大的功能。先来个有趣的例子吧。假如你想向某个女生表白,而又不好说出口,OK!记事本能够为你做到。你只需打开记事本,敲入『CreateObject (“SAPI.SpVoice”).Speak “I LOVE YOU”』(“『”与“』”不用敲入),然后保存为FileName.vbs(注意:文件的后缀名是“vbs”,而不是“txt”)。现在你双击打开文件试试,是不是听到电脑在向你表白。呵呵,当然了,Speak后面引号里的内容可以改为你想说的任何内容,不过只能是英文的,除非你知道对方的电脑里安装了中文语音插件。好了,现在你可以把测试好的文件传给对方了。对方一定会被那坚定而又带有磁性的声音给吸引的。
上面只是用记事本写了个脚本,脚本除了可做些好玩的东东外,还可以做些实用的东西。比如下面这个脚本:
m = msgbox(“你确定关闭了迅雷?”,vbOKCancel,”运行前请关闭迅雷”)
If m = vbCancel Then
Wscript.Quit
End If

error=0
Const WINDOW_HANDLE = 0
Const OPTIONS = &H10&
Set objShell = CreateObject(“Shell.Application”)
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, “打开迅雷安装目录:”, OPTIONS, “D:\”)
If objFolder Is Nothing Then
Wscript.Quit
End If
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path

Set objFSO = CreateObject(“Scripting.FileSystemObject”)

If objFSO.FileExists(objPath & “\Program\gui.cfg”) Then
Set objFile = objFSO.GetFile(objPath & “\Program\gui.cfg”)
objFile.Attributes = 32
Set objTextFile = objFSO.OpenTextFile(objPath & “\Program\gui.cfg”, 1)

Do Until objTextFile.AtEndOfStream
strLine = objTextFile.ReadLine
If Left(strLine, 9) = “ADServer=” Then
strLine=”ADServer=”
End If
If Left(strLine, 9) = “PVServer=” Then
strLine=”PVServer=”
End If
If Left(strLine, 17) = “ADCountingServer=” Then
strLine=”ADCountingServer=”
End If
If Left(strLine, 9) = “HomePage=” Then
strLine=”HomePage=”
End If
strNewText = strNewText & strLine & vbCrLf
Loop

objTextFile.Close
Set objTextFile = objFSO.OpenTextFile(objPath & “\Program\gui.cfg”, 2)
objTextFile.Write(strNewText)
objTextFile.Close
objFile.Attributes = 1
Else
error=1
End If

If objFSO.FolderExists(objPath & “\Program\Ad”) Then
objFSO.DeleteFolder(objPath & “\Program\Ad”)
End If

If objFSO.FileExists(objPath & “\Program\adhistory.xml”) Then
Set objFile = objFSO.GetFile(objPath & “\Program\adhistory.xml”)
objFile.Attributes = 32
Set objTextFile = objFSO.OpenTextFile(objPath & “\Program\adhistory.xml”, 2)
objTextFile.Write(“”)
objTextFile.Close
objFile.Attributes = 1
Else
error=1
End If

If objFSO.FileExists(objPath & “\Program\adtask.xml”) Then
Set objFile = objFSO.GetFile(objPath & “\Program\adtask.xml”)
objFile.Attributes = 32
Set objTextFile = objFSO.OpenTextFile(objPath & “\Program\adtask.xml”, 2)
objTextFile.Write(“”)
objTextFile.Close
objFile.Attributes = 1
Else
error=1
End If

If objFSO.FileExists(objPath & “\Profiles\UserConfig.ini”) Then
Set objTextFile = objFSO.OpenTextFile(objPath & “\Profiles\UserConfig.ini”, 1)

strNewText = “”
flag = 0
Do Until objTextFile.AtEndOfStream
strLine = objTextFile.ReadLine
If Left(strLine, 12) = “[Splitter_1]” Then
flag = 1
End If
If Left(strLine, 12) = “Pane1_Hide=0″ AND flag = 1 Then
strLine = “Pane1_Hide=1″
flag = 0
End If
strNewText = strNewText & strLine & vbCrLf
Loop

objTextFile.Close
Set objTextFile = objFSO.OpenTextFile(objPath & “\Profiles\UserConfig.ini”, 2)
objTextFile.Write(strNewText)
objTextFile.Close
Else
error=1
End If

If error=1 Then
msgbox(“此文件夹不是迅雷的安装目录!”)
Else
msgbox(“广告已经去除!”)
End If

打开记事本写入上面一段代码,然后保存为“迅雷去除广告.vbs”。这个脚本是我原创的,当然了,我水平有限,可能有点不好用。这个脚本作用就是去除迅雷广告啦。这里不是讲怎么写脚本,有兴趣的朋友可以去自学。
Windows允许我们用记事本写的另一种可直接运行的东东就是批处理了。看“批处理”这几个字就知道了,它也是可以让我们的电脑生活变得更方便的。先还是来段小代码吧。

:: 月历查询工具 最初发表于CN-DOS
:: 原创:foxjl 更新:namejm, qzwqzw,foxjl
:: 计算农历日期部分思路及算法来自”趣味东”
:: 输入的日期格式为:年-月-日(-可以替换为:、/,可以混用)
:: 在日历里面,★=当天
:: 支持多种格式的日期输入:
:: ① 若只输入一个数,则认为是查询当年月份,自动截取后两位数字查询,★标在1日上;
:: ② 若输入两个数,则认为是查询年和月,★标在1日上;
:: ③ 输全的话,★标在指定日期上
:: 关于年份的转换:
:: ① 若年份上输入的数字少于三位,则作如下转换:
:: 50~99判定为19xx
:: 0~49判定为20xx
:: ② 若输入的年份数字超过两位,则截取后四位字符(不足部分在高位补0),
:: 按 ① 的规则计算该年份的日期;
:: 07-08-04 增加针对农历的生肖及干支年计算;修改错误日期循环提示的BUG.
:: 08-01-13 增加推算农历日期的功能.
@echo off
color 1f
mode con cols=40 lines=20
setlocal enabledelayedexpansion
set str=日一二三四五六七八九
set sdate=%date%
:Main
cls&echo.
:: 日期提取、格式化与校验
for /f “tokens=1,2,3 delims=-/: ” %%i in (“%sdate%”) do (
(set sy=%%i) && (set sm=%%j) && (set sd=%%k)
)
if not defined sd set sd=1
if not defined sm set sm=%sy%&set sy=%date:~0,4%
(set sy=0000%sy%) && (set sm=00%sm%) && (set sd=00%sd%)
(set sy=%sy:~-4%) && (set sm=%sm:~-2%) && (set sd=%sd:~-2%)
set /a y=1%sy%-10000, m=1%sm%-100, d=1%sd%-100 2>nul
if errorlevel 9167 goto Error
if %y% lss 100 (
if %y% lss 50 (set /a y+=2000) else (set /a y+=1900)
set sy=!y!
)
if %m% lss 13 if %d% lss 32 goto Calc
:Error
echo.错误的日期.
pause>nul
cd.
set sdate=%date%
goto Main
:Calc
::计算农历部分
set/a Q=(y-1901)/4
set/a R=y-1901-4*Q
set n=0
for %%i in (0,31,59,90,120,151,181,212,243,273,304,334) do (
set /a n+=1
if %m% equ !n! set z=%%i)
set /a leap=”^!(y%%4) & ^!(^!(y%%100)) | ^!(y%%400)”
if %m% gtr 2 (if %leap% equ 0 (set /a z-=1) else (set /a z+=leap))
set/a n=(140*Q+106*(R+1)+z*10+d*10)/295,H=(140*Q+106*(R+1)+z*10+d*10-295*n)/10
if %h% equ 0 set h=29
if %h% leq 10 (if %h% equ 10 (set h=初十) else (set h=初%h%)) else (set h=%h:~0,1%十%h:~-1%号)
for /l %%i in (1,1,9) do (call set h=%%h:%%i=!str:~%%i,1!%%)
set h=%h:0=%
:: 计算生肖及干支年
set sx=猴鸡狗猪鼠牛虎兔龙蛇马羊
set tg=庚辛壬癸甲乙丙丁戊己
set dz=申酉戌亥子丑寅卯辰巳午未
set /a sxnum=%sy% %% 12
set /a tgnum=%sy:~-1%
title 农历!tg:~%tgnum%,1!!dz:~%sxnum%,1!年 生肖:!sx:~%sxnum%,1! 农历:%h%
:: 计算每个月的天数
set days=31
for %%i in (4 6 9 11) do if %m% equ %%i set days=30
:: 计算2月份的偏差
set /a leap=”^!(y%%4) & ^!(^!(y%%100)) | ^!(y%%400)”
if %m% equ 2 set /a days=28+%leap%
if %m% leq 2 (set /a y-=1& set /a m+=12)
:: 计算指定日期的星期数
set /a w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
echo. %sy%年%sm%月 日期:%sy%-%sm%-%sd%,星期!str:~%w%,1!
echo.
:: 生成月历
set /a wb=(w+35-d) %% 7, we=wb+days+1, day=1
echo. 日 一 二 三 四 五 六
echo. ━━━━━━━━━━━━━━━━━━━
set /p= <nul
for /l %%i in (0,1,37) do (
set “temp= ”
if %%i GTR %wb% if %%i LSS %we% (
set temp= !day!
set temp=!temp:~-2!
if !d! EQU !day! set temp=★
set /a day+=1
)
set /p= !temp!<nul
set /a “wm=(%%i+1)%%7″
if !wm! equ 0 echo.&echo.&set /p= <nul
)
echo.
echo ━━━━━━━━━━━━━━━━━━━
echo. 输入日期可查询当日星期并显示当月月历
echo.
set sdate=
set /p sdate= 格式如:2007-02-03,[回车]退出:
if defined sdate goto Main

还是老样子,先打开记事本,然后写入代码,保存为“万年历.bat”。注意了,这次的文件后缀名是“bat”而不再是“vbs”了。当然了,怎么写批处理也不是本文的重点所在。
好了,现在终于进入本文的核心部分了。能看到这儿说明你已经很有耐心了,学编程就是要耐心嘛。呵呵,不啰嗦了。首先就来段代码:

::欢迎使用背景音乐播放器
@echo off&color 0a&title 背景音乐播放程序
mode con cols=40 lines=20
echo ************************
echo 背景音乐播放程序
echo ************************
pause
echo 1。播放音乐 2。停止音乐
set /p smilediao=请选择您的任务:
if “%smilediao%”==”1″ (goto hello) else (wmic process where name=’wscript.exe’ call terminate>nul&echo 谢谢使用。。&ping -n 2 127.1>nul&del /f /q x.vbs&exit)
:hello
echo 正在为您载入音乐文件……
echo set diao=createobject(“wmplayer.ocx”)>x.vbs
for /r . %%a in (*.mp3 *.wma) do (
echo diao.url=”%%a”>>x.vbs
echo wscript.sleep 1200>>x.vbs
echo wscript.sleep diao.currentMedia.duration *1000>>x.vbs
echo wscript.sleep 1000>>x.vbs
)
start x.vbs

用记事本保存上面代码为“背景音乐播放器.bat”。也就是一个批处理文件了。把文件放在一个有MP3或WMA音乐的文件夹内,双击运行,输入“1”,然后回车。是不是听到了美妙的音乐。再双击批处理文件,输入“2”,然后回车,音乐就停止播放了。
现在有人可能要问,这与本文核心的混合编程有什么关系呢?不急,你再用这个批处理文件播放一次音乐。在批处理文件所在的文件夹仔细找找,是不是可以看到一个名为“x.vbs”的脚本文件。呵呵,其实真正播放音乐的是“x.vbs”,批处理是播放不了音乐的,至少我不知道怎么让批处理播放音乐。批处理在这里只是实现“1。播放音乐”和“ 2。停止音乐”的选择功能。用批处理生成脚本的关键是“echo”命令和“>”与“>>”管道命令。运行脚本用“start”命令。
这些命令不知道怎么用的人自学下批处理。
下期预告:记事本除了可以编写批处理和脚本外,还可以生成EXE可执行文件哦,当然,也可以实现三者的混合编程。。。。。。
下期内容更精彩,敬请期待!

强大而有趣的记事本下载:本文所有程序

目前已经有 11 条回复,欢迎继续就座

  1. xcjjzh
    12:22@2008年05月25日 Notify

    这个写得不错,欢迎继续呀!

  2. linchen
    15:53@2008年05月25日 Notify

    写的不错~~看完这个需要很大耐心啊~~

  3. Ariel
    12:29@2008年05月26日 Notify

    先来个酷毙的批处理,下期介绍怎么实现,下载地址:
    http://webdisk.cech.com.cn/download/file_share_10814281.html

  4. xcjjzh
    08:33@2008年05月27日 Notify

    感觉你放文件的畅易网盘速度还是不错,可是在教育网内下载速度就有点慢了,速度居然不到1KB/s,晕。

  5. hasita
    16:05@2008年05月27日 Notify

    确实很不错,虽然只是看得明白你在干吗…
    怎么觉得你很闲的样子~~哈哈
    我现在什么也学不了除了专业课…唉…

  6. xcjjzh
    18:53@2008年05月27日 Notify

    我本来就很闲,下个学期就更闲了,可以好好经营这个网站了!有没有兴趣加入我们?

  7. hasita
    21:09@2008年05月27日 Notify

    就我么,我是没意见,但是能干什么…

  8. xcjjzh
    23:18@2008年05月27日 Notify

    我也不知道你能干什么,你想想吧,想好了我加你,呵呵!

  9. 19:55@2008年06月16日 Notify

    我们网站做个连接吧!我是地大的,呵呵

  10. linchen
    20:35@2008年06月16日 Notify

    好的,链接已添加,我是华科的~

    名称:Linxo
    地址:http://www.linxo.cn/

  11. 21:12@2008年06月16日 Notify

    那我的岂不说不出口-_-|||

Post a Comment

编辑资料

我保证不会公布邮件地址,带有 * 号的为必填内容

*
*
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:
Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).
回到顶部