下载 JInvoke 工具包
package com;
import com.jinvoke.JInvoke;
import com.jinvoke.NativeImport;
import com.jinvoke.Util;
import com.jinvoke.win32.Advapi32;
import com.jinvoke.win32.Kernel32;
import com.jinvoke.win32.WinConstants;
import com.jinvoke.win32.structs.EnumServiceStatus;
import com.jinvoke.win32.structs.ServiceStatus;
public class ServiceTool {
@NativeImport(library = "Advapi32")
public static native boolean StartService(int hService,
int dwNumServiceArgs, String lpServiceArgVectors);
public static native boolean ControlService(int hService, int dwControl,
ServiceStatus lpServiceStatus);
public static native boolean DeleteService(int hService);
public static native int CreateService(int hSCManager,
String lpServiceName, String lpDisplayName, int dwDesiredAccess,
int dwServiceType, int dwStartType, int dwErrorControl,
String lpBinaryPathName, String lpLoadOrderGroup, String lpdwTagId,
String lpDependencies, String lpServiceStartName, String lpPassword);
public static void main(String[] args) {
// createService();
// deleteService();
// startService("lanmanserver");
queryService();
}
public static void stopService(String serviceName) {
int point = Advapi32
.OpenSCManager(null, null, WinConstants.GENERIC_ALL);
int s = Advapi32.OpenService(point, serviceName,
WinConstants.SERVICE_STOP);
JInvoke.initialize();
ServiceStatus status = new ServiceStatus();
ControlService(s, WinConstants.SERVICE_CONTROL_STOP, status);
System.out.println(status.dwCurrentState);
}
public static void startService(String serviceName) {
int point = Advapi32
.OpenSCManager(null, null, WinConstants.GENERIC_ALL);
int s = Advapi32.OpenService(point, serviceName,
WinConstants.SERVICE_START);
JInvoke.initialize();
StartService(s, 0, null);
}
public static void createService() {
int point = Advapi32
.OpenSCManager(null, null, WinConstants.GENERIC_ALL);
JInvoke.initialize();
int result = CreateService(point, "bakserver", "bakserver",
WinConstants.GENERIC_ALL,
WinConstants.SERVICE_WIN32_SHARE_PROCESS,
WinConstants.SERVICE_AUTO_START,
WinConstants.SERVICE_ERROR_NORMAL, "d:/bakserver.exe", null,
null, "", null, null);
Advapi32.CloseServiceHandle(result);
Advapi32.CloseServiceHandle(point);
System.out.println(Kernel32.GetLastError());
}
public static void deleteService() {
// ��ȡscm����ָ̨�� ��������ָʾ��������̨���Ȩ��
int point = Advapi32
.OpenSCManager(null, null, WinConstants.GENERIC_ALL);
// ��ȡ����ָ�� ���������ʾ�Է�������ЩȨ��
int s = Advapi32.OpenService(point, "bakserver", WinConstants.DELETE);
JInvoke.initialize();
System.out.println("ɾ��service:" + DeleteService(s));
System.out.println("�ر�scm��ݿ�:" + Advapi32.CloseServiceHandle(s));
System.out.println("�رջ�ȡ����ָ��:" + Advapi32.CloseServiceHandle(point));
System.out.println("��ȡ�������:" + Kernel32.GetLastError());
}
public static void queryService() {
// ��ȡscm����ָ̨�� ��������ָʾ��������̨���Ȩ��
int point = Advapi32
.OpenSCManager(null, null, WinConstants.GENERIC_ALL);
// ���ȱ����ȡ����ĸ���
int buff = 0;
// ����������Ϊ���صĽ�� java��int �������ô��� ֻ�������飬��ʵֻ���˵�һ��λ��
// ��ʾҪ��ȡ���з�����Ҫռ�õ��ֽڿռ�
int[] bytesNeeded = { 0 };
// ��ʾ���صķ������ ��Ϊ���ÿռ��Сbuff=0���Կ�������ȡ���ظ���
int[] servicesReturned = { 0 };
int[] resumeHandle = { 0 };
int size = Util.getStructSize(EnumServiceStatus.class);
boolean result = Advapi32.EnumServicesStatus(point,
WinConstants.SERVICE_WIN32, WinConstants.SERVICE_STATE_ALL,
buff, size, bytesNeeded, servicesReturned, resumeHandle);
System.out.println("��Ҫ���ֽڿռ�:" + bytesNeeded[0]);
// һ�����ռ��size�ռ� bytesNeeded[0]Ϊռ���ֽ��� (bytesNeeded[0]/size)Ϊ�������
System.out.println("�������ĸ���:" + (bytesNeeded[0] / size + 1));
int numberOfServices = (bytesNeeded[0] / Util
.getStructSize(EnumServiceStatus.class)) + 1;
EnumServiceStatus[] servicesInfo = new EnumServiceStatus[numberOfServices];
// ���ٸ���� ʵ����ٸ�������
for (int i = 0; i < numberOfServices; i++) {
servicesInfo[i] = new EnumServiceStatus();
}
byte[] by = new byte[bytesNeeded[0]];
for (int i = 0; i < by.length; i++) {
by[i] = 0;
}
int bufferSize = Util.byteArrayToPtr(by);
result = Advapi32.EnumServicesStatus(point, WinConstants.SERVICE_WIN32,
WinConstants.SERVICE_STATE_ALL, bufferSize, bytesNeeded[0],
bytesNeeded, servicesReturned, resumeHandle);
System.out.println("�������" + servicesReturned[0]);
for (int i = 0; i < servicesReturned[0]; i++) {
EnumServiceStatus ess = Util.ptrToStruct(bufferSize,
EnumServiceStatus.class);
System.out.print("ess[" + i + "].lpDisplayName = "
+ ess.lpServiceName + " (" + ess.lpDisplayName
+ ") ");
int hService = Advapi32.OpenService(point, ess.lpServiceName
.toString(), WinConstants.GENERIC_READ);
ServiceStatus serviceStatus = new ServiceStatus();
Advapi32.QueryServiceStatus(hService, serviceStatus);
String serviceState = null;
switch (ess.dwCurrentState) {
case WinConstants.SERVICE_STOPPED:
serviceState = "Stopped";
break;
case WinConstants.SERVICE_START_PENDING:
serviceState = "Starting";
break;
case WinConstants.SERVICE_STOP_PENDING:
serviceState = "Shutting down";
break;
case WinConstants.SERVICE_RUNNING:
serviceState = "Running";
break;
case WinConstants.SERVICE_CONTINUE_PENDING:
serviceState = "Continuing";
break;
case WinConstants.SERVICE_PAUSE_PENDING:
serviceState = "Pausing";
break;
case WinConstants.SERVICE_PAUSED:
serviceState = "Paused";
break;
}
System.out.println(serviceState);
bufferSize += Util.getStructSize(ess);
}
System.out.println("��ȡ�������:" + Kernel32.GetLastError());
}
}
分享到:
相关推荐
在Java开发中,Window类是AWT(Abstract Window Toolkit)组件之一,它代表了没有边框和菜单栏的顶级窗口。...在实际开发过程中,合理地利用Window类能够帮助我们更好地管理窗口布局和事件处理,从而提升用户体验。
本篇文章将详细介绍如何配置定时重启Windows服务以及如何利用任务计划程序来实现这一目标。 一、手动重启Windows服务 首先,我们要了解如何手动重启一个Windows服务。这可以通过服务管理工具或命令行完成: 1. **...
本文将深入讲解如何利用Java Agent技术来注册Java应用为Windows服务。 首先,我们需要理解Java Agent。Java Agent是一种可以在JVM启动时附加到Java应用程序的模块,它允许我们在类加载到内存之前或之后对字节码进行...
Java WindowBuilder是一款强大的Java GUI(图形用户界面)设计工具,它极大地简化了创建和编辑Java Swing和 SWT(标准小部件工具包)应用程序的过程。WindowBuilder 4.6是该工具的一个版本,它提供了可视化的界面...
在探讨如何在Windows环境下利用Java实现对屏幕、鼠标和键盘的监控之前,我们先要理解Java在处理此类事件上的基本框架以及其局限性。Java通过AWT(Abstract Window Toolkit)和Swing库提供了多种事件监听接口,如...
Waffle 项目通过 Java Native Access (JNA) 和 Java Cryptography Extension (JCE) 库,实现了对 Kerberos 协议的 Java 包装,使得开发者无需深入了解底层细节就能利用这一功能。 **Waffle 1.5 的关键特性** 1. **...
7. **开源协作**:WindowBuilder作为开源项目,其源码体现了良好的代码组织、注释和版本控制实践,可以借鉴这些经验应用于自己的项目。 通过研究WindowBuilder的源代码,开发者不仅能提升GUI设计能力,还能深入理解...
本主题将详细介绍如何利用Java编写脚本启动和停止服务,以及涉及到的相关技术点。 首先,让我们关注“java操作脚本命令”。在Linux环境中,我们通常使用shell脚本来管理服务。例如,启动一个Java服务,我们可以编写...
开发者需要利用JFrame作为窗口容器,JButton表示各个数字和运算符按钮,JLabel显示计算结果。 2. Event Handling:为了响应用户的点击事件,需要实现ActionListener接口并覆盖其actionPerformed方法。每个按钮的...
本文将详细介绍如何利用 JACOB 在 Java 中控制 Word 文档,包括创建、打开文档、设置文档可见性、调整窗口位置以及添加超链接等功能。 #### 二、JACOB 简介 JACOB(Java COM Bridge)是一个开源库,它允许 Java ...
这个"java之计算器(源代码)"项目就是一个很好的实例,它利用了Java语言的强大功能和Eclipse集成开发环境(IDE)以及WindowBuilder插件来设计图形用户界面(GUI)。在这里,我们将深入探讨相关知识点。 首先,Java...
JavaCV提供的Pocketsphinx绑定让开发者能在Java应用中实现语音识别功能,适用于如语音命令控制、语音转文本等场景。 5. **跨平台兼容性**: 提到的“javacv-jar”包含了针对Windows 64位、Linux 64位以及Mac OS X ...
7. **版本控制**:在“java课程设计”这样的上下文中,可能还需要学习如何使用版本控制系统,如Git,进行代码版本管理,协同开发和追踪更改历史。 8. **编译与运行**:Java程序需要通过JDK(Java Development Kit)...
"Java调用本地的远程桌面连接"这个话题就是关于如何利用Java编程语言来启动并配置本地的远程桌面连接(RDP,Remote Desktop Protocol)客户端,以便自动连接到指定的目标计算机,并预先填充好用户名和密码。...
WindowBuilder是Eclipse集成开发环境(IDE)中的一个强大工具,专门用于简化Java GUI(图形用户界面)的设计工作。...通过不断学习和实践,你将能够充分利用WindowBuilder来创建出美观、易用的用户界面。
这个"java_splash_window.rar_java -splash_java spla"的资源包,显然是为了帮助开发者学习如何在Java应用中实现这样一个功能。下面我们将深入探讨如何使用Java来创建和管理Splash Screen。 首先,理解`-splash`...
Java JDK 17是Oracle公司推出的Java开发工具集(Java Development Kit)的最新版本,针对Windows 64位操作系统设计。...正确安装并配置JDK 17后,开发者可以充分利用这些特性来创建高效、可靠的Java应用程序。
通过以上步骤,我们不仅能够在Windows环境下搭建起一个功能完善的Git服务器,还可以利用SourceTree这样的图形化客户端来更方便地进行版本控制操作。这种方式特别适用于那些需要对代码进行严格管理而又不想依赖第三方...
- **网络编程**利用Java的Socket和ServerSocket类,可以构建客户端/服务器应用程序,进行TCP/IP通信。此外,Java的URL和URLConnection类提供了访问Web资源的能力。 在深入学习Java的过程中,了解Java虚拟机(JVM)...