2011-08-12 7 views
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); 
    } 
} 

답변

2

MSDN을 통한 논리적 선택은 위의 콜백 메서드에서받은 hWnd 포인터를 사용하여 EnumChildWindows를 호출하는 것입니다.

+0

안녕하세요. 어떻게 달성 할 수 있는지 예를 붙여주세요. 감사 – dale

관련 문제