`
wiely
  • 浏览: 22078 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java控制XP关机程序

    博客分类:
  • java
阅读更多

    各位大侠,小弟学java一段时间拉,最近知道拉xp系统下有shutdown这个命令,可以强制关机,并能够限定时间。因而突发奇想,想做一个java控制电脑关机的程序。正好最近和高手交流,并了解Runtime类的一些用法。因此在两天的编码,查资料,不停测试下,有点小成果,但是该程序仍然存在bug。

 

    就是不能使用任务管理器强制结束,如果强制结束那么将在xp自带的关机程序调出以后,无法终止关机行为,这对某些人来说可能会是灾难啊。除非你从.\system2\目录找到该.exe程序,手动终止强制关机行为。针对这个问题我有一个很勉强的方法:     

         1,不使用随即生成更改shutdown文件名后的名字。而是使用一个固定的名字,程序中name = (int) (Math.random() * 10) + "shut";改为name = "shut";

         2,可以在catch{}里面恢复正常xp系统的shutdown名字,关闭当前窗体,并提示一些信息,然后重新启动程序。       

       

    但是这种方法却降低拉程序的隐秘性。和可破解性(虽然很容易破解,且破解方法很多,而且这个程序很简单)但是我还是尽量考虑程序的隐秘性而采取了随即生成名字的方法。希望各位帮忙想想可解决的方法,我真诚的请教。
      

分享到:
评论
2 楼 wiely 2008-12-11  
bug已解决
import java.awt.AWTException;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Enumeration;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.UIManager;

/**
* @date 2008-12-6
* @author 魏蕾航
* @describe 这个程序用来控制电脑的使用时间,当在指定的时间段内是,电脑能正常使用,超出正确时间段,那么
*           程序将使电脑被迫关机,除非您有密钥解密,否则电脑在非指定时间段将不可使用。本程序有10分钟的
*           误差时间,这是为拉节约cpu资源采用线程休眠的方法,由于线程休眠10分钟,所以可能造成在某个10分钟内
*           程序不能正确响应系统的时间来控制关机行为。
*
*/
@SuppressWarnings("serial")
public class ShutDownPC extends JFrame implements ActionListener, Runnable {

// swing 组建
JTextField jt1;
JLabel jl1;
JLabel jl2;
JButton jb1;
Thread thread;
String name;
// 托盘图标
private TrayIcon trayIcon;
// 系统托盘
private SystemTray systemTray;

// 默认构造函数,用来初始化swing组建、线程、界面大小及版式,还有设置监听实践。
public ShutDownPC() {

jt1 = new JTextField(10);
jl1 = new JLabel("您的电脑将在23:00-6:00之间内强迫关机!(本系统有5分钟误差)");
jl2 = new JLabel("输入您的密钥,终止自关机程序:");
jb1 = new JButton("确定");

this.add(jl1);
this.add(jl2);
this.add(jt1);
this.add(jb1);

// 托盘处理
systemTray = SystemTray.getSystemTray();// 获得系统托盘的实例
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
trayIcon = new TrayIcon(ImageIO.read(ClassLoader
.getSystemResourceAsStream("shutxp.jpg")),"XP自关机程序");
systemTray.add(trayIcon);// 设置托盘的图标,0.gif与该类文件同一目录
} catch (IOException e1) {
e1.printStackTrace();
} catch (AWTException e2) {
e2.printStackTrace();
}

this.setVisible(true);
this.setLayout(new FlowLayout());
this.setSize(550, 150);
this.setTitle("XP系统自关机控制程序,请不要使用任务管理器强制终止,否则后果自负。");
this.setDefaultCloseOperation(0);

jb1.addActionListener(this);
jt1.addActionListener(this);

// 窗口最小化时dispose该窗口,使用任务管理器结束进程时,回复名字。
this.addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
dispose();
}

public void windowClosing(WindowEvent e) {
recoverName();
System.out.println("recoverName");
dispose();
}
});

// 双击托盘窗口再现
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
setExtendedState(Frame.NORMAL);
setVisible(true);
}
}
});

if (thread == null) {
thread = new Thread(this);
thread.start();
}

}

// 更改xp自带强制关机命令名
public void reName() {
name = (int) (Math.random() * 10) + "shut";
File file = new File("C:/WINDOWS/system32/shutdown.exe");
file.renameTo(new File("C:/WINDOWS/system32/" + name + ".exe")); // 改名
System.out.println("rename is successfull!");
}

// 还原xp自带强制关机文件名
public void recoverName() {

File file = new File("C:/WINDOWS/system32/" + name + ".exe");
String name = "shutdown";
file.renameTo(new File("C:/WINDOWS/system32/" + name + ".exe")); // 改名
System.out.println("recover the shutdown process.");

}

// 启动调用xp系统本地Shutdown进程,依据时间条件进行关机。
@SuppressWarnings( { "deprecation", "static-access" })
public void run() {
Date d;

// 强制修改xp自带关机进程名
reName();
try {
while (true) {
d = new Date();
int hour = d.getHours();
if (hour > 22 || hour < 6) {

jl1.setText("您的计算机将在3分钟后关机,请保存好您的资料。如果有急需,请输入密钥!");
// 获得系统关机进程。
Runtime.getRuntime().exec(name + " -s -t 180");
// 休眠一段时间,来减少程序的运行次数。节约cpu资源。
thread.sleep(1000 * 60 * 5);
} else {
thread.sleep(1000 * 60 * 5);
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}

}

// 解密事件处理
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {

String source = jt1.getText();
if (source.equalsIgnoreCase("Elite")) {
try {
// 调用关闭程序进程。
Runtime.getRuntime().exec(name + " -a");
} catch (IOException e2) {
e2.printStackTrace();
}

// 恢复进程名
recoverName();

JOptionPane.showMessageDialog(null, "自关机程序终止");
thread.stop();
this.dispose();
System.exit(0);

} else {
JOptionPane.showMessageDialog(null, "密钥错误,您没有权限操作");
}

}

@SuppressWarnings("unchecked")
public static void main(String args[]) {

// 设置默认界面
// setDefaultLookAndFeelDecorated(true);
// 设置界面字体及风格
Font font = new Font("JFrame", Font.PLAIN, 14);
Enumeration keys = UIManager.getLookAndFeelDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
if (UIManager.get(key) instanceof Font)
UIManager.put(key, font);
}
// 初始化类
new ShutDownPC();
}
}
1 楼 wiely 2008-12-09  
  忘啦告诉大家拉,这个程序是控制22:00到6:00内关机的程序。我把时间搞错拉。希望各位能见谅。

相关推荐

    Java WindowsXP自动关机程序

    Java Windows XP自动关机程序是一种基于Java编程语言开发的应用,用于在Windows XP操作系统上设置定时自动关机。这个程序的特点是其简洁的算法和美观的用户界面,使得用户能够轻松地设定关机时间,实现自动化操作,...

    java控制XP自动关机程序

    各位大侠,小弟学java一段时间拉,最近...因而突发奇想,想做一个java控制电脑自动守候关机的程序。正好最近和高手交流,并了解Runtime类的一些用法。因此在两天的编码,查资料,不停测试下,有点小成果,因此共享下

    定时关机[XP版] For pb115

    该软件的特色在于其最小化到任务栏的功能,这意味着用户可以在不干扰其他工作的情况下运行定时关机程序,只需在任务栏上查看或管理其状态。这对于保持桌面整洁和高效使用电脑资源非常有帮助。 总结起来,"定时关机...

    Windows XP运行命令大全

    42. **jpicpl32.cpl**,**javaws**:Java控制面板,管理Java应用程序和设置。 43. **notepad**:记事本,简单文本编辑器。 44. **nvtuicpl.cpl**(如果已安装):NVIDIA桌面管理器,调整桌面布局。 45. **packager**...

    用户必备资料 103个Windows XP运行命令

    32. `jpicpl32.cpl` 和 `javaws`:Java 控制面板,管理Java相关设置。 33. `notepad`:打开记事本,简单的文本编辑器。 34. `nvtuicpl.cpl`:Nview 桌面管理器,优化多显示器设置。 35. `packager`:对象包装程序,...

    xp运行命令xp运行命令

    - **功能**:程序和功能控制面板。 - **使用场景**:卸载应用程序、更改程序设置等。 ##### 4. **controladmintools** - **功能**:打开所有控制面板项目。 - **使用场景**:全面管理系统的各种设置。 ##### 5. **...

    XP系统下文件夹详细介绍集.doc

    - **java**:存放Java运行组件及其程序文件。 - **Web** - **Wallpaper**:存放桌面壁纸的文件夹。 - **addins**:系统附加文件夹,存放系统附加功能的文件。 - **Connection Wizard**:连接向导文件夹,存放...

    shutdown.exe

    在Windows XP操作系统中,`shutdown.exe`是一个至关重要的命令行工具,它提供了对计算机的启动、关闭、重启等操作的控制。这个小程序的功能强大且灵活,是系统管理员和普通用户进行系统管理的重要手段之一。本文将...

    XP各个文件夹详细介绍

    1. **system32**:这是Windows XP的核心文件夹,存放系统文件和硬件驱动程序。其中的`config`子文件夹存储用户配置信息和密码,`systemprofile`用于系统配置恢复,`drivers`存放硬件驱动,`spool`处理打印任务,`...

    windows xp系统命令

    38. **sshutdn**:计划关机工具,允许用户设置系统在特定时间自动关机或重启。 39. **taskmgr**:任务管理器,显示系统性能信息和正在运行的进程,以及结束无响应的应用程序。 40. **eventvwr**:事件查看器,用于...

    Java Process命令小全

    Java Process命令小全 Java Process命令小全是Java中的一种命令,用于执行操作系统的命令。通过Runtime.getRuntime().exec(commandStr)方法可以调用执行cmd指令。 cmd命令是Windows操作系统中的命令行工具,用于...

    windows2003/xp/2000/NT之上的常用命令大全

    - **用途**: 打开“添加或删除程序”控制面板,用于卸载软件。 - **命令格式**: `appwiz.cpl` 3. **controluserpasswords2** - **用途**: 打开“用户账户”设置,用于管理用户账户的密码策略。 - **命令格式**...

    windows XP 各个文件夹详细介绍(联想内部资料).docx

    14. **java**:Java运行环境的组件和程序文件。 15. **Web**:包含桌面壁纸、系统附加功能和连接向导文件。 16. **Temp**:临时文件存放地,定期清理可优化系统性能。 17. **twain_32**:与扫描仪相关的文件。 ...

    香槟网络系统 G H O S T XP SP3 7.0

    3)nVIDIA_nf5以下为skyfree精简纯驱动并将驱动文件退回71.89版避免部份TNT显卡安装高版本驱动出现某些不预期错误,nVIDIA高版本显卡驱动更新为182.50版,保留控制面板常用功能及3D、PhysX物理等程序。添加全系列桌面...

    jsp编写的小工具代码

    【标题】"jsp编写的小工具代码"涉及到的主要知识点是Java Server Pages(JSP)技术,这是一种用于开发动态web应用程序的服务器端脚本语言。JSP是Java平台的一部分,它允许开发者将HTML、XML或者其他标记语言与Java...

    第2章 计算机基础知识 .ppt

    6. **分布式操作系统**:分布在网络上的多个计算机共享资源,如Java RMI。 【Windows XP】 Windows XP是微软公司推出的一款个人计算机操作系统,属于图形用户界面(GUI)的单用户多任务操作系统。它提供了丰富的...

    易语言程序免安装版下载

    修改XP风格支持库,解决GDI资源泄露,以及在使用通用组件库六时组合框标题出现重影的BUG。 5. 修改扩展界面支持库一,解决树形框项目无法通过鼠标点击进入编辑状态的BUG。 6. 修改高级表格支持库,解决插入行/...

    windows2003详细教程.pdf

    可以选择Microsoft或Sun的Java VM版本,以满足浏览器插件和应用程序的需求。 5. **禁止关机事件跟踪**: 关机事件跟踪功能在服务器环境中是有用的,但对工作站用户可能并不必要。通过运行“gpedit.msc”打开组策略...

Global site tag (gtag.js) - Google Analytics