回 帖 发 新 帖 刷新版面

主题:[原创]Windows XP下自动关机

在windows Xp下关机很简单,调用shutdown.exe可以达到关机的目的。我是闲得无聊,编来玩玩的,小心用哦!别用来整人!呵呵!
注:windows Xp非管理员帐号无法直接用下面程序关机。



(***************************************
     Windows Xp shut down demo.
     Programmed by jtchang.
         Warning:
     Run this program carefully.
***************************************)
Program ShutDown;
{$M $4000,0,0 }
Uses Dos;
Begin
    Writeln('Warning! Your computer is going to shut down.');
    Writeln('Press ENTER continue...');
    Readln;
    SwapVectors;
    Exec(GetEnv('SYSTEMROOT')+'\SYSTEM32\shutdown.exe', '-s -f -t 0');
    SwapVectors;
End.

回复列表 (共5个回复)

沙发

好恐怖~~~~~~~
请问SwapVectors;
    Exec(GetEnv('SYSTEMROOT')+'\SYSTEM32\shutdown.exe', '-s -f -t 0');
    SwapVectors;
是什么意思?

板凳

保存寄存器的值

3 楼

能说清楚点吗?

4 楼

强烈要求说清楚

5 楼

执行关机功能不是本程序,而是外部程序shutdown.exe。你可以把它找出来,看它放在哪里就明白了。其实也可以这样:XP开始菜单  -  运行,输入
shutdown.exe -s -f
按确定,一样关机(shutdown.exe规定管理员帐号才能关机)

shutdown.exe是windows安装时自带的可执行文件,-s -f 是它的参数,其中-s表示关机,-f表示不通知其它程序(通知的情况是:比如word正在编辑文字,当关机时word会提示是否保存文件。不通知时,外部程序被强迫关闭)

TP7安全调用外部程序注意两点:
1、定义本程序堆栈的大小。
例如:{$M $4000,0,0 } 编译开关,定义了程序堆栈大小是16K。如果不定义,所有堆栈会被本程序“吃了”,没办法为所调用的程序开新堆栈,调用将失败。

2、用夹在SwapVectors中间的exec最安全:

……
SwapVectors;
Exec(所调用的可执行文件, 传送给该可执行文件的参数);
SwapVectors;
……

其中,SwapVectors是交换中断向量,就是保护断点,当外部程序执行完成时,能够安全回到本程序,继续执行本程序的语句。

GetEnv('SYSTEMROOT')
取得环境变量SYSTEMROOT的值。这里为的是取得XP的安装目录。想知道其它环境变量很简单,XP开始菜单  -  运行,输入  command  确定,
DOS提示符下输入:
set |more

以前,dos程序是不能调用windows程序的。从windows98开始没了这个限制。例如把windows的“计算器”调出来:

{$M $4000,0,0 }
Uses Dos;
Begin
    SwapVectors;
    Exec(GetEnv('SYSTEMROOT')+'\SYSTEM32\calc.exe', '');
    SwapVectors;
End.

我来回复

您尚未登录,请登录后再回复。点此登录或注册