2
JNA를 사용하여 궁극적 인 목표는 수신 컴퓨터에서 Windows 팝업 메시지 창으로 나타나는 Windows NET SEND 또는 MSG.EXE를 사용하여 보낸 메시지를 읽는 것입니다.JNA를 사용하여 창 요소를 반복하는 방법은 무엇입니까?
나는이 특정 메시지 창을 검색하고 아래 코드를 사용하여 hWnd 핸들을 얻을 수 있습니다. 내 문제는 이제 실제 메시지 텍스트를 찾고 메시지를 읽고 OK 단추를 클릭하기 위해이 창의 모든 요소를 반복하는 방법입니다.
필자의 연구에 따르면 FindWindowEx (요소를 통과하는 데 사용)와 PostMessage (확인 버튼 클릭)를 사용해야하지만 작동하도록 고심하고 있습니다.
package democode;
import com.sun.jna.Pointer;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
public class JNA_Main {
// Equivalent JNA mappings
public interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
interface WNDENUMPROC extends StdCallCallback {
boolean callback(Pointer hWnd, Pointer arg);
}
boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer arg);
boolean PostMessage(Pointer hwndParent, String msg, String wParam, String lParam);
Pointer FindWindowEx(Pointer hwndParent, String hwndChildAfter, String lpszClass, String lpszWindow);
int GetWindowTextA(Pointer hWnd, byte[] lpString, int nMaxCount);
}
public static void main(String[] args) {
final User32 user32 = User32.INSTANCE;
user32.EnumWindows(new User32.WNDENUMPROC() {
int count;
public boolean callback(Pointer hWnd, Pointer userData) {
byte[] windowText = new byte[512];
user32.GetWindowTextA(hWnd, windowText, 512);
String wText = Native.toString(windowText);
wText = (wText.isEmpty()) ? "" : "; text: " + wText;
if (wText.contains("My Window Name")){
System.out.println("Found window " + hWnd + ", total " + ++count + wText);
//**************************************************//
//NEED CODE HERE TO ITERATE THROUGH ELEMENTS OF THIS PARTICULAR WINDOW, READ THE MESSAGE TEXT AND CLICK OK BUTTON.
//**************************************************//
}
return true;
}
}, null);
}
}
안녕하세요. 어떻게 달성 할 수 있는지 예를 붙여주세요. 감사 – dale