2012-09-30 26 views
1

我們有一個應用程序,我需要點擊一個窗格。我試圖使用下面的代碼,我用它來點擊一個按鈕,但它給了不受支持的模式異常。如何使用UI自動化庫單擊「窗格」?

InvokePattern click_pattern = (InvokePattern)adjust_button.GetCurrentPattern(InvokePattern.Pattern); click_pattern.Invoke();

是否有任何其他方式做到這一點?

+0

Adjust_button a Pane?無論如何,哪個控件是一個窗格? –

+0

它基本上是一個窗格,但在應用程序中它用作按鈕(可點擊對象)... – Tejas

回答

2

即使對象是可點擊的,取決於點擊是如何在內部處理的,您可能不一定能夠使用InvokePattern執行單擊。這似乎就是這種情況。

作爲一種替代方法,您可以使用一些代碼將鼠標光標移動到窗格上並使用P/Invoke發出點擊。類似這樣的:

private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002; 
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004; 

[DllImport("user32.dll")] 
private static extern void mouse_event(UInt32 dwFlags, UInt32 dx, UInt32 dy, UInt32 dwData, IntPtr dwExtraInfo); 

... 
... 

AutomationElement paneToClick; 

... 
... 

Cursor.Position = paneToClick.GetClickablePoint(); 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new IntPtr()); 
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new IntPtr()); 
+0

謝謝Chaser324! – Tejas

相關問題