Como obter a lista de todos os identificadores de janela em Java (usando JNA
Eu sou novato para JNA. Estou tentando obter identificadores para todas as janelas, incluindo os minimizados. Eu precisoHWND
de todas as janelas. Eu já fiz a pergunta Windows: como obter uma lista de todas as janelas visívei o que me ajudou a obter a lista de janelas, mas temhWnd
digite como int. Não posso usá-lo comcom.sun.jna.platform.win32.User32
funções que solicitamhWnd
do tipocom.sun.jna.platform.win32.WinDef.HWND
. Então, existe alguma maneira de obter todos os identificadores de janela do tipocom.sun.jna.platform.win32.WinDef.HWND
em vez de int ponteiro? Finalmente, por que a diferençaint
eHWND
? Como aceita os dois? Estou um pouco confuso. Obrigado
Tenho o seguinte código (editado a partir da resposta da Hovercreft):
import com.sun.jna.Native;
import com.sun.jna.Pointer;
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;
public class TryWithHWND {
public static void main(String[] args) {
final User32 user32 = User32.INSTANCE;
user32.EnumWindows(new WNDENUMPROC() {
int count = 0;
public boolean callback(HWND hWnd, Pointer arg1) {
char[] windowText = new char[512];
user32.GetWindowText(hWnd, windowText, 512);
String wText = Native.toString(windowText);
RECT rectangle = new RECT();
user32.GetWindowRect(hWnd, rectangle);
// get rid of this if block if you want all windows regardless
// of whether
// or not they have text
// second condition is for visible and non minimised windows
if (wText.isEmpty() || !(User32.INSTANCE.IsWindowVisible(hWnd)
&& rectangle.left > -32000)) {
return true;
}
System.out.println("Found window with text " + hWnd
+ ", total " + ++count + " Text: " + wText);
return true;
}
}, null);
}
}
Tentei usar apenas (não interface personalizada) o padrãoUser32
classe. Está funcionando bem. Eu tenho dúvida, por que estamos usando uma interface definida pelo usuário em vez de uma já existente? Mais uma coisa, sempre há diferença entre a assinatura do método definido pelo usuário e as já existentes. Por exemplo, a variávelwindowText
échar[]
, enquanto a variável do Hovercraft é do tipobyte[]
. Alguém pode me explicar? Obrigado