我的程序在系统出现登录框前已经运行,问: 如何实现关机?
我是接管系统的msgina.dll实现的,(不是服务程序)但无法实现关机. 恳请指点

解决方案 »

  1.   

    我见过好多程序在系统出现登录框前运行的,RomoteAdministrator 2.1 你可以看看这个程序代码
      

  2.   

    ExitwindowsEx(UINT uFlags,DWORD dwReserved);
    uFlags;指定关机类型。此参数必须包括下列值之一:EWX_LOGOFF,EWX_POWEROFF,EWX_REBOOT,EWX_SHUTDOWN
      

  3.   

    ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF, EWX_FORCE);
    上面的语句在登录后执行能正常关机, 但是在未登录前却不行,怎么回事呢
      

  4.   

    #define   WIN9X  0
    #define   WINNT  1int GetSysVer()
    {
    DWORD dwVer = GetVersion();
    if (dwVer < 0x80000000)  return WINNT;
    return WIN9X;
    }void Reboot()
    {
    if(GetSysVer() == WINNT)
    {
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    if(! OpenProcessToken(GetCurrentProcess(),
    TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)){
    return ;
    }
    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); MessageBox(NULL,L"winnt",L"test",0);
    }

    MessageBox(NULL,L"shutdown",L"test",0); ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF, EWX_FORCE); <<-----------关键代码
    }
    主要的控制代码,在登录后执行是没有问题的,可以正常关机,但登录后不行了..
      

  5.   

    不能调用ExitWindowsEx,而应该是在WlxLoggedOutSAS函数中返回WLX_SAS_ACTION_SHUTDOWN,就是告诉winlogon,用户需要关闭系统。