如何从 String 获取 HWND?
How can I get HWND from String?
我有很多同名的 windows,例如计算器。
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
字符串转换为 HWND?
如果可以,我该怎么做?请帮忙..
如果您完全在这个 Java 程序中编码,那么将 window 句柄转换为文本表示是没有意义的。只需直接使用 HWND
值即可。
如果实际上问题是您将文本发送给其他方,并且需要获取 window 句柄的数值,那么只需将文本转换为数值即可。我认为在文本前加上 native@
没有什么意义,十六进制前缀 0x
可能也是多余的。双方可以简单地同意该值将始终以十六进制形式传递。据推测,您对 Java 和所涉及的其他编程语言了解得足够多,能够在数值和十六进制文本之间进行转换。
String hwndString = "native@0xa021c";
HWND temp = new HWND();
temp.setPointer(new Pointer(Long.decode(hwndString.substring(7))));
if(User32.INSTANCE.IsWindow(temp)){
//This is a valid window
}
else{
// Invalid Window
}
我有很多同名的 windows,例如计算器。
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
字符串转换为 HWND?
如果可以,我该怎么做?请帮忙..
如果您完全在这个 Java 程序中编码,那么将 window 句柄转换为文本表示是没有意义的。只需直接使用 HWND
值即可。
如果实际上问题是您将文本发送给其他方,并且需要获取 window 句柄的数值,那么只需将文本转换为数值即可。我认为在文本前加上 native@
没有什么意义,十六进制前缀 0x
可能也是多余的。双方可以简单地同意该值将始终以十六进制形式传递。据推测,您对 Java 和所涉及的其他编程语言了解得足够多,能够在数值和十六进制文本之间进行转换。
String hwndString = "native@0xa021c";
HWND temp = new HWND();
temp.setPointer(new Pointer(Long.decode(hwndString.substring(7))));
if(User32.INSTANCE.IsWindow(temp)){
//This is a valid window
}
else{
// Invalid Window
}