블로그 이미지
99%의 진지함으로도 절대 이길 수 없는 1%의 유머감각. 지금 당신에게 필요한 것. blueye

카테고리

내블로그 (81)
창작활동 (10)
저장활동 (17)
관심 (14)
일일상황 (38)
Total144,261
Today4
Yesterday21

'API 프로그래밍'에 해당되는 글 4건

  1. 2007.08.12 [Turn-off Timer] 프로젝트 마무리 (1)
  2. 2007.08.09 [Turn-off Timer] 중간결과
  3. 2007.08.06 [Turn-off Timer] 기본틀 구상
  4. 2007.08.05 [Turn-off Timer] 프로젝트 시작

invalid-file

PC알람설정 및 자동종료 프로그램

무려 일주일이라는 긴 시간을 투자해서
드디어 결과물이 나왔다.
중간에 여름휴가도 다녀오고
온갖 잡일이 끼어들어
예정일보다는 결과가 늦어져버렸군.

처음 생각했던 기본틀에서 일부분이 수정되었고
앞으로 추가하고 싶은 기능들도 많지만
일단은 목표로 삼았던 기능이
정상적으로 구현되었기에
마무리선언을 하기로 했다.

사용자 삽입 이미지

최종 결과물의 웅장한 모습. 우후훗;

처음 생각했던 모습에서
상태표시줄이 추가되어서 현재 시각 및 설정 상태 등을 보여줄 수 있도록 했고,

메뉴에 파일 설정 도움말 이런걸 만들어놓았는데
특별한 기능을 가지고 있지 않은 부분.
차기 버전에서는 기능을 추가해주거나 아니면 메뉴를 없애야겠다.

트레이아이콘과 관련된 기능을 구현하는 부분이 예상대로 쉽지 않아서
그부분에서 조금 고전했고,
기타 기능 구현은 대체로 평이한 수준.
초보용으로 적합한 프로젝트였다.


앞으로 수정/추가할 부분이 있다면,,

1. 신호음이나 시스템 종료 말고 다른 기능을 추가.
(예를 들어 로그오프라던가 사용자지정프로그램 실행 등)
2. 풍선도움말 기능 구현
(윈도우 업데이트 알림 형태의 트레이 풍선도움말 기능)
3. 윈도우 디자인 개선
(딱딱하고 칙칙한 현재의 디자인을 개선할 방법 모색. 예를 들어 반투명윈도우 등)

그외에도 개선 추가할 것들이 많지만,
초보 수준에서는 이정도로 만족하고 다음으로 넘어가자.
좀더 여유가 생기고 고수가 될때까지 보류!!
다음 플젝은 어떤게 좋을까나.


신고
Posted by blueye

프로젝트를 시작한지 3일째.

처음 시작할때는 3일이면 끝나겠지 했는데, 초보자 주제에 ㅋㅋ 너무 만만하게 본 거 같다.
기초과정도 제대로 안된 상태에서 무모하게 뛰어든 결과는 역시,, 생고생의 연속;;
3일동안 고생해가면서 나온 결과물은 대략 50%정도 완성률... 참패다.
얻은 점은... 글쎄.... 조금 빨라진 영타속도 정도?ㅋ

현재까지 과정에서 고생했던 부분들을 간단히 적어놓자.
다음엔 같은 실수로 당황하지 않도록.


1. 각종 버튼과 콤보박스 생성

    HWND hHour;
    hHour=CreateWindow(TEXT("listbox"),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|
                  LBS_STANDARD,10,25,50,40,hWnd,(HMENU)100,g_hInst,NULL);

    시간값을 입력받게 될 리스트박스를 만드는 식.
    파란색 글씨로 표시된 listbox라는 글자,
    난 처음에 임의대로 내가 쓰고 싶은 이름으로 정하는 건 줄 알았다.
    (딱 봐도 그렇게 생겼다.. 따옴표로 싹 묶여서.)
    젠장. 아니었다.
    저 부분은 고유명사와도 같아서
    저 부분에 어떤 이름을 넣느냐에 따라 모양 자체가 달라지는 것이었다.
    예를 들어서 저 파란 부분에 listbox라고 넣어주면 요런게 나오지만,

사용자 삽입 이미지
    파란 부분을 button이라고 바꿔주면 대략 요런 모양으로 나온다.
사용자 삽입 이미지
    즉, 만들고 싶은 종류대로 그에 맞는 이름을 넣어줘야 하는것.


    내가 만들고 싶었던 정상적인 모양은, 대략 이런거.
사용자 삽입 이미지

    하지만 만약 내가 저 파란 부분에
    탁월한 작명실력을 통해 지은 임의의 이름 hour_list을 넣어주면
    화면에는,, 안타깝게도 암것도 나오지 않는다. 다음과 같이.
사용자 삽입 이미지
    그것도 모르고 난
    뒤쪽에 빨간 부분으로 된 옵션부분이 잘못지정됏나 싶어서
    왠종일 저것만 붙잡고 있는 책 없는 책 인터넷 뒤져가면서 쇼를 했으니..

    아무리 쇼가 유행이라지만,
    정말 다신 하고 싶지 않은 쇼였다;; 제발, 다음엔 이러지 말자;;;;;;;;


2. 시스템종료기능
    요건 XP라는 운영체제를 사용함으로서 벌어진 사건.  

    나중에 안 사실이지만,
    이전 win98se 까지의 버전에서는
    시스템의 권한을 부여받는다는 등의 개념이 확립되지 않았다.
    따라서 시스템을 종료하는 옵션을 주는 것도 매우 간단했다.

ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);

    이 한줄이면 사용자의 모든 작업이 강제로 종료되고 PC가 꺼지는게 정상.

    근데 어떻게 된건지 이놈의 PC는 죽어도 꺼질 생각이 없어보였다.
    알람시간에 PC를 꺼주는게 프로그램의 주된 목표였는데,
    이렇게 되면 프로그램을 만드는 의도 자체가 흔들릴 판이었다.
   
    다행히 이번에는 쇼를 해서 원인을 찾아냈고,
    다음과 같은 함수를 추가해줌으로서 바른 결과를 얻게 되었다.

    XP운영체제에서
    나의 프로그램이 시스템 권한을 얻어 PC를 끄도록 해주는 함수다.

BOOL MySystemShutdown()
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;

    if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
        return FALSE;

    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
    tkp.PrivilegeCount=1;
    tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    if(GetLastError()!=ERROR_SUCCESS)
        return FALSE;

    if(!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
        return FALSE;

    return TRUE;
}


    내가 썼던 방법은 함수 맨 바닥쪽에 짧게 한줄 들어가있었다.ㅋㅋ
    나머지 위쪽이 권한을 얻는 과정.
    위의 함수를 추가해주고 필요한 부분에서 호출해주니
    신기하게도,,,PC가 꺼졌다.
    내 PC를 끄는데도 권한을 얻어야 한다니..ㅋㅋㅋ 아이러니하지만,
    아무튼 중요한 정보임에는 틀림없으므로.... 적어놓고 잊지 말자;


이런 간단한것들에도 막히다니;;;
API의 길은 멀고도 험하다.
이제 겨우 간단한 디자인 정도만 끝났을 뿐인데..
왜이리 땀이 흐를까.ㅋ

힘내자.

사용자 삽입 이미지

디자인만 겨우 마무리된 현재까지 결과물;;;


신고
Posted by blueye

음. 생각보다 많이 어렵지는 않은 것 같다...;

기본적으로 생각해야 할 건,,

1. PC시간을 어떻게 읽어올 것인가.
 - SYSTEMTIME 이라는 좋은 구조체가 있었다.
        SYSTEMTIME st;  <-요렇게만 해주면 끝.
   나중에 꺼내서 확인할 때는
        st.wHour <- 현재 시간
        st.wMinute <- 현재 분
        st.wSecond <- 현재 초

2. 사용자로부터 알람시간 입력받기
 - 이 부분은 리스트박스를 이용해서 입력받자.
   시 분 초 별로 하나씩 리스트박스를 만드는게 좋지 않을까.
   더 좋은 생각이 나질 않기에 그냥 이렇게 가기로.

3. 알람시간이 되면 할 일 입력받기
 - 지정시간에 할 일로는
   기본적으로 메시지 출력에
   사용자 지정에 따라 알림음 출력, 시스템 강제 종료.
   대략 세 가지 정도를 사용자 선택에 따라 실행할 수 있도록 하고....
   이것도 역시 더 생각나면 추가하기로.

4. 알람 셋팅한 다음에는 트레이아이콘으로 보내놓기
 - 요 부분이 살짝 어렵지 않을까.
   필요한 시간만 알려주면 되는 프로그램이 작업표시줄 한칸을 넓게 차지하고 있는건,
   컴퓨터로서도 사용자로서도 원하지 않는 모습이 될것 같고,
   또, 위에 써놓은1 2 3번만 구현하기에는
   아무리 초보라지만, 너무 쉬워 보여서. 도전.ㅋ
   트레이로 보내놓더라도 원할때 언제든지 열어서 볼 수 있어야 하고
   지정시간에는 사용자가 하던 작업에 관계없이 강제로 창을 띄워 줘야 하겠지.


이 정도만 해주면 나머지는 뭐,, 전체적인 디자인 정도;
일단 처음 생각하고 있는 대체적인 이미지는 이렇다. (이 허접한 그림솜씨..)

사용자 삽입 이미지


이런 류의 프로그램이 이미 시중에는 많이 돌아다니는 거 같다..;;
각종 공개자료실 같은 데서 쉽게 구할수도 있겠지만,
좌절하지 말고. 내가 직접 만들어본다는데 의의를 두자.
하다보면 혹시 더 좋은 작품이 나올 수도 있지.

초보자용으로 적당한 프로젝트인지는 모르겠는데.
하나하나 해가면서 기본적인 것들을 배우기에는 잘 고른 듯.
계획은 다 짰으니, 이제 되든 안되든 해보자.

휴학생이라고 맨날 놀지만 말고. 곧 복학이자나.

신고
Posted by blueye

사용자 삽입 이미지

김상형님의 베스트셀러
"Windows API 정복"이라는 책
(아는 사람만 알지요..)

4만원 가까이 되는 거금을 들여 구입해
한 장 한 장 공부하던 중,
'이걸 언제 다보나'하는 생각에
 (저 두께면 무기에 가깝다고 해야할듯.)

갑자기 시작하게 된 프로젝트..,
Turn-off Timer..

뭐라도 만들면서
필요한 부분만 찾아보자는 심산으로
앞부분 조금만 읽고 무작정 뛰어들어본다.

거창한 이름만큼이나
쓸모가 있는 작품이 나오게 될지
두고 봐야 할 일이다.


대강 핵심은 이렇다.

사용자가 알람시간을 정한다.
프로그램의 입력란을 통해 그 시간을 입력한다.
컴퓨터는 사용자가 입력한 시간값을 저장해놓고
그 시간이 되면 알람을 울리고 PC를 종료해주는...

그렇다.... 길게 써놓긴 했지만
결국 쉽게 말하면.....
별거 아니다. 흔히 쓰는 알람시계정도.
그래도 주눅들이 않겠다.

난 초보니깐여~ㅋㅋ

뭐,,, 빌게이츠는 태어날때부터 윈도우 만들었나?
다 저런거부터 했다구 ㅋ (진짜?)
신고
Posted by blueye

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

티스토리 툴바