あなたは要素を取得するために掲載のコードは、私が点検からあなたのスクリーンショットで見ることができるものから正しいです。テキストのエンコーディングが原因で、UIオートメーションが名前を取得していないと感じています。ソースへのアクセス権がなく、取得方法がわからない場合や、ラベルのテキストを設定する場合は、UIオートメーションを使用してテキストを取得することはできません。
あなたが持っているコードを使用して、win32 APIを使ってウィンドウをネイティブウィンドウハンドルで使用してテキストを取得することができます。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [Out] StringBuilder lParam);
public static string GetWindowTextRaw(IntPtr hwnd)
{
// Allocate correct string length first
int length = (int)SendMessage(hwnd, WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero);
StringBuilder sb = new StringBuilder(length + 1);
SendMessage(hwnd, WM_GETTEXT, (IntPtr)sb.Capacity, sb);
return sb.ToString();
}
public static void YourMethod()
{
var desktop = AutomationElement.RootElement;
var process = Process.Start("Path/To/Your/Process.exe");
var condition = new PropertyCondition(AutomationElement.ProcessId, process.Id);
var window = desktop.FindFirst(System.Windows.Automation.TreeScope.Children, condition);
var windowTitle = GetWindowTextRaw(window.NativeWindowHandle)
}
出典:
GetWindowText
SendMessage
は非常にあなたの答えをありがとうございましたが、これは答えではありません。私はそれがパネルコントロールであることを見つける "スパイ+ +"を使用して、ただ1つのパネルハンドルがあります。 DrawStringメソッドの ".Net System.Drawing"ネームスペースによって、ラベルテキストをペイントする必要があります –