Java 获取windows系统 窗口句柄

时间: 2023-09-12 20:03:38 浏览: 209
可以使用Java的JNA库来获取Windows系统窗口句柄。以下是获取当前活动窗口句柄的示例代码: ```java import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinUser; public class WindowHandle { public static void main(String[] args) { HWND hwnd = User32.INSTANCE.GetForegroundWindow(); System.out.println("Window handle: " + hwnd.getPointer()); } } interface User32 extends WinUser { User32 INSTANCE = Native.load("user32", User32.class); HWND GetForegroundWindow(); } ``` 该代码利用了JNA库提供的`User32`接口,调用了`GetForegroundWindow()`方法来获取当前活动窗口的句柄。如果需要获取其他窗口的句柄,可以使用`FindWindow()`或`FindWindowEx()`方法。
相关问题

Java Swing窗体获取句柄

在 Java Swing 中,可以通过 `JFrame` 或 `JDialog` 等顶级容器来获取窗体句柄。窗体句柄是一个整数值,用于唯一标识一个窗体。在 Windows 操作系统中,窗体句柄是一个 32 位的整数值,可以通过调用 Windows API 来获取。 在 Java 中,可以通过 `java.awt.Window` 类的 `getPeer()` 方法来获取窗体的对等体(peer)。对于 `JFrame` 或 `JDialog` 等顶级容器来说,它们的对等体是一个 `java.awt.peer.WindowPeer` 对象。通过 `WindowPeer` 对象,可以调用 `getHWnd()` 方法来获取窗体句柄。 以下是一个示例代码,演示如何获取一个 `JFrame` 对象的窗体句柄: ```java import javax.swing.JFrame; import java.awt.Window; import java.awt.peer.WindowPeer; public class WindowHandleDemo { public static void main(String[] args) { // 创建一个 JFrame 对象 JFrame frame = new JFrame("My Frame"); frame.setSize(300, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); // 获取 JFrame 对象的对等体 Window window = (Window)frame; WindowPeer peer = window.getPeer(); // 获取窗体句柄 long hwnd = peer.getHWnd(); System.out.println("Window handle: " + hwnd); } } ``` 上述代码创建了一个 `JFrame` 对象,并在屏幕中央显示。然后获取该 `JFrame` 对象的对等体,并调用 `getHWnd()` 方法获取窗体句柄。最后在控制台中输出窗体句柄。在 Windows 操作系统中,应该会输出一个类似于 `0x12345678` 的整数值。

java获取windows11应用窗口标题

在Windows 11系统中,应用窗口的标题格式为“应用名称 - 窗口标题”,因此可以通过遍历所有系统进程,查找指定应用的进程ID,然后获取该进程的主窗口句柄,最后调用Windows API获取窗口标题的方式来实现获取Windows 11应用窗口标题的功能。 具体实现步骤如下: 1. 获取指定应用的进程ID。可以使用Java的ProcessBuilder类执行命令行获取所有正在运行的进程列表,然后遍历列表查找指定应用的进程ID,例如: ```java public static int getProcessIdByName(String processName) throws IOException { Process process = Runtime.getRuntime().exec("tasklist"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { if (line.contains(processName)) { String[] parts = line.split("\\s+"); return Integer.parseInt(parts[1]); } } return -1; } ``` 2. 调用Windows API获取窗口标题。可以使用Java的JNI技术调用Windows API获取指定进程的主窗口句柄,然后调用GetWindowText API获取窗口标题,具体实现可参考以下C++代码: ```c++ #include <windows.h> #include <jni.h> JNIEXPORT jstring JNICALL Java_WindowTitleGetter_getWindowTitle(JNIEnv *env, jclass cls, jint pid) { HWND hwnd = NULL; char title[1024]; // 获取指定进程的窗口句柄 hwnd = GetTopWindow(NULL); while (hwnd != NULL) { DWORD processId; GetWindowThreadProcessId(hwnd, &processId); if (processId == pid) { DWORD style = GetWindowLong(hwnd, GWL_STYLE); if ((style & WS_VISIBLE) != 0) { break; } } hwnd = GetNextWindow(hwnd, GW_HWNDNEXT); } // 获取窗口标题 if (hwnd != NULL) { GetWindowTextA(hwnd, title, sizeof(title)); return env->NewStringUTF(title); } else { return env->NewStringUTF(""); } } ``` 3. 在Java中调用getWindowTitle方法即可获取指定应用的窗口标题,例如: ```java String processName = "notepad.exe"; int pid = getProcessIdByName(processName); String title = WindowTitleGetter.getWindowTitle(pid); System.out.println(title); ``` 注意:该方法需要使用管理员权限运行程序。

相关推荐

要根据Windows应用程序名称或进程PID获取应用程序窗口标题,您可以使用Java的JNA(Java Native Access)库。JNA允许Java程序直接调用本地代码,因此您可以使用Windows API函数获取窗口标题。 以下是一个示例代码,它演示如何使用JNA库调用Windows API函数获取窗口标题: import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WinDef; import com.sun.jna.platform.win32.WinUser; public class WindowTitleGetter { public static void main(String[] args) { // 根据应用程序名称获取窗口标题 String appName = "notepad.exe"; String windowTitle = getWindowTitleByAppName(appName); System.out.println("Window title of " + appName + ": " + windowTitle); // 根据进程PID获取窗口标题 int pid = 1234; windowTitle = getWindowTitleByProcessId(pid); System.out.println("Window title of process " + pid + ": " + windowTitle); } private static String getWindowTitleByAppName(String appName) { final User32 user32 = User32.INSTANCE; WinDef.HWND hwnd = user32.FindWindow(null, appName); if (hwnd == null) { return null; } char[] buffer = new char[1024]; user32.GetWindowText(hwnd, buffer, buffer.length); return Native.toString(buffer); } private static String getWindowTitleByProcessId(int pid) { final User32 user32 = User32.INSTANCE; final WinDef.HWND[] hwnd = {null}; user32.EnumWindows(new WinUser.WNDENUMPROC() { public boolean callback(WinDef.HWND hWnd, Pointer arg1) { int[] pidArray = {0}; User32.INSTANCE.GetWindowThreadProcessId(hWnd, pidArray); if (pidArray[0] == pid) { hwnd[0] = hWnd; return false; } return true; } }, null); if (hwnd[0] == null) { return null; } char[] buffer = new char[1024]; user32.GetWindowText(hwnd[0], buffer, buffer.length); return Native.toString(buffer); } } 在上面的示例中,getWindowTitleByAppName方法使用FindWindow函数根据应用程序名称查找窗口句柄,然后使用GetWindowText函数获取窗口标题。getWindowTitleByProcessId方法使用EnumWindows函数枚举所有窗口,找到与指定PID对应的窗口句柄,然后使用GetWindowText函数获取窗口标题。
要获取任务栏打开的程序并将其顶置,可以使用Java的AWT和JNI(Java Native Interface)技术。 下面是一个简单的示例代码,可以实现获取任务栏打开的程序并将其顶置: java import java.awt.*; public class SetTopTaskbarWindow { public static void main(String[] args) { String windowTitle = "MyWindow"; // 要顶置的窗口标题 int hwnd = findWindow(windowTitle); // 获取窗口句柄 setWindowTop(hwnd); // 将窗口设置为顶置窗口 } // 查找窗口句柄 private static int findWindow(String windowTitle) { int hwnd = 0; hwnd = User32.INSTANCE.FindWindow(null, windowTitle); return hwnd; } // 将窗口设置为顶置窗口 private static void setWindowTop(int hwnd) { User32.INSTANCE.SetForegroundWindow(hwnd); } // 获取任务栏打开的程序并将其顶置 private static void setTopTaskbarWindow() { User32.INSTANCE.SetForegroundWindow(User32.INSTANCE.FindWindow("Shell_TrayWnd", null)); User32.INSTANCE.SetForegroundWindow(User32.INSTANCE.FindWindowEx(0, 0, "Button", null)); } } // 使用JNI调用Windows API interface User32 extends W32APIOptions { User32 INSTANCE = Native.load("user32", User32.class, DEFAULT_OPTIONS); boolean SetForegroundWindow(int hwnd); int FindWindow(String lpClassName, String lpWindowName); int FindWindowEx(int parent, int child, String className, String windowName); } 需要注意的是,这段代码只能在Windows操作系统上运行,因为它使用了Windows API。如果要在其他操作系统上运行,需要使用相应的API。 setTopTaskbarWindow()方法中,首先将任务栏(Shell_TrayWnd)窗口设置为顶置窗口,然后将任务栏上的第一个按钮(Button)设置为顶置窗口,这样就可以获取任务栏打开的程序并将其顶置。
可以使用Java的Robot类和AWT的Window类来将正在运行的谷歌浏览器顶置。 具体步骤如下: 1.获取正在运行的谷歌浏览器的窗口句柄。 java String browserTitle = "Google Chrome"; long hwnd = 0; WinDef.HWND hwndFound = User32.INSTANCE.FindWindow(null, browserTitle); if (hwndFound != null) { hwnd = Pointer.nativeValue(hwndFound.getPointer()); } 2.将谷歌浏览器窗口设置为顶置。 java if (hwnd != 0) { User32.INSTANCE.SetForegroundWindow(new WinDef.HWND(Pointer.createConstant(hwnd))); } 完整代码如下: java import com.sun.jna.Pointer; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WinDef; import java.awt.Robot; import java.awt.event.KeyEvent; public class ChromeWindowTopper { public static void main(String[] args) throws Exception { // 获取正在运行的谷歌浏览器的窗口句柄 String browserTitle = "Google Chrome"; long hwnd = 0; WinDef.HWND hwndFound = User32.INSTANCE.FindWindow(null, browserTitle); if (hwndFound != null) { hwnd = Pointer.nativeValue(hwndFound.getPointer()); } // 将谷歌浏览器窗口设置为顶置 if (hwnd != 0) { User32.INSTANCE.SetForegroundWindow(new WinDef.HWND(Pointer.createConstant(hwnd))); } // 模拟按下Alt+Tab键,切换到下一个窗口 Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_ALT); robot.keyPress(KeyEvent.VK_TAB); robot.keyRelease(KeyEvent.VK_TAB); robot.keyRelease(KeyEvent.VK_ALT); } } 上述代码使用了JNA库来操作Windows API,需要在项目中引入jna-5.6.0.jar和jna-platform-5.6.0.jar两个库。
以下是一个基于Java的脚本,可以读取指定路径下的txt文件,并将其逐行发送给QQ好友。请注意,这个脚本需要使用QQ的Java API,以便发送消息。 java import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WinDef; public class QQSender { public static void main(String[] args) { String qqWindowName = "QQ"; // QQ窗口的标题 String txtFilePath = "C:/text.txt"; // 要发送的txt文件路径 ArrayList<String> messages = readTextFile(txtFilePath); // 读取txt文件内容 Pointer qqWindow = getWindowPointer(qqWindowName); // 获取QQ窗口句柄 sendMessages(qqWindow, messages); // 发送消息 } // 读取txt文件内容到ArrayList private static ArrayList<String> readTextFile(String filePath) { ArrayList<String> messages = new ArrayList<String>(); try { BufferedReader reader = new BufferedReader(new FileReader(new File(filePath))); String line; while ((line = reader.readLine()) != null) { messages.add(line); } reader.close(); } catch (Exception e) { e.printStackTrace(); } return messages; } // 获取窗口句柄 private static Pointer getWindowPointer(String windowName) { WinDef.HWND hwnd = User32.INSTANCE.FindWindow(null, windowName); return hwnd.getPointer(); } // 发送消息 private static void sendMessages(Pointer qqWindow, ArrayList<String> messages) { for (String message : messages) { // 将消息内容和回车键组合成字符串 String msg = message + "\n"; // 将字符串转换为char数组 char[] chars = msg.toCharArray(); // 循环发送每个字符 for (char c : chars) { User32.INSTANCE.SendMessage(qqWindow, User32.WM_CHAR, new WinDef.WPARAM(c), null); } } } } 请注意,这个脚本需要使用JNA库,以便访问Windows API。您需要将以下依赖项添加到您的项目中: xml <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.7.0</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>5.7.0</version> </dependency> 此外,您需要下载QQ的Java API并将其添加到您的项目中。您可以在以下链接中找到它: https://github.com/tuling123/funChat/tree/master/lib 请注意,由于QQ的Java API是第三方开发的,因此使用它可能会有一些风险。如果您的QQ帐户因此受到损害,我们概不负责。
JNA(Java Native Access)是一个开源的Java库,它提供了一种简单的方式来访问本地操作系统的API。使用JNA,我们可以轻松地调用Windows API函数来操作窗口。以下是一些常用的JNA窗口操作API: 1. User32.dll User32.dll是Windows API中用于用户界面操作的动态链接库,我们可以使用JNA来调用其中的函数。以下是一些常用的User32.dll函数: - FindWindow:查找窗口句柄。 - SetForegroundWindow:将指定窗口置于最前面。 - GetWindowText:获取窗口标题。 - ShowWindow:显示或隐藏指定窗口。 - SendMessage:向指定窗口发送消息。 以下是一个示例代码,演示如何使用JNA调用User32.dll中的函数: import com.sun.jna.Native; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WinDef; public class Main { public static void main(String[] args) { // 查找窗口句柄 WinDef.HWND hwnd = User32.INSTANCE.FindWindow(null, "窗口标题"); // 将窗口置于最前面 User32.INSTANCE.SetForegroundWindow(hwnd); // 获取窗口标题 byte[] title = new byte[1024]; User32.INSTANCE.GetWindowText(hwnd, title, 1024); System.out.println("窗口标题:" + Native.toString(title)); // 隐藏窗口 User32.INSTANCE.ShowWindow(hwnd, User32.SW_HIDE); // 发送消息给窗口 User32.INSTANCE.SendMessage(hwnd, User32.WM_CLOSE, null, null); } } 2. Kernel32.dll Kernel32.dll是Windows API中用于操作系统核心功能的动态链接库,我们可以使用JNA来调用其中的函数。以下是一些常用的Kernel32.dll函数: - GetCurrentThreadId:获取当前线程ID。 - GetCurrentProcessId:获取当前进程ID。 - GetSystemMetrics:获取系统指定参数的信息。 以下是一个示例代码,演示如何使用JNA调用Kernel32.dll中的函数: import com.sun.jna.Native; import com.sun.jna.platform.win32.Kernel32; public class Main { public static void main(String[] args) { // 获取当前线程ID int threadId = Kernel32.INSTANCE.GetCurrentThreadId(); System.out.println("当前线程ID:" + threadId); // 获取当前进程ID int processId = Kernel32.INSTANCE.GetCurrentProcessId(); System.out.println("当前进程ID:" + processId); // 获取屏幕分辨率 int screenWidth = Kernel32.INSTANCE.GetSystemMetrics(Kernel32.SM_CXSCREEN); int screenHeight = Kernel32.INSTANCE.GetSystemMetrics(Kernel32.SM_CYSCREEN); System.out.println("屏幕分辨率:" + screenWidth + "x" + screenHeight); } } 以上是一些常用的JNA窗口操作API,你可以根据实际需求选择合适的函数来操作窗口。
如果你在使用 Window 和 WindowPeer 类时出现了错误,可能是因为这些类在较新的 Java 版本中已经被废弃了。在 Java 9 中,Window 和 WindowPeer 类已经被标记为过时,并建议使用其他替代方案。 如果你需要获取窗体句柄,可以考虑使用 JNI(Java Native Interface)来调用本地方法。JNI 可以让 Java 代码调用本地 C/C++ 代码,从而访问操作系统底层的资源和功能,包括窗体句柄。 以下是一个简单的示例代码,演示如何使用 JNI 来获取窗体句柄: 1. 首先需要编写一个 C++ 函数,用于获取窗体句柄。下面是一个简单的实现,仅适用于 Windows 操作系统: c++ #include <jni.h> #include <Windows.h> JNIEXPORT jlong JNICALL Java_WindowHandleDemo_getWindowHandle(JNIEnv* env, jobject obj, jobject jframe) { HWND hwnd = (HWND)env->GetLongField(jframe, env->GetFieldID(env->GetObjectClass(jframe), "hwnd", "J")); return (jlong)hwnd; } 2. 然后需要编写一个 Java 类,使用 native 关键字声明一个本地方法,并定义该方法的签名: java public class WindowHandleDemo { // 声明本地方法 public static native long getWindowHandle(JFrame frame); // 加载本地库 static { System.loadLibrary("WindowHandle"); } } 3. 编译 C++ 代码,生成一个动态链接库(DLL)文件。这个库的名称应该与上面的 System.loadLibrary() 方法中的参数相同。在 Windows 中,可以使用 Visual Studio 或 MinGW 等工具来编译生成 DLL 文件。 4. 在 Java 代码中调用本地方法,获取窗体句柄: java import javax.swing.JFrame; public class Main { public static void main(String[] args) { JFrame frame = new JFrame("My Frame"); frame.setSize(300, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); long hwnd = WindowHandleDemo.getWindowHandle(frame); System.out.println("Window handle: " + hwnd); } } 上述代码中,调用了 WindowHandleDemo.getWindowHandle() 方法来获取窗体句柄。这个方法会调用本地函数 getWindowHandle(),并将 JFrame 对象作为参数传递给它。在本地函数中,可以通过 HWND 类型来获取窗体句柄,并将其转换为 jlong 类型,最终返回给 Java 代码。 需要注意的是,使用 JNI 调用本地函数需要一定的 C/C++ 编程经验,同时也需要考虑到跨平台的问题。如果你不熟悉 JNI 或 C/C++ 编程,建议使用其他方式来达到你的目的。
1. 什么是Selenium? Selenium是一个自动化测试工具,用于模拟用户在Web应用程序中的行为。它支持多种编程语言,包括Java、Python和C#等,并提供了一组API,用于与浏览器进行交互和执行测试脚本。 2. Selenium的优势是什么? Selenium具有以下优势: - 跨平台支持:可以在不同的操作系统上运行,如Windows、Mac和Linux等。 - 多浏览器支持:可以与多种主流浏览器(如Chrome、Firefox和Safari)进行集成测试。 - 强大的定位机制:可以通过元素ID、类名、CSS选择器和XPath等方式准确定位网页元素。 - 自动化能力:可以模拟用户操作,如点击、输入文本和提交表单等。 - 灵活性:可以与其他测试框架(如TestNG和JUnit)结合使用,实现更加灵活的测试。 3. Selenium中常用的浏览器驱动有哪些? Selenium支持多种浏览器驱动,常用的包括: - ChromeDriver:用于与Chrome浏览器进行集成测试。 - GeckoDriver:用于与Firefox浏览器进行集成测试。 - SafariDriver:用于与Safari浏览器进行集成测试。 - EdgeDriver:用于与Microsoft Edge浏览器进行集成测试。 你可以根据自己的需要选择合适的浏览器驱动。 4. Selenium中的等待方法有哪些?它们的作用是什么? Selenium提供了多种等待方法,用于在特定条件满足时等待页面元素的出现、消失或可交互。常见的等待方法包括: - Implicit Wait(隐式等待):在查找元素时等待一段固定的时间。 - Explicit Wait(显式等待):在特定条件满足时等待一段时间,直到超时时间达到。 - Fluent Wait(流畅等待):在特定条件满足时等待一段时间,直到超时时间达到,可以定义不同的等待策略。 这些等待方法可以提高测试的稳定性和可靠性,确保在执行下一步操作之前页面已经加载完毕或元素已经可见。 5. Selenium中如何处理弹出窗口和多个窗口切换? Selenium提供了switchTo()方法来处理弹出窗口和多个窗口切换。具体步骤如下: - 使用driver.getWindowHandles()获取当前打开的所有窗口句柄。 - 使用driver.switchTo().window()方法切换到目标窗口,传入目标窗口的句柄作为参数。 - 在新窗口中执行操作,完成后可以使用driver.close()关闭当前窗口,然后再切换回原始窗口。 通过这种方式,可以在多个窗口之间进行切换,并在各个窗口中执行相应的操作。 这些是关于Selenium的一些常见问题,希望能够帮助到你。如果你有其他问题,可以继续提问。

最新推荐

炼就HR顶尖高手y240221.pptx

炼就HR顶尖高手y240221.pptx

2023-04-06-项目笔记 - 第三十八阶段 - 4.4.2.36全局变量的作用域-36 -2024.02.09

2023-04-06-项目笔记-第三十八阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.36全局变量的作用域_36 - 2024-02-09

0343、嵌入式POL DC/DC转换器设计.rar

全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest)学习资料,试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考

【手写数字识别】基于matlab BP神经网络手写数字识别【含Matlab源码 3133期】.mp4

CSDN佛怒唐莲上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

mysql字符集与比对方法collation

sql

定制linux内核(linux2.6.32)汇编.pdf

定制linux内核(linux2.6.32)汇编.pdf

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

图像处理进阶:基于角点的特征匹配

# 1. 图像处理简介 ## 1.1 图像处理概述 图像处理是指利用计算机对图像进行获取、存储、传输、显示和图像信息的自动化获取和处理技术。图像处理的主要任务包括图像采集、图像预处理、图像增强、图像复原、图像压缩、图像分割、目标识别与提取等。 ## 1.2 图像处理的应用领域 图像处理广泛应用于医学影像诊断、遥感图像处理、安检领域、工业自动化、计算机视觉、数字图书馆、人脸识别、动作捕捉等多个领域。 ## 1.3 图像处理的基本原理 图像处理的基本原理包括数字图像的表示方式、基本的图像处理操作(如灰度变换、空间滤波、频域滤波)、图像分割、特征提取和特征匹配等。图像处理涉及到信号与系统、数字

Cannot resolve class android.support.constraint.ConstraintLayout

如果您在Android Studio中遇到`Cannot resolve class android.support.constraint.ConstraintLayout`的错误,请尝试以下解决方案: 1. 确认您的项目中是否添加了ConstraintLayout库依赖。如果没有,请在您的build.gradle文件中添加以下依赖: ```groovy dependencies { implementation 'com.android.support.constraint:constraint-layout:<version>' } ``` 其中`<version>`为您想要

Solaris常用命令_多路径配置.doc

Solaris常用命令_多路径配置.doc