当前位置:编程学习 > VB >>

如何实现真正意义上的关机

我尝试过用ExitWindows函数可以有条件地关闭电脑,条件是不能有一些需要确定是否退出的程序正在运行。例如,如果打开了winword并且内容还没有存盘时,在VB中使用ExitWindows函数关机的话,windows会提问文件是否需要存盘,从而阻碍了系统的自动关机。
我想请教的问题是:有什么办法能够令系统不理会任务这类似这些提问,强行关机呢? --------------------编程问答-------------------- 获取关机权限
关机函数中加强制关机标志 --------------------编程问答-------------------- 网上有许多强制关机的代码,比如:VB强制关机代码 --------------------编程问答-------------------- Shell "shutdown -t 1 -s" --------------------编程问答-------------------- 楼主试下
ExitWindowsEx --------------------编程问答-------------------- mark --------------------编程问答--------------------
call Shell("shutdown -f -s -t 1", vbHide)
--------------------编程问答--------------------
引用 3 楼 wuyazhe 的回复:
Shell "shutdown -t 1 -s"

顶这个。
我的信仰是能用Shell完成的功能决不用内置函数和API完成。 --------------------编程问答-------------------- 拔电源线也是一个可靠性很高的选择(^_^) --------------------编程问答-------------------- ExitWindowsEx(EWX_FORCE Or EWX_POWEROFF, 0) --------------------编程问答-------------------- EIXTWINDOWSEX有几个标志,把那几个标志全部加上就是强制关机了。
你也可以试试NtSetSystemPowerState(NtShutdownSystem) --------------------编程问答-------------------- 添加这个模块:

http://www.m5home.com/bbs/thread-391-1-3.html

然后:

call ShutDownPC(4) --------------------编程问答-------------------- 老马的游客帐号无法登录啊……
--------------------编程问答-------------------- ,.............NND,又让人改了

DZ论坛居然没有锁定密码的选项??找了半天了 --------------------编程问答-------------------- 不是很清楚 --------------------编程问答--------------------
引用 12 楼 chen8013 的回复:
老马的游客帐号无法登录啊……

现在可以了

直接改源代码,判断游客账号,NND.

改密码的人真变态. --------------------编程问答-------------------- 控制外部执行机构终止对电脑提供电源..... --------------------编程问答--------------------
引用 15 楼 myjian 的回复:
现在可以了

.............


下载来看了,我记得以前好象下载过…………
不过没保存。


If IsNt = True Then Call AdjustTokenPrivilegesForNT

为何不这样写呢:
If IsNt Then Call AdjustTokenPrivilegesForNT
--------------------编程问答--------------------
引用 17 楼 chen8013 的回复:
引用 15 楼 myjian 的回复:

现在可以了

.............



下载来看了,我记得以前好象下载过…………
不过没保存。


If IsNt = True Then Call AdjustTokenPrivilegesForNT

为何不这样写呢:
If IsNt Then Call AdjustTokenPrivilegesForNT


这是很混乱的问题,比如有时候顺手有时候无聊,或者说为了新手能看懂。 --------------------编程问答--------------------
引用 17 楼 chen8013 的回复:
If IsNt = True Then Call AdjustTokenPrivilegesForNT

为何不这样写呢:
If IsNt Then Call AdjustTokenPrivilegesForNT

习惯问题.....

以前只写代码片段时,为了"看起来高手一点",尽量用些越精简越好的写法,哪怕影响可读性.

现在....尽量地显式写代码,尽量达到代码自注释的效果....因为比较懒得写注释.

而且,代码量大了之后,能一眼看明白为什么这样写,一眼就清楚的话,更好点....

于是就这样了 --------------------编程问答--------------------
引用 7 楼 zhao4zhong1 的回复:
引用 3 楼 wuyazhe 的回复:
Shell "shutdown -t 1 -s"

顶这个。
我的信仰是能用Shell完成的功能决不用内置函数和API完成。


+1 --------------------编程问答--------------------
引用 19 楼 myjian 的回复:
引用 17 楼 chen8013 的回复:
If IsNt = True Then Call AdjustTokenPrivilegesForNT

为何不这样写呢:
If IsNt Then Call AdjustTokenPrivilegesForNT

习惯问题.....

以前只写代码片段时,为了"看起来高手一点",尽量用些越精简越好的写法,哪怕影响可读性.

现在..……


If IsNt Then 稍微快一点. --------------------编程问答--------------------
引用 8 楼 zhao4zhong1 的回复:
拔电源线也是一个可靠性很高的选择(^_^)

我也觉得是~ --------------------编程问答--------------------
引用 21 楼 wallescai 的回复:
If IsNt Then 稍微快一点.

这个不太清楚,还没有因为这个问题影响过效率....

不过等真遇到了时至少知道了多一种尝试,3Q --------------------编程问答-------------------- 有。用Ntdll提供的API函数NtShutdownSystem和NtShutdownSystem。  
此方法不保存系统设置,所以很快。如果安装了应用软件,需要重新启动计算机,请使用微软提供的正常启动计算机。 
'窗体上放一控件数组Command1(0),Command1(1),Command1(2)
Option Explicit

Private Declare Function RtlAdjustPrivilege Lib "ntdll" (ByVal Privilege As Long, ByVal Newvalue As Long, ByVal NewThread As Long, Oldvalue As Long) As Long
Private Declare Function NtShutdownSystem Lib "ntdll" (ByVal ShutdownAction As Long) As Long
Private Const SE_SHUTDOWN_PRIVILEGE As Long = 19
Private Const SHUTDOWN As Long = 0
Private Const RESTART As Long = 1
Private Const POWEROFF As Long = 2

Private Sub Command1_Click(cIndex As Integer)
        If cIndex = 0 Then
           RtlAdjustPrivilege SE_SHUTDOWN_PRIVILEGE, 1, 0, 0
           NtShutdownSystem SHUTDOWN Or RESTART
        End If
        If cIndex = 1 Then
           RtlAdjustPrivilege SE_SHUTDOWN_PRIVILEGE, 1, 0, 0
           NtShutdownSystem SHUTDOWN Or POWEROFF
        End If
        If cIndex = 2 Then
           Unload Me
           End
        End If
End Sub

Private Sub Form_Load()
        Command1(0).Caption = "快速启动计算机"
        Command1(1).Caption = "快速关闭计算机"
        Command1(2).Caption = "  退      出  "
End Sub
--------------------编程问答-------------------- 等待10s,强制关机
shell "shutdown -t 10 -s" --------------------编程问答--------------------
引用 8 楼 zhao4zhong1 的回复:
拔电源线也是一个可靠性很高的选择(^_^)


嗯! --------------------编程问答-------------------- Shell("rundll.exeuser.exe,exitwindows", vbHide) '关闭 --------------------编程问答-------------------- shutdown    --------------------编程问答-------------------- 拔电源……
要有程序拦截关机消息的话很难做到真正意义上关机,除非把那些程序都干掉 --------------------编程问答-------------------- shutdown
有简单的一定不用那么麻烦的。

问题是,有CMD吗
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,