簡體   English   中英

如何從Windows控件的文本框中獲取文本? 我怎么知道這是一個文本框?

[英]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 ++是可見的。 如果目標窗口沒有子窗口,則它不使用標簽或文本框,而是在繪制文本本身,並且您將無法使用GetWindowTextWM_GETTEXT檢索它。

文本可以通過UI Automation (屏幕閱讀器使用的API)公開。 使用UISpy.exe或Inspect.exe查看文本是否可訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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