【发布时间】:2015-11-14 04:52:05
【问题描述】:
我有很多同名的窗口,例如计算器。
User32Extra.INSTANCE.FindWindow(null,"Calculator")
上面的脚本给了我找到的第一个计算器的 HWND。
我已使用 EnumWindows 查找所有 HWND。
final HashMap<HWND,String> hm=new HashMap<HWND,String>();
User32.INSTANCE.EnumWindows(new User32.WNDENUMPROC() {
@Override
public boolean callback(Pointer hWnd, Pointer arg) {
HWND hWnd2 = new HWND(hWnd);
byte[] windowText = new byte[512];
User32.INSTANCE.GetWindowTextA(hWnd, windowText, 512);
String wText = Native.toString(windowText).trim();
if (!wText.isEmpty() && User32.INSTANCE.IsWindowVisible(hWnd2) && wText.equals("Calculator")) {
hm.put(hWnd2,wText);
}
return true;
}
}, null);
for(HWND hwnd:hm.keySet()){
System.out.println(hwnd.toString());
}
上面的脚本给出的输出为
native@0x20816
native@0x50362
native@0x1206ae
我无法在另一个程序中访问此 HashMap。我只知道 HWND 的字符串值。
是否可以将native@0x20816 String 转换为 HWND?
如果是这样,我该怎么做?请帮忙..
【问题讨论】:
-
你为什么首先将指针转换为字符串?停止这样做,您将不需要将文本解析回指针。
-
我将此字符串发送到未定义指针或 hwnd 类的 flex 应用程序。我必须从 actionscript 调用 Java 中的函数才能在 hwnd 上执行一些操作。
-
所以您正在尝试为 actionscript 提供可以引用本机窗口的唯一(字符串)键?
-
是(用于唯一识别窗口)