[英]How to get text from a windows control's textbox? and how do I know it's a textbox?
我使用spy ++來查找所需Windows控件的正確句柄,該控件屬於不受管理的獨立應用程序。 請注意,spy ++“屬性檢查器”提到此窗口沒有任何子(或父)窗口。
我還設法通過以下代碼獲取了窗口的名稱:
//the invokes are included aswell
const int WM_GETTEXT = 0x000D;
static void Main(string[] args)
{
IntPtr handle = new IntPtr(Convert.ToInt32("00070818", 16));
int nChars = GetWindowTextLength(handle); //win32 function
int length = 200;
StringBuilder sb = new StringBuilder(length);
SendMessage(handle, WM_GETTEXT, length, sb);
Console.WriteLine(sb.ToString());
}
這個窗口除了標題外還有很多信息,這似乎是我回想起的WM_GETTEXT(將length的值更改為200並沒有幫助,反而是一個漫長的嘗試)。
接下來,我嘗試了使用UI自動化的另一種方法:
static void Main(string[] args)
{
AutomationElement target = AutomationElement.FromHandle(handle);
TextPattern textPattern = target.GetCurrentPattern(TextPattern.Pattern) as TextPattern;
}
但是我得到了這個錯誤:
UIAutomationClient.dll中發生了類型為'System.InvalidOperationException'的未處理異常
附加信息:不支持的模式。
最重要的是,我還嘗試使用Microsoft Inspect.exe,但是在UI自動化和MSAA模式下,它都無法專注於窗口中的文本。
這是否意味着使用UI自動化無法實現數據? 還是我應該使用錯誤的方法/類型?
除了使用GetWindowText,WM_GETTEXT或UI自動化之外,還有其他方法可以從此窗口獲取數據嗎?
我對這些東西還很陌生,但是我正在努力學習。 另外,我目前沒有潛在客戶,因此任何有用的評論/答案將不勝感激! 如果您確實要回答, 請務必添加有用的關鍵字,這樣我就可以了解有關您的解決方案的更多信息
標簽(即靜態控件)和文本框是帶有它們自己的句柄的子窗口,因此它們對於Spy ++是可見的。 如果目標窗口沒有子窗口,則它不使用標簽或文本框,而是在繪制文本本身,並且您將無法使用GetWindowText
或WM_GETTEXT
檢索它。
文本可以通過UI Automation (屏幕閱讀器使用的API)公開。 使用UISpy.exe或Inspect.exe查看文本是否可訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.