檢查,看是否項具有零HWND。這對我來說經常出現。
您仍然可以通過將光標移動到元素中間併發送鼠標單擊事件來進行單擊。
您可以基於邊界矩形計算位置。根據您的情況,您可能需要將客戶端轉換爲屏幕座標。
的邊框部分是一樣的東西:
x = left + (right - left)/2
y = top + (bottom - top)/2
要轉換到屏幕COORDS,你將不得不使用它確實有一個hWnd元素,並應用了必要的補償。
編輯
要放置矩形上的光標,我用的PInvoke:
這裏是我使用(C#)的東西:
public static void Click()
{
User32.mouse_event(WindowsConstants.MouseEventLeftDown, 0, 0, 0, IntPtr.Zero);
User32.mouse_event(WindowsConstants.MouseEventLeftUp, 0, 0, 0, IntPtr.Zero);
}
public static void RightClick()
{
User32.mouse_event(WindowsConstants.MouseEventRightDown, 0, 0, 0, IntPtr.Zero);
User32.mouse_event(WindowsConstants.MouseEventRightUp, 0, 0, 0, IntPtr.Zero);
}
public static void DoubleClick()
{
User32.mouse_event(WindowsConstants.MouseEventLeftDown, 0, 0, 0, IntPtr.Zero);
User32.mouse_event(WindowsConstants.MouseEventLeftUp, 0, 0, 0, IntPtr.Zero);
Thread.Sleep(150);
User32.mouse_event(WindowsConstants.MouseEventLeftDown, 0, 0, 0, IntPtr.Zero);
User32.mouse_event(WindowsConstants.MouseEventLeftUp, 0, 0, 0, IntPtr.Zero);
}
public const UInt32 MouseEventLeftDown = 0x0002;
public const UInt32 MouseEventLeftUp = 0x0004;
public const UInt32 MouseEventRightDown = 0x0008;
public const UInt32 MouseEventRightUp = 0x00010;
[DllImport("user32.dll")]
public static extern void mouse_event(UInt32 dwFlags, UInt32 dx, UInt32 dy, UInt32 dwData, IntPtr dwExtraInfo);
出於好奇,什麼是你的UI自動化客戶端在幹嘛我最近正在研究如何在Metro GUI中自動化一些嚮導。 – 2012-08-13 11:30:16
它將模擬像點擊圖像,捕獲/記錄視頻和圖片等使用行爲。在mycase圖像在裏面listitem.any建議@FrerichRaabe – 2012-08-13 11:35:56