[英]In Java Swing how do you get a Win32 window handle (hwnd) reference to a window?
[英]Once I have the HWND from a Win32 DLL, can I get the coordinates of the native window (even when the window moves )
感謝監視此論壇的專家,這位Java程序員可以通過JNI成功獲取HWND(處理到桌面上的本機窗口)。 我的目標是獲取此本機窗口的窗口坐標(x,y)以在屏幕共享項目上工作。 在調用Java程序中,即使窗口由用戶移動(坐標更改...),我也需要“協調”。
我對您的問題是,此句柄是否會給我協調對象的動態值(在移動窗口時已更改),還是需要繼續調用本機dll以查看值是否已更改? 我希望我可以僅將本機過程稱為“一次”,並且窗口句柄可以為我提供動態值。 如果必須繼續調用本機過程,則最好傳遞坐標(GetRect ..()中的Point),而不要傳遞HWND?
我相信Windows API GetWindowRect()確實可以做到這一點
您可以在JNI DLL中嘗試GetWindowLong()(帶有GWL_WNDPROC(-4)),這將允許您將其他WndProc()地址重定向到您的應用,並攔截發送到窗口的所有消息,然后監視重要的變化。 我已經在Win32本機C ++應用程序中做到了這一點,但從未在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 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.