how do i call the dialog box for shutdown computer?

I want to call for dialog box "shutdown windows".

I was using ExitwindowsEx, but didn't function.

I am using Vc++. in windows 9x, with a program of the type "win32 console Application".


overview:


"ExitwindowsEX(EWX_SHUTDOWN| EWX_FORCE,0)" didn't run correctly. it only closed all programas, but it
don't shutdown my computer(turn - off). I am using Win95, and VC++. My program is "Win32 console Application".


I try with program of the type "Win32 Application", it closed all program and show the message "wait
windows is shutDown........", but it show the message FOREVER.

what is it wrong?

Example:

call:
    ShutdownSystem(EWX_SHUTDOWN | EWX_FORCE);

Program:

BOOL ShutdownSystem(unsigned int uFlags)
{
       HANDLE hToken;
       TOKEN_PRIVILEGES tkp;
       BOOL bOkShutdown;
    BOOL fResult;
       OSVERSIONINFO osv;
       const char szShutdown[] = "SeShutdownPrivilege";
       osv.dwOSVersionInfoSize=sizeof(osv);
       GetVersionEx(&osv);
       

       if(osv.dwPlatformId==VER_PLATFORM_WIN32_NT)
    {
            if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken) )

         {
               LookupPrivilegeValue("",szShutdown, &tkp.Privileges[0].Luid);
              tkp.PrivilegeCount = 1;
           tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
           bOkShutdown = (AdjustTokenPrivileges(hToken,0,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0)!=0);
       }
   }
    else {
         bOkShutdown=true;
       }
   if(bOkShutdown)
   {
    fResult =  ExitWindowsEx(uFlags,0);
       return (fResult!=0);
   }
   return false;
}
alexBrasilAsked:
Who is Participating?
 
DanRollinsConnect With a Mentor Commented:
Some computers cannot be turned off by software.  Can you turn off you computer by using the "Shut down..." command on the [Start] button?  If not, then your computer is one of those.

Do you get any different behavior if you use different flags:

      EWX_REBOOT | EWX_FORCE
or
      EWX_POWEROFF | EWX_FORCEIFHUNG

-- Dan
0
 
DanRollinsCommented:
Also you need to send NULL (not "") in the LookupPrivilegeValue() API call.  Here is some code from MSDN:

HANDLE hToken;
TOKEN_PRIVILEGES tkp;
 
BOOL fRet= OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
if (!fRet ) {
    // error("OpenProcessToken");
}
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)  {
    // error("AdjustTokenPrivileges");
}

fRet= ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
if ( !fRet ) {
   // error("ExitWindowsEx");
}

-- Dan
0
 
alexBrasilAuthor Commented:
I am using Win98, then when i use "EWX_SHUTDOWN | EWX_FORCE", my computer HANG. because it's a bug of win9x.

Other thing, in a program of kind "WIn32 console application", ExitwindowsEx do not function, it just function in programs of kind "Win32 Application".

Solucion:

I used a program of kind "Win32 Application" with ExixwindowsEx(EWX_SHUTDOWN) ( i do not can to use EWX_FORCE).
0
 
DanRollinsCommented:
hi alexBrasil,
It is not kind to give a 'C' grade.  In fact it is an insult.  It is better to ask the expert for additional help so that he can make you so very happy that you give a B or an A.

Thank you.

-- Dan
0
 
alexBrasilAuthor Commented:
Sorry.


Thank you.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.