0

自動化要素のクリック可能なポイントをマウスダウンし、別の要素のクリック可能なポイントをマウスアップする次のコードを作成しました。これにより、ドラッグ アンド ドロップの効果が得られるはずですが、そうはなりません。それは奇妙な方法で動作します。ドラッグするのではなく、アイテムを選択するだけのようです。

public static void Main(String[] args)
        {
             contactsGrid.getCell("Cell Data").drag();
             navTree.getNode("Tree Data").drop();
        }

public void drag()
        {
            element.SetFocus();
            ScreenClick.leftDown(element);
        }

public void drop()
        {
            element.SetFocus();
            ScreenClick.leftUp(element);
        }

public static void leftDown(AutomationElement element)
        {
            while (!element.Current.IsKeyboardFocusable)
                element = TreeWalker.RawViewWalker.GetFirstChild(element);

            Point p;
            element.TryGetClickablePoint(out p);

            leftDown((int)p.X, (int)p.Y);
        }

public static void leftUp(AutomationElement element)
        {
            while (!element.Current.IsKeyboardFocusable)
                element = TreeWalker.RawViewWalker.GetFirstChild(element);

            Point p;
            element.TryGetClickablePoint(out p);

            leftUp((int)p.X, (int)p.Y);

        }

public static void leftDown(int x, int y)
        {
            Cursor.Position = new System.Drawing.Point(x, y);
            mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
        }

public static void leftUp(int x, int y)
        {
            Cursor.Position = new System.Drawing.Point(x, y);
            mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
        }
4

1 に答える 1

0

Cursor.Position の代わりに、mouse_event (MOUSEEVENTF_MOVE|..._ABSOLUTE) を使用して移動してみてください。

(座標は通常の画面座標とは異なることに注意してください。そのため、画面全体を 0,0 から 65535,65535 のスペースとして扱い、マッピング/スケーリングを行う必要があります。詳細については、 mouse_event の備考セクションを参照してください。 )

通常、アプリは WM_LBUTTONDOWN を待機することでドラッグを実装し、通常はいくつかの WM_MOUSEMOVE メッセージも予期します。それ以外の場合、単純な UP/DOWN はドラッグではなくクリックと見なされます。私の推測では、Cursor.Position (基本的には SetCursorPos のラッパー) を使用すると、「カーソルを移動せずにカーソルの位置を変更する」ことになります。入力メッセージは生成されないため、基になるアプリは WM_MOUSEMOVE メッセージを取得しません。そして、それがドラッグをしていることになっていることに決して気づきません。

于 2012-06-11T07:05:00.757 に答える