블로그 이미지
blueye

카테고리

내블로그 (52)
창작활동 (10)
저장활동 (16)
관심 (0)
Total
Today
Yesterday

프로젝트를 시작한지 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
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함