【发布时间】:2019-10-06 00:33:46
【问题描述】:
我想阅读命令提示符窗口的文本内容。假设我打开了一个命令提示符,然后运行了 dir 命令,然后运行了 pwd 命令。所以问题陈述是,命令提示符中存在的任何内容我都应该能够阅读它们。我正在尝试使用 Java Native Access 库来实现这一点,但没有得到任何运气。我试过以下代码。但我没有得到任何输出。
import com.sun.jna.Native;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.RECT;
import com.sun.jna.platform.win32.WinUser.WNDENUMPROC;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.platform.win32.WinDef.LPARAM;
import com.sun.jna.platform.win32.WinDef.WPARAM;
public class NativeExtractor {
public static void main(String ar[]) throws InterruptedException {
System.out.println(System.getProperty("sun.arch.data.model"));
executeNativeCommands();
}
public static void executeNativeCommands(){
User32 user32 = User32.INSTANCE;
//HWND notePadHwnd = user32.FindWindowA("Notepad",null );
HWND consoleHwnd = user32.FindWindowA("ConsoleWindowClass",null );
HWND editHwnd = user32.FindWindowExA(consoleHwnd, null, null, null);
byte[] lParamStr = new byte[512];
LRESULT resultBool = user32.SendMessageA(editHwnd, User32.WM_GETTEXT, 512, lParamStr);
System.out.println("The content of the file is : " + Native.toString(lParamStr));
}
interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
int WM_SETTEXT = 0x000c;
int WM_GETTEXT = 0x000D;
int GetWindowTextA(HWND hWnd, byte[] lpString, int nMaxCount);
boolean EnumWindows(WinUser.WNDENUMPROC lpEnumFunc, Pointer arg);
HWND FindWindowA(String lpClassName, String lpWindowName);
HWND FindWindowExA(HWND hwndParent, HWND hwndChildAfter, String lpClassName, String lpWindowName);
LRESULT SendMessageA(HWND paramHWND, int paramInt, WPARAM paramWPARAM, LPARAM paramLPARAM);
LRESULT SendMessageA(HWND editHwnd, int wmGettext, long l, byte[] lParamStr);
int GetClassNameA(HWND hWnd, byte[] lpString, int maxCount);
void EnumChildWindows(HWND hwnd, WNDENUMPROC microsoft_word_document, Object o);
}
}
不过,我可以使用下面的方法阅读记事本的文本。但是对于命令提示符,事情不起作用。请帮我解决这个问题。
public static void executeNativeCommands(){
User32 user32 = User32.INSTANCE;
HWND notePadHwnd = user32.FindWindowA("Notepad",null );
HWND editHwnd = user32.FindWindowExA(notePadHwnd, null, null, null);
byte[] lParamStr = new byte[512];
LRESULT resultBool = user32.SendMessageA(editHwnd, User32.WM_GETTEXT, 512, lParamStr);
System.out.println("The content of the file is : " + Native.toString(lParamStr));
}
【问题讨论】:
标签: java command-prompt jna windows-console