3

まず、私がやろうとしているのは、webbrowser コントロール内の flash オブジェクト内の特定のポイントをクリックすることです。なぜ機能しないのかわかりませんが、メモ帳であろうと実際のプログラムであろうと、どのウィンドウもクリックできないようです。

これが私が使用している私のコードです。

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, IntPtr windowTitle);

    [DllImport("user32.dll")]
    public static extern IntPtr FindWindow(String sClassName, String sAppName);

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

    [DllImport("user32.dll", SetLastError = true)]
    static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

    public IntPtr find()
    {
        return this.Handle;//FindWindow("", "Form1");
    }

    public enum WMessages : int
    {
        WM_LBUTTONDOWN = 0x201, //Left mousebutton down
        WM_LBUTTONUP = 0x202,   //Left mousebutton up
        WM_LBUTTONDBLCLK = 0x203, //Left mousebutton doubleclick
        WM_RBUTTONDOWN = 0x204, //Right mousebutton down
        WM_RBUTTONUP = 0x205,   //Right mousebutton up
        WM_RBUTTONDBLCLK = 0x206, //Right mousebutton do
    }

    private int MAKELPARAM(int p, int p_2)
    {
        return ((p_2 << 16) | (p & 0xFFFF));
    }

    /** This is the non-working code **/
    public void DoMouseLeftClick(IntPtr handle, Point x)
    {
        SendMessage(handle, (int)WMessages.WM_LBUTTONDOWN, 0, MAKELPARAM(x.X, x.Y));
        SendMessage(handle, (int)WMessages.WM_LBUTTONUP, 0, MAKELPARAM(x.X, x.Y));

        return;

        //I have tried PostMessage, and SendMessage, and both of them at the same time, and neither works.

        PostMessage(handle, (uint)WMessages.WM_LBUTTONDOWN, 0, MAKELPARAM(x.X, x.Y));
        PostMessage(handle, (uint)WMessages.WM_LBUTTONUP, 0, MAKELPARAM(x.X, x.Y));
    }


    private void timer2_Tick(object sender, EventArgs e)
    {
        //I try hovering my mouse over a button I added to the form, and nothing happens.
        DoMouseLeftClick(find(), Cursor.Position);
    }

そのため、PostMessage と SendMessage を使用してみましたが、どちらも機能していないようです。必要なのは、特定のポイントをクリックすることだけです。

また、mouse_event を使用できないことに言及する必要があります。これは、私が知っていることから、ウィンドウがアクティブである必要があり、カーソルがクリックしているポイント上にある必要があるためです。Flash オブジェクトで自動処理するボットを作っているので、mouse_event が使えません。

助けてくれてありがとう。

4

2 に答える 2

-1

の場合、WM_LBUTTONDOWNどのボタンを指定する必要がある場合があります。参照してください: https://msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx

私が使用した:

SendMessage(hWnd, (int)WMessages.WM_RBUTTONDOWN, (int)KeyDownMessage.MK_LBUTTON, MAKELPARAM(x, y));
于 2016-01-18T09:00:04.257 に答える