본문 바로가기

My Study/Programming&Theory

ScreenSaver 만들어보기

플젝에 치여 이리저리 정신못차리고 있는 와중에 예전부터 한번쯤 만들어보고 싶었던 스크린 세이버 만드는 것을 잠자는 시간을 쪼개 익혀봤습니다. 공부했다고 하는것보단 이건 그냥 방법을 익혔다고 표현하는게 올바를 것 같습니다. ^^;;

API책을 보며 공부했습니다.

스크린 세이버는 컴퓨터를 해보신 분들이라면 누구나 한번쯤은 보신 화면일 것입니다.
 


익숙하신 화면이죠?? ;;ㅋ

이러한
스크린 세이버는 원래 두가지 용도로 사용이 되었습니다.

1. 오랫동안 화면이 정지되어 있을 경우 같은 위치에 정적인 그림이 계속 표시되므로써 모니터의 특정 부분만 빨리 손상되는 것을 방지하는 것. 이 기능은 스크린 세이버의 원래적인 용도에 부합되는 기능입니다.

2. 보안상 중요한 정보가 누출되는 것을 방지한다. 작업중 잠시 자리를 비울 경우 작업하던 내용을 누군가가 보거나 또는 파일 등의 정보를 훔쳐갈 수도 있는데 스크린 세이버는 화면을 잠금으로써 정보 누출을 방지하는 것..


하지만 요새는 모니터 성능도 좋아져서 1번 같은 경우의 용도로는 거의 사용이 안됩니다.
그리고
새로운 3번의 기능이 추가되었죠.

3. 일부러 모니터를 끄지 않고 자리를 비움으로써 사람들이 자기의 스크린 세이버를 보고 감탄해 하는 기능


제 주위만 해도 이러하신 분들이 수두룩 하시죠. 소녀시대 스크린 세이버부터...ㅎㅎ
하지만 저는 직접 코딩을 해 나만의 스크린 세이버를 만들어 보고 싶었습니다. 일단 이 글에선 간략한 샘플 코드만 만들어보죠.

스크린 세이버는 OS가 부팅될 때 함께 실행이 된다. 그리고 항상 사용자의 키보드와 마우스를 감시하며 제어판에서 지정한 시간동안 입력이 없을 경우 미리 지정되어 있는 스크린 세이버 애플릿을 실행합니다.
용어 정리
스크린 세이버 : 운영체제의 일부이며 항상 실행상태에서 사용자의 입력을 감시하는 프로그램
스크린 세이버 애플릿 : 스크린 세이버에 의해 호출되는 실행 파일(.scr) 


이러한
스크린 세이버 애플릿이 실행이 안되는 경우가 있습니다.
1. 스크린 세이버 애플릿이 지정이 안되었을 경우
2. 윈도우 기반이 아닌 응용 프로그램이 실행 중일 때
3. 컴퓨터 교육 프로그램(CBT)이 실행중일 때
4. 한 프로그램이라도 스크린 세이버의 실행을 거부할 때


스크린 세이버 애플릿은 스크린 세이버에 의해 실행되며 사용자의 입력이 있으면 즉시 종료된다. 

 이제 간단한 샘플 코드를 작성해 볼 것인데 다행이도 Windows에서는 참 좋은 라이브러리를 지원해주고 있다.
바로 "ScrnSave.lib" 이다.

 애플릿 개발자들이 애플릿이 언제 호출될지 설정 대화상자는 언제 어떻게 보여줄지, 제목 문자열은 어디에 넣어둘지 등을 다 생각해서 개발을 한다면 어려움에 호소할 것이다. 그래서 이러한 문제는 없애기 위해 스크린 세이버 라이브러리를 제공하며 대부분의 약속이 이미 프로그래밍되어 있으므로 애플릿은 스크린 세이버 라이브러리와 연결하고 자신의 고유한 화면 처리만 하면 된다.

샘플 코드를 봐보자. 
 
위 사용된 3개의 함수는 필수적으로 있어야 한다. 각 함수에 대한 설명은 주석으로 간략히 달아놨다.

그리고 위에 참조할 라이브러리를 지정해주어야하는데
유니코드 기반으로 프로그래밍 하려면 "ScrnSavW.lib" 라이브러리를 사용해주면 된다.
이 부분에서 잘 안되서 애먹었다.;; 

http://blog.naver.com/PostView.nhn?blogId=sainthkh&logNo=140062316898&categoryNo=59&viewDate=¤tPage=1&listtype=0
위 블로그에 잘 설명이 되어 있었다 ^^; 감사합니다~

또한 스크린 세이버 애플릿 파일은 확장자가 .exe가 아닌 .scr 입니다.
그렇기 때문에 아래와 같이 셋팅을 해주고 컴파일을 해주어야합니다.
하지 않으면 실행할때마다 확장자를 바꾸고 실행하는 번거로움을 겪에 될 것 입니다.


이제 실행된 결과 화면을 봐보자.


잘 만들어져 졌군요. 저 상태에서 키가 눌린다거나 마우스 입력이 들어오면 바로 스크린 세이버창은 꺼지게 됩니다.
이제 이것을 응용해 저만의 스크린 세이버 애플릿을 만들어보겠습니다.

멋지게 만들고 싶었지만 그럴 시간은 없어서 초간단으로 만들었습니다.

끝... -_-.. 심심하신분은 실행해보세요오.. scr 이라고해서 바이러스 절대 아닙니다! ㅋㄷㅋㄷ

'My Study > Programming&Theory' 카테고리의 다른 글

OpenProcess를 막는 방법은??  (11) 2011.12.20
Immunity Debugger Hard Hooking  (2) 2011.12.08
API vs MFC  (1) 2011.11.30
Prefix list in executive component  (0) 2011.09.02
API Listbox에서 가로 스크롤 넣기  (1) 2011.08.10