请各位解急为什么WIN2000下调用API关机,不是关机,而是出现“现在可以安全关机”画面要手动关机　一键查看最优答案　确认一键查看最优答案?　本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!　取消　本版专家分:0　结帖率　100%　请各位解急为什么WIN2000下调用API关机,不是关机,而是出现“现在可以安全关机”画面,　要手动关机　本版专家分:55　你试一下别的机器,看是否电脑本身的问题　我编过定时关机　你先试一下:tsx.vicp.net/vs/gj.exe　如果好使的话,我就给你源代码好啦,我刚找出来　以前弄的,不好意思!　本版专家分:2347　Private　Type　LUID　UsedPart　As　Long　IgnoredForNowHigh32BitPart　As　Long　End　Type　Private　Type　TOKEN_PRIVILEGES　PrivilegeCount　As　Long　TheLuid　As　LUID　Attributes　As　Long　End　Type　Private　Declare　Function　ExitWindowsEx　Lib　"user32"　(ByVal　_　dwOptions　As　Long,　ByVal　dwReserved　As　Long)　As　Long　Private　Declare　Function　GetCurrentProcess　Lib　"kernel32"　()　As　Long　Private　Declare　Function　OpenProcessToken　Lib　"advapi32"　(ByVal　_　ProcessHandle　As　Long,　_　ByVal　DesiredAccess　As　Long,　TokenHandle　As　Long)　As　Long　Private　Declare　Function　LookupPrivilegeValue　Lib　"advapi32"　_　Alias　"LookupPrivilegeValueA"　_　(ByVal　lpSystemName　As　String,　ByVal　lpName　As　String,　lpLuid　_　As　LUID)　As　Long　Private　Declare　Function　AdjustTokenPrivileges　Lib　"advapi32"　_　(ByVal　TokenHandle　As　Long,　_　ByVal　DisableAllPrivileges　As　Long,　NewState　As　TOKEN_PRIVILEGES　_　,　ByVal　BufferLength　As　Long,　_　PreviousState　As　TOKEN_PRIVILEGES,　ReturnLength　As　Long)　As　Long　Const　EWX_FORCE　=4'强迫中止没有响应的进程　Const　EWX_LOGOFF　=0'中止进程,然后注销　Const　EWX_POWEROFFE=8　'关掉系统电源(如果可能的话,ATX电源就可以)　Const　EWX_REBOOT=2　'重新引导系统　Const　EWX_SHUTDOWN=1　'关闭系统　Private　Sub　AdjustToken()　Const　TOKEN_ADJUST_PRIVILEGES　=　&H20　Const　TOKEN_QUERY　=　&H8　Const　SE_PRIVILEGE_ENABLED　=　&H2　Dim　hdlProcessHandle　As　Long　Dim　hdlTokenHandle　As　Long　Dim　tmpLuid　As　LUID　Dim　tkp　As　TOKEN_PRIVILEGES　Dim　tkpNewButIgnored　As　TOKEN_PRIVILEGES　Dim　lBufferNeeded　As　Long　hdlProcessHandle　=　GetCurrentProcess()　OpenProcessToken　hdlProcessHandle,　(TOKEN_ADJUST_PRIVILEGES　Or　_　TOKEN_QUERY),　hdlTokenHandle　'　Get　the　LUID　for　shutdown　privilege.　LookupPrivilegeValue　"",　"SeShutdownPrivilege",　tmpLuid　tkp.PrivilegeCount　=　1　'　One　privilege　to　set　tkp.TheLuid　=　tmpLuid　tkp.Attributes　=　SE_PRIVILEGE_ENABLED　'　Enable　the　shutdown　privilege　in　the　access　token　of　this　process.　AdjustTokenPrivileges　hdlTokenHandle,　False,　_　tkp,　Len(tkpNewButIgnored),　tkpNewButIgnored,　lBufferNeeded　End　Sub　Private　Sub　Form_Click()'　AdjustToken'98可以不用这个,2000与XP就要用　,2003还没有试过　ExitWindowsEx　EWX_POWEROFFE,　0　End　Sub　本版专家分:14548　你没有使用EWX_POWEROFF=8　或者你的机器不支持电源管理。　本版专家分:0　谢谢各位,　我回去试试。　本版专家分:169　我到现在还是要自己关机　原因是我的机器不支持那种电源管理　本版专家分:7049　只要是ATX电源就可以啊!　一下是本人提供的源代码,可以直接使用的　Public　Declare　Function　ExitWindowsEx　Lib　"user32"　(ByVal　dwOptions　As　Long,　ByVal　dwReserved　As　Long)　As　Long　Public　Declare　Function　GetCurrentProcess　Lib　"kernel32"　()　As　Long　Public　Declare　Function　OpenProcessToken　Lib　"advapi32"　(ByVal　ProcessHandle　As　Long,　ByVal　DesiredAccess　As　Long,　TokenHandle　As　Long)　As　Long　Public　Declare　Function　LookupPrivilegeValue　Lib　"advapi32"　Alias　"LookupPrivilegeValueA"　(ByVal　lpSystemName　As　String,　ByVal　lpName　As　String,　lpLuid　As　LUID)　As　Long　Public　Declare　Function　AdjustTokenPrivileges　Lib　"advapi32"　(ByVal　TokenHandle　As　Long,　ByVal　DisableAllPrivileges　As　Long,　NewState　As　TOKEN_PRIVILEGES,　ByVal　BufferLength　As　Long,　PreviousState　As　TOKEN_PRIVILEGES,　ReturnLength　As　Long)　As　Long　Public　Sub　AdjustToken()　'»ñÈ¡ÄÜ¹Ø»úµÄ°²È«¼¶±ð£¬ÓÃÓÚNT½á¹¹µÄWINDOWS　Const　TOKEN_ADJUST_PRIVILEGES　=　&H20　Const　TOKEN_QUERY　=　&H8　Const　SE_PRIVILEGE_ENABLED　=　&H2　Dim　hdlProcessHandle　As　Long　Dim　hdlTokenHandle　As　Long　Dim　tmpLuid　As　LUID　Dim　tkp　As　TOKEN_PRIVILEGES　Dim　tkpNewButIgnored　As　TOKEN_PRIVILEGES　Dim　lBufferNeeded　As　Long　hdlProcessHandle　=　GetCurrentProcess()　OpenProcessToken　hdlProcessHandle,　(TOKEN_ADJUST_PRIVILEGES　Or　_　TOKEN_QUERY),　hdlTokenHandle　LookupPrivilegeValue　"",　"SeShutdownPrivilege",　tmpLuid　tkp.PrivilegeCount　=　1　tkp.TheLuid　=　tmpLuid　tkp.Attributes　=　SE_PRIVILEGE_ENABLED　AdjustTokenPrivileges　hdlTokenHandle,　False,　_　tkp,　Len(tkpNewButIgnored),　tkpNewButIgnored,　lBufferNeeded　End　Sub　Public　Sub　PC_ShutDown()　'强制关闭电脑,并关闭电源　AdjustToken　'NT内核的windows系统需要　ExitWindowsEx　(EWX_FORCE　Or　EWX_POWEROFF),　&HFFFF　End　Sub　匿名用户不能发表回复!