본문 바로가기
Programming

AeroShake 구현하기

by BITINITIALIZE 2010. 4. 21.
728x90

Windows 7의 환상적인 데스크탑 기능중 하나인 에어로셰이크.

에어로셰이크 : 
현재 마우스로 선택한 윈도우를 상/하/좌/우로 흔들면 내가 잡고 있는 창을 제외한 나머지 모든 창이 사라지는 기능.

에어로셰이크의 경우 Windows7에 포함된 기능이기에 어떠한 윈도우를 잡고 흔들어도 사용가능하다.
다만 내가 원하는 것은 내 프로그램에서만 동작하는것이고 다른 윈도우를 최소화하는 것이다.

회사 고객지원팀에서 사용할 원격지원 툴킷에 해당 기능을 넣기로 결정하였다.
그 이유는 멋져보여서. 누가 시킨것이 아니다. 암튼 뭔가 있어보이자나...

암튼 이를 구현하려면 3가지 단계가 머리속에 떠오른다. Think!

1. 마우스를 클릭한다.
2. 흔든다
3. 숨긴다(나를 제외한 다른 모든 창)

1번을 보자.
현재 윈도우에서 틱카운트등을 사용해서 시간을 체크한다.

2번을 보자.
지정한 시간범위내에서 마우스 움직임을 체크하고 센서빌리티 값을 지정해준다.
이 조건을 만족하는 경우 사용자가 창을 흔드는 것이므로 3번으로 넘어간다.

3번을 보자.
- 데스크탑의 최상위 윈도우 핸들을 검출한다.
  - 왜?
    - 핸들 발견했다고 모든 창을 내릴것인가? 그럼 MDI는? 알겠지요?
      - 그렇다면 최상위 윈도우의 조건은?
        - 부모 윈도우가 없다. 화면에 보여진다. 캡션을 가진다. 이 정도로 판단해도 무방하다.
- 검출된 해당 윈도우의 핸들로 최소화 시그널을 보낸다.

기능 구현은 대략 40줄로 끝났다.
최소/최대 애니메이션이 꺼져있다면 괜찮은데 그렇지 않은 경우 그다지 매끄럽지 않다.
스레드로 돌리는 경우 만족할 만한 효과는 나온다.

7에서는 Built-In으로 제공하니 해당 기능은 XP+Vista에서만 동작하도록 적용해주는 센스 필요~
728x90

'Programming' 카테고리의 다른 글

카카오톡 브레이커  (4) 2021.02.04
프로그래머의 숙명 - 버그편 Part. I  (2) 2009.05.07
HTML 에디터 구현  (19) 2008.10.01
온라인 업데이트 이야기  (2) 2008.08.09
예외처리 꼭 필요한가?  (10) 2008.05.08

댓글