어제에 이어서 두번째 소스 설명이다.
오늘 설명에는 GUI (Graphic User Interface)도 포함되어있지만,
간단하게만 설명하도록하고, 추후에 다시 설명하겠다.
1 Dim $Save, $Rcv, $Stop, $Repwd, $Start, $End, $Npwd, $Repwd
변수들을 선언한다.
2 GuiCreate("바탕화면 복원 마법사 v2.0", 380, 290,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
바탕화면 복원 마법사 v2.0이라는 제목을 가진, 가로 380픽셀, 세로 290픽셀의 크기로, 가로세로을 화면 중앙에 맞춰진 윈도우를 생성해라. (-1의 좌표옵션은 가운데 정렬이라는 뜻이다.)
(BitOR 부터 뒷부분은 윈도우의 옵션이다. 추후에 설명하겠다.)
3 $Name = GuiCtrlCreateGroup("바탕화면 복원 마법사 v2.0", 10, 10, 360, 270)
4 $Save = GuiCtrlCreateButton("저 장", 30, 40, 70, 30)
5 $Rcv = GuiCtrlCreateButton("복 원", 30, 85, 70, 30)
6 $Stop = GuiCtrlCreateButton("중 지", 30, 130, 70, 30)
7 $Text1 = GuiCtrlCreateLabel("현재 바탕화면의 설정을 저장합니다.", 120, 50, 200, 20)
8 $Text2 = GuiCtrlCreateLabel("설정해 두었던 바탕화면으로 복원 합니다.", 120, 95, 230, 20)
9 $Text3 = GuiCtrlCreateLabel("바탕화면 복원을 중지합니다.", 120, 140, 160, 20)
10 $Repwd = GuiCtrlCreateButton("비밀번호 변경", 230, 165, 120, 20)
11 $Start = GuiCtrlCreateButton("복 원 시 작", 140, 230, 100, 30)
12 $End = GuiCtrlCreateButton("확 인", 250, 230, 100, 30)
13 $Text4 = GuiCtrlCreateLabel("'복원시작' 버튼을 누르시면 다음 로그인이나 부팅시에,", 40, 195, 300, 20)
14 $Text5 = GuiCtrlCreateLabel(" 설정해 두었던 바탕화면으로 복원됩니다.", 40, 210, 300, 20)
15 $Text6 = GuiCtrlCreateLabel(" - Made by Gene", 250, 273, 107, 30)
3~15행은 2행에서 만들었던 윈도우 안에 각종 버튼과 설명글을 생성하고 각변수에 저장한다는 뜻이다.
이번 설명에서 GUI부분의 설명은 생략하겠다.
16 GuiSetState()
위 GUI들의 내용들을 설정한다는 뜻.
17 While 1
전글의 설명대로 무한반복의 의미이다.
18 $msg = GuiGetMsg()
변수인 $msg에 GUI에서 받은 메시지를 저장해라.
(각 버튼을 누름으로 인해 변수 $msg는 달라지게 된다.)
19 Select
선택구문의 시작 (Select구문 역시 GUI를 설명할때 함께 설명하겠다.)
20 Case $msg = $GUI_EVENT_CLOSE
$msg에 $GUI_EVENT_CLOSE가 입력되면
($GUI_EVENT_CLOSE 는 윈도우의 우측 최상단에 있는 X표시 버튼, 즉 종료버튼이다.)
(Case구문역시 GUI를 설명할때 언급하겠지만 간단히 GUI의 해당 버튼을 누르거나 행했을때를 뜻한다.)
21 ExitLoop
17행에서 시작된 루프문을 끝내고 WEnd가 있는 61행으로 이동한다.
22 Case $msg = $Save
20행과 마찬가지 의미이다.
23 DirRemove(@WindowsDir & "\DeskBackup\Old Backup", 1)
()안에 있는 디렉토리를 하위 디렉토리나 파일이 있어도 무조건 삭제해라
(DirRemove는 디렉토리 삭제 명령이다.)
24 DirCopy(@WindowsDir & "\DeskBackup\New Backup", @WindowsDir & "\DeskBackup\Old Backup", 1)
()안의 붉은색의 경로의 디렉토리와 하위 디렉토리와 파일전체를, 녹색 경로로 복사하되, 같은 이름의 디렉토리나 파일이 있을경우 덮어씌운다.
(마지막의 1이란 옵션이 덮어씌우기이고, 0이라면 겹치는 파일이나 폴더는 건너띄게 된다.)
25 DirRemove(@WindowsDir & "\DeskBackup\New Backup", 1)
23행 참조
26 DirCopy(@UserProfileDir & "\Application Data\Microsoft\Internet Explorer\Quick Launch", @WindowsDir & "\DeskBackup\New Backup\Quick Launch", 1)
24행 참조
27 DirCopy(@DesktopDir, @WindowsDir & "\DeskBackup\New Backup\All Users", 1)
24행 참조
(이쯤되면 @DesktopDir이니 @WindowsDir등이 무엇을 의미하는지 궁금해지겠다.
@ 뒤에 붙는것들을 매크로라고 하는데 추후에 설명토록 하겠다. 본문에서 다루기엔 너무길다..)
28 DirCopy(@DesktopCommonDir, @WindowsDir & "\DeskBackup\New Backup\Current User", 1)
24행 참조
29 MsgBox(0, "바탕화면 저장", "바탕화면 저장이 완료되었습니다.")
바탕화면 저장이라는 제목을 가지고, 바탕화면 저장이 완료되었습니다.란 내용을 가진 메시지 박스를 출력해라.
30 Case $msg = $Rcv
20행 참조
31 RunWait("바탕화면 복원.exe", @WindowsDir & "\DeskBackup", 0)
녹색 경로에 있는, 바탕화면 복원.exe란 파일을 실행하고, 끝날때까지 기다려라
(맨뒤의 0이란 옵션은 틀린구문이다. @SW_HIDE 나, @SW_MINIMIZE나, @SW_MAXIMIZE란 옵션중에 하나를 선택해서 사용해야 한다.
옵션은 말그대로 해당파일(소프트웨어)를 실행할때 나타나는 윈도우의 크기이다.
필자도 설명하면서 옵션 구문을 지금 발견했다;; 솔직히 0도 틀린건 아니고 디폴트라는 의미가 있긴하다.)
32 MsgBox(0, "바탕화면 복원", "바탕화면 복원이 완료 되었습니다.")
31행이 끝났다면 해당 메시지 박스를 출력해라
33 Case $msg = $Stop
20행 참조
34 RegDelete("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", "바탕화면 복원")
레지스트리의 붉은색의 경로에있는 녹색의 이름을 가진 항목을 삭제해라.
35 MsgBox(0, "복원 중지", "바탕화면 복원기능이 중지 되었습니다.")
해당 메시지 박스를 출력해라.
36 Case $msg = $Repwd
20행 참조
37 While 1
무한반복
(자세한 설명을 하지 않는 이유는, 이쯤되면 이구문이 무엇을 하는지 알아야 하기 때문이다.)
38 $Nowpwd = InputBox("비밀번호 확인", "현재 비밀번호를 입력해 주세요.", "", "*", 210, 120)
해당 제목과 내용을 가진 입력박스를 띄워서, 박스에 입력된내용을 변수에 저장해라.
(여기서 뒷부분의 옵션중에 ""라고 그냥 넘어간 부분은 입력창이 출력됐을때 기본적으로 적혀져있는 내용을 말한다. "*"부분은 사용자가 내용을 1234라고 입력했을경우 ****로 보여주겠단 의미이다.
당연히 "&"로 바꿔준다면 &&&&로 보이겠다.
210과 120은 입력박스의 가로, 세로 크기이다.)
39 If $Nowpwd = $Pwd Then
만약 $Nowpwd의 내용이 $Pwd와 같다면
(변수 $Pwd는 전글인 1/2 설명에서 첫부분에 나온다.)
40 $Npwd = InputBox("비밀번호 설정", "새로운 비밀번호를 입력해 주세요.", "", "*", 210, 120)
해당 내용을 가진 입력박스를 띄우고, 입력된 내용을 변수에 저장해라
41 If $Npwd = "" Then
만약 변수 $Npwd에 아무런 입력도 없다면
42 ExitLoop
37행에서 시작된 루프문을 끝내고 WEnd가 있는 57행으로 이동한다.
43 EndIf
41행 If문 종료
44 FileDelete(@WindowsDir & "\DeskBackup\pwd.dat")
()안의 경로에 있는 해당파일을 지워라
45 FileWrite(@WindowsDir & "\DeskBackup\pwd.dat", $Npwd)
변수 $Npwd의 내용을 ()안의 경로에 있는 해당파일에 입력하고 저장해라
46 MsgBox(0, "비밀번호 설정", "새로운 비밀번호가 설정 되었습니다.")
해당 내용의 메시지 박스를 출력해라
47 ExitLoop
37행에서 시작된 루프문을 끝내고 WEnd가 있는 57행으로 이동한다.
48 ElseIf $Nowpwd = "" Then
만약 변수 $Nowpwd의 내용이 아무것도 없다면
(39행의 If문과 함께 쓰여진다.)
49 ExitLoop
반복문을 종료해라
50 Else
만약 39행과 48행의 조건을 만족하지 못한다면
51 MsgBox(0, "비밀번호 확인", "비밀번호가 틀렸습니다.")
해당 내용의 메시지 박스를 출력해라
52 EndIf
39행 If문 종료
53 WEnd
37행 While문 종료
54 Case $msg = $Start
20행 참조
55 RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", "바탕화면 복원", "reg_sz", @WindowsDir & "\DeskBackup\바탕화면 복원.exe")
레지스트리의 적색 경로에 녹색의 내용을 가지고, reg_sz라는 속성을 가진 바탕화면 복원이라는 이름의 키를 생성해라
56 MsgBox(0, "바탕화면 복원 시작", "바탕화면 복원기능이 시작됩니다.")
해당 내용의 메시지 박스를 출력해라
57 Case $msg = $End
20행 참조
58 Exit
프로그램을 종료해라
59 Case Else
아무 입력이 없다면
60 EndSelect
19행의 Select문을 종료해라
61 WEnd
17행의 While문을 종료해라
이상 모든 명령줄을 실행 했으므로 프로그램은 종료하게 된다.
나름대로 이해하기 쉽고, 간단하게 설명하려고 노력했지만..
설명이 잘되었는지 걱정이다.
계속해서 기본이 되는 강좌(?)들을 만들어볼 작정이다. ^^