3

以下を使用してオートメーション要素を取得しようとしています:

var automationElement = AutomationElement.FromPoint(location);

そして、私はエラーが発生しています。

COM 例外が処理されませんでした: アプリケーションが入力同期呼び出しをディスパッチしているため、発信呼び出しを行うことができません。(Exception from HRESULT: 0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))

誰でもこれで私を助けてくれますか.....

4

2 に答える 2

6

ほとんどの場合、スレッドの問題です。プログラムが独自のユーザー インターフェイスで要素を見つけようとしている場合は、別のスレッドでそれを行う必要があります。これを試してください:

var automationElement;
Thread thread = new Thread(() =>
{
    automationElement = AutomationElement.FromPoint(location);
});
thread.Start();
thread.Join();
// now automationElemnt is set
于 2013-09-07T06:59:50.387 に答える
1

初めて動作しますが、その後動作しません....

マウスクリックでオブジェクトのプロパティを取得するためにマウスフックを使用しました。ここにコードがあります。

    private  AutomationElement GetAutomationElementFromPoint(Point location)
    {


        AutomationElement automationElement =null;

        Thread thread = new Thread(() =>
        {
            automationElement = AutomationElement.FromPoint(location);
        });

        thread.Start();
        thread.Join();
        return automationElement;
    }

     private void mouseHook_MouseClick(object sender, MouseEventArgs e)
    {
        AutomationElement element = GetAutomationElementFromPoint(new System.Windows.Point(e.X, e.Y));

        //Thread.Sleep(900);
        if (element != null)
        {

           textBox1.Text =  "Name: " + element.Current.Name + " ID: " + element.Current.AutomationId + " Type: " + element.Current.LocalizedControlType;
        }
        else
           textBox1.Text = "Not found";
    }

最初のクリックでは値が返されますが、次のクリックでは要素が null でなくても空白の値が返されます。

何が問題になる可能性がありますか?

于 2013-09-11T07:05:41.130 に答える