SendMessage за да симулира десен клик ја урива целната апликација

Пишувам алатка за автоматизација C #.

Бидејќи Microsoft UI Automation не обезбедува никаков начин за симулирање на десен клик или подигнување на контекстни менија, јас користам SendMessage за да го направите ова наместо тоа. Повеќе не сакам да користам SendInput затоа што не сакам да сфаќам фокус.

Кога ќе се јавам на SendMessage , сепак, таа ја урива целната апликација.

Еве го мојот код:

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

    public void RightClick<T>(T element) where T: AutomationElementWrapper
    {
        const int MOUSEEVENTF_RIGHTDOWN = 0x0008; /* right button down */
        const int MOUSEEVENTF_RIGHTUP = 0x0010; /* right button up */

        var point = element.Element.GetClickablePoint();
        var processId = element.Element.GetCurrentPropertyValue(AutomationElement.ProcessIdProperty);
        var window = AutomationElement.RootElement.FindFirst(
            TreeScope.Children,
            new PropertyCondition(AutomationElement.ProcessIdProperty,
                                  processId));
        var handle = window.Current.NativeWindowHandle;

        var x = point.X;
        var y = point.Y;

        var value = ((int)x)<<16 + (int)y;

        SendMessage(new IntPtr(handle), MOUSEEVENTF_RIGHTDOWN, IntPtr.Zero, new IntPtr(value));
        SendMessage(new IntPtr(handle), MOUSEEVENTF_RIGHTUP, IntPtr.Zero, new IntPtr(value));
    }

Некоја идеја што правам погрешно?

5
задан Lunivore 28 June 2011 в 17:18
поделиться