GetWindowTextA, GetWindowText returns empty value on Edit Control

邮差的信 提交于 2019-12-04 15:33:08

I'm not sure what is causing your problem, but this has worked just fine for me:

byte[] windowText = new byte[512];
User32.INSTANCE.GetWindowTextA(hWnd, windowText, 512);
String wText = Native.toString(windowText).trim();

Edit
You should get the edit text a different way, via

User32.SendMessageA(editHwnd, User32.WM_GETTEXT, paramWPARAM, lParamStr);

e.g.,

import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.LPARAM;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.platform.win32.WinDef.WPARAM;
import com.sun.jna.win32.StdCallLibrary;

public class GetTextInNotePad {
   public static final String NOTEPAD_CLASS = "Notepad";
   public static final String EDIT_CLASS = "Edit";

   interface User32 extends StdCallLibrary {
      User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
      int WM_SETTEXT = 0x000c;
      int WM_GETTEXT = 0x000D;

      HWND FindWindowA(String lpClassName, String lpWindowName);
      HWND FindWindowExA(HWND hwndParent, HWND hwndChildAfter, String lpClassName,
            String lpWindowName);
      LRESULT SendMessageA(HWND paramHWND, int paramInt, WPARAM paramWPARAM, LPARAM paramLPARAM);
      LRESULT SendMessageA(HWND editHwnd, int wmGettext, long l, byte[] lParamStr);
      int GetClassNameA(HWND hWnd, byte[] lpString, int maxCount);
   }

   public static void main(String[] args) {
      User32 user32 = User32.INSTANCE;
      String lpClassName = "Notepad";
      HWND notePadHwnd = user32.FindWindowA(lpClassName , null);
      HWND editHwnd = user32.FindWindowExA(notePadHwnd, null, EDIT_CLASS, null); 
      byte[] lParamStr = new byte[512];
      LRESULT resultBool = user32.SendMessageA(editHwnd, User32.WM_GETTEXT, 512, lParamStr);

      System.out.println("lParamStr: " + Native.toString(lParamStr));
   }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!