Вы можете попробовать GetWindowLong () (с GWL_WNDPROC (-4)) из вашей библиотеки JNI, что позволит вам перенаправить другой адрес WndProc () в ваше приложение и перехватывать каждое сообщение, отправленное в окно, и затем отслеживать важные изменения. Я делал это в родных приложениях C ++ для Win32, но никогда в Java. Это может работать, хотя.
oldAddress = GetWindowLong( hwnd, GWL_WNDPROC );
SetWindowLong( hwnd, GWL_WNDPROC, myWndProc );
И изнутри вашего WndProc () используйте:
CallWindowProc( oldAddress, hwnd, msg, wparam, lparam );
Вы можете проверить IsValidWindow (hwnd), чтобы убедиться, что окно все еще находится в области видимости. Когда ваша программа выйдет, убедитесь, что вы позвонили:
SetWindowLong( hwnd, GWL_WNDPROC, oldAddress );