이번엔 바탕화면 복원 마법사 v2.0의 메인프로그램과 달리, 독립적으로 실행되는 프로그램에 대한 설명이다. 왜 두가지냐면.. 독립프로그램은 컴퓨터 시작시에 실행되고 바로 내려가야 하는것이기 때문에, 부득이 둘로 나뉠수밖엔 없었다.. 아무튼 아래는 소스의 설명이다.
1 RunWait(@ComSpec & ' /c rd /s /q "%allusersprofile%\바탕 화면"', @ScriptDir, @SW_HIDE) ()안의 내용을 실행하고 끝날때까지 기다려라 ()안의 내용은.. 붉은색은 실행파일, 해당파일의 경로, @SW_HIDE는 실행창의 옵션이다. 붉은색의 @ComSpec은 도스실행 명령어 호출 메크로이고 따라서 rd /s /q "%allusersprofile%\바탕 화면" 이런 명령을 실행하라는 뜻 @ScripDir은 현재 파일이 실행되고 있는 경로를 뜻한다. @SW_HIDE는 실행중에 화면을 보이지 않겠다는 옵션이다.
5 DirCopy(@WindowsDir & "\DeskBackup\New Backup\All Users", @DesktopCommonDir, 1) 적색 경로의 디렉토리 및 파일 전체를, 녹색의 경로에 전부 복사한다. DirCopy명령은 도스의 Xcopy명령어와 같은 역할을 한다. 마지막의 1의 옵션은 겹치는 파일이 있다면 무시하고 덮어씌워버리라는 뜻이다.
레지스트리의 적색 경로에 녹색의 내용을 가지고, reg_sz라는 속성을 가진 바탕화면 복원이라는 이름의 키를 생성해라
8행의 부가적인 설명이라면, 적색경로의 HKEY_LOCAL_MACHINE은 모든 사용자의 설정을 담은 레지스트리 이고, 나머지 경로는 윈도우가 시작할때 실행하는 시작프로그램등을 등록하는 경로이다. 레지스트리의 해당 경로에 들어가보면 Run, RunOnce등 몇개가 있다. 여기서 RunOnce는 한번만 실행하고 해당키값이 자동으로 지워지게 되는 구조이다. 즉, 프로그램들을 설치하다보면 "재부팅이 필요합니다." 이런 문구들을 종종 보게 된다. 그러한 프로그램들이 거의전부가 설치시에 해당 경로에 레지스트리 값을 등록시켜서, 재부팅하고 난후 설치 프로그램의 완료 메시지를 출력하고 해당 키값은 사라지게 만드는 곳이라고 생각하면 편하겠다.
아무튼 이런 설명을 한이유는 모든사용자의 시작프로그램이라는 이유로, 우리가 재부팅을 하고, 해당 사용자로 로그인하기 전에 실행되버린다는 이유다. 때문에 로그인이 완료되면 (부팅이 완료되면) 해당파일은 이미 실행이 이루어졌다고 생각하면 되겠다. 고로, 프로그램이 실행되어서 하는일 즉, 바탕화면 파일들을 지운다거나, 복사하는 일 등등이 시각적으로 보이지 않게 된다. 반면 HKEY_CURRENT_USER의 같은 경로에 시작프로그램을 등록한다면 로그인후에 실행되기 때문에, 시각적으로 파일이 실행되는 과정을 확인 할 수 있다. 이런 이유로 위의 경로에 값을 등록한것이고, 부팅시에 아무런 표시가 나지 않으면서 해당파일을 실행할 수 있기때문에 이러한 경로에 등록한것이다.
여기서 해당경로의 \Run 의 경로에 등록하고 계속 실행하면 될것인데 왜 실행시마다 해당 경로에 키값을 생성하느냐.. 라고 생각할 것이다.
여기서 이상하게 RunOnce와 Run의 경로에 각각 등록을 해보면 실행시에 시각적인 면에서 다른점을 보인다. 필자또한 (나름 레지스트리에 대해서 많이 알고 있다고 자부하고 있지만..) 왜 그런지 이유를 모르겠다. 비단, AutoIt으로 만든 파일이 아니고, 도스의 배치파일로 만들어서 실행해도 이러한 현상이 발생한다.
아무튼 이번 바탕화면 복원 마법사 v2.0을 만들면서 수백번(?) 이상의 테스트를 하면서 이런점을 발견했다. 그러니 그냥 그런가보다 하고 넘어가자 ^^;
이로서 "바탕화면 복원 마법사 v2.0의 소스 설명이 끝났다. 다음번 부터는 초보적인 AutoIt 명령구문이나 구조들을 설명하면서, 필자또한 계속 공부해야겠다.
여담이지만, 이런것들을 올리는 이유는.. 무엇을 배우고자 할때, 내가 완벽히 이해하지 못하고 단순 암기 식으로 배웠다면 나중에 남는것이 없다. 하지만 완벽히 이해하지 못한 지식을 가지고는 이런 설명또한 못할것이다. 이러한 이유로, 나에 대한 나의 채찍이랄까? ^^