我有一個程式在我的 PC 上運行,它通過 TeamViewer 控制另一臺機器。除了發送滑鼠點擊需要 TeamViewer 位于前臺之外,這一切都很好。我有將滑鼠點擊發送到記事本等程式的代碼,其中編輯面板稱為“編輯”。但是 TeamViewer 面板被呼叫TV_REMOTEDESKTOP_CLASS并且FindWindowEx無法找到它的句柄。
這是我的代碼:
IntPtr handle = WinGetHandle("axie_machine");
if (handle != IntPtr.Zero)
{
var panel = FindWindowEx(handle, IntPtr.Zero, "TV_REMOTEDESKTOP_CLASS", null);
PerformRightClick(panel, new Point(200, 200));
}
這是 Spy 的影像,顯??示了面板的詳細資訊

FindWindowEx 回傳 0x000000。
誰能看到我做錯了什么FindWindowEx并指出正確的方向?
uj5u.com熱心網友回復:
假設WinGetHandle("axie_machine"),您使用(部分)其標題獲得 TeamViewer 視窗的句柄,那么,您實際上獲得了頂級視窗的句柄,您的目標視窗的類為“TV_REMOTEDESKTOP_CLASS”不是一個孩子的。它是它的后代之一,但不是直系孩子。如您在此處看到的,兩者之間有一個父視窗:

因此,更改您的代碼以獲取目標“面板”的父視窗,然后使用它來到達目標。代碼應如下所示:
IntPtr tvWindowHandle = WinGetHandle("axie_machine");
if (tvWindowHandle != IntPtr.Zero)
{
var panelParent = FindWindowEx(tvWindowHandle, IntPtr.Zero, "ATL:03B8D350", null);
if (panelParent != IntPtr.Zero)
{
var panel = FindWindowEx(panelParent, IntPtr.Zero, "TV_REMOTEDESKTOP_CLASS", null);
PerformRightClick(panel, new Point(200, 200));
}
}
注意:您可能需要仔細檢查父視窗的類。在我的電視版本中是“ATL:03B8D350”,但如果您使用其他版本,它可能會有所不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/419189.html
標籤:
上一篇:當我在測驗中設定IMediatorMock時回傳null
下一篇:看起來建構式沒有
