Q&A

  • 윈도2000종료 C++소스 Delphi로 컨버젼? ^^:
안녕하세요? ^^;
다름이 아니라 윈도 2000 을 종료해야하는데요!
exitwindows 나 exitwindowsex api함수를 써봤더니 로그오프만 되네요 ^^;
Devpia에 가서 종료 함수란걸 긁어 왔는디
C++ 이라 도통 모르겠네요! 특히 자료형요 ㅜㅜ

소스를 올립니다.
이걸 델파이로 컨버젼좀 부탁드립니다.
수고하세요!

void CxxxxxApp::ShutDown() // 종료 버튼 눌렸을때 이거 호출하시고..
{


   if(IDYES==MessageBox("정말 종료?","확인",MB_YESNO))
   {
    CString strOSName=_T("");
    //0: default 1: 3.1// 2: 98 //3: 95 //4: NT
    OSVERSIONINFO verInfo;
    verInfo.dwOSVersionInfoSize = sizeof(verInfo);
    GetVersionEx(&verInfo) ;
    switch(verInfo.dwPlatformId)
    { /*case VER_PLATFORM_WIN32s:
     strOSName = "Microsoft Windows 3.1";
     AfxMessageBox(strOSName);
        break; */
    case VER_PLATFORM_WIN32_WINDOWS:
        ExitWindowsEx(EWX_FORCE|EWX_SHUTDOWN,0);
        break;
    case VER_PLATFORM_WIN32_NT:
    default:
        HANDLE hToken;
        TOKEN_PRIVILEGES tkp;
        CString l_sErrorCode;
        
        if(!OpenProcessToken(GetCurrentProcess(),
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
            AfxMessageBox("OpenProcessToken failed.");
        
        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)
            AfxMessageBox("AdjustTokenPrivileges enable failed.");

        ExitWindowsEx(EWX_FORCE|EWX_POWEROFF,1);
        break;
    }
}
1  COMMENTS