簡體   English   中英

從Win32 DLL獲得HWND之后,是否可以獲取本機窗口的坐標(即使窗口移動了)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM