管理されていないスタンドアロン アプリケーションに属する必要な Windows コントロールの正しいハンドルを見つけるために、spy++ を使用しました。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 で返されるように見えるすべてです (長さの値を 200 に変更しても役に立ちませんでした。いずれにせよ、ロング ショットでした)。
次に、UI オートメーションを使用して別のアプローチを試みました。
static void Main(string[] args)
{
AutomationElement target = AutomationElement.FromHandle(handle);
TextPattern textPattern = target.GetCurrentPattern(TextPattern.Pattern) as TextPattern;
}
しかし、私はこのエラーを返しました:
タイプ 'System.InvalidOperationException' の未処理の例外が UIAutomationClient.dll で発生しました
追加情報: サポートされていないパターン。
さらに、Microsoft Inspect.exe も使用してみましたが、UI オートメーションと MSAA モードの両方で、ウィンドウ内のテキストにフォーカスできませんでした。
UI Automationでデータを取得できないということですか?? または、間違ったメソッド/タイプを使用する必要がありますか?
GetWindowText、WM_GETTEXT、または UI オートメーションを使用する以外に、このウィンドウからデータを取得する別の方法はありますか??
私はこのようなことにはかなり慣れていませんが、学ぶために最善を尽くしています。さらに、私は現在リードを持っていないので、役立つコメント/回答は大歓迎です!! 回答する場合は、役立つキーワードを必ず含めてください。そうすれば、あなたのソリューションについて詳しく知ることができます