Когда я получу HWND из Win32 DLL, могу ли я получить координаты собственного окна (даже когда оно перемещается) - PullRequest
0 голосов
/ 06 апреля 2011

Благодаря экспертам, которые следят за этим форумом, этот Java-программист может успешно получить HWND (дескриптор собственного окна на рабочем столе) через JNI. Моя цель - получить координаты окна (x, y) этого собственного окна для работы над проектом совместного использования экрана. В вызывающей java-программе мне понадобятся «координаты», даже если окно перемещено пользователем (координаты меняются ...).

Мой вопрос к вам: даст ли этот дескриптор мне динамические значения координат (которые изменились при перемещении окна), или мне нужно будет продолжать вызывать нативный dll, чтобы посмотреть, изменились ли значения? Я надеюсь, что я могу просто вызвать нативную процедуру «один раз», и дескриптор окна может дать мне динамические значения. Если мне придется продолжать вызывать нативную процедуру, я мог бы также передать координаты (Point from GetRect .. ()), а не HWND?

Ответы [ 2 ]

0 голосов
/ 05 января 2013

Я считаю, что Windows API GetWindowRect () делает именно это

0 голосов
/ 30 июля 2011

Вы можете попробовать 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...