我要实现远程关机。
    我用ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0L );进行强行关机。
现在遇到:
   如果别人用我的共享资料就提示----“已经有一位用户连接到你的计算机,关闭计算机将切断用户用联系,确实要关闭计算机吗?”
    到这一步就不行了,必须要用户自己按一下“确定”才能行的。怎么来个更强大的强制关机。

解决方案 »

  1.   

    转贴:
     INT MyExitSystemFunc(int IsHow)
    {
    HANDLE hToken;
        TOKEN_PRIVILEGES tkp;
    DWORD dwVersion; dwVersion = GetVersion(); //获得Windows NT或Win32的版本号
    switch(IsHow)
    {
    case 0://注销
    ExitWindowsEx(EWX_LOGOFF,0);
    break; case 1://重新启动
    if (dwVersion < 0x80000000)  
    {// Windows NT系列
                OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
                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);            ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0);
    }
    else
    {//Windows 95系列
                ExitWindowsEx(EWX_FORCE | EWX_REBOOT,0);
    }
    break; case 2://关闭计算机
        if (dwVersion < 0x80000000) 
    {// Windows NT
        OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
                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);            ExitWindowsEx(EWX_POWEROFF |EWX_FORCE, 0);
    }
    else
    {
                ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
    }
    break;
        }
       return 0;
    }
      

  2.   

    大家知道不知道这个:如何使WIN98也能像W2K那样在没有登录到桌面,就可以加载程序,我自己编的程序都必须登录才能运行呀!!!
       高手指点。
      

  3.   

    大家知道不知道这个:如何使WIN98也能像W2K那样在没有登录到桌面,就可以加载程序,我自己编的程序都必须登录才能运行呀!!!
       高手指点
      

  4.   

    DWORD dwVersion;
    TOKEN_PRIVILEGES tkp;
    HANDLE hToken;
        
    dwVersion = GetVersion();
    if(dwVersion < 0x80000000)
    {//NT

           if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
    {
    MessageBox("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) 
    {
                MessageBox("AdjustTokenPrivileges enable failed!");
    }

    BOOL fResult =InitiateSystemShutdown( 
    "Lf",                 
    "WINDOWS将在上面的时间内关机,请做好保存工作!",  // 显示的消息
    10,                                // 关机所需的时间
    TRUE,                                 
    TRUE);                             //设为TRUE为重起,设为FALSE为关机

            if(!fResult) 
            { 
    MessageBox("InitiateSystemShutdown failed."); 

        } else
    {//95
    ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
    }