C#SendMessage到没有句柄的按钮

时间:2018-11-08 09:30:46

标签: c# sendmessage

这是类似的主题,但是无法正常工作。

https://social.msdn.microsoft.com/Forums/es-ES/21cc58c5-fc34-45b0-9407-952aae80fc1c/how-do-i-simulate-a-mouse-click-in-an-inactive-window?forum=vbinterop

我想将单击发送到没有手柄的按钮。间谍+ +显示它没有句柄。我可以使用这些代码,但是它必须是一个活动窗口,并且只能使用屏幕位置而不是控件手柄位置。我想将其发送到没有窗口句柄的带有子控件的非活动窗口。例如TPanel中某个位置内的最小化窗口。

    public static void ClickLeftMouseButton(int x, int y)
    {
        var oldPos = Cursor.Position;

        INPUT mouseInput = new INPUT();
        mouseInput.type = SendInputEventType.InputMouse;
        mouseInput.mkhi.mi.dx = CalculateAbsoluteCoordinateX(x);
        mouseInput.mkhi.mi.dy = CalculateAbsoluteCoordinateY(y);
        mouseInput.mkhi.mi.mouseData = 0;


        mouseInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE | MouseEventFlags.MOUSEEVENTF_ABSOLUTE;
        SendInput(1, ref mouseInput, Marshal.SizeOf(new INPUT()));

        mouseInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTDOWN;
        SendInput(1, ref mouseInput, Marshal.SizeOf(new INPUT()));

        mouseInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTUP;
        SendInput(1, ref mouseInput, Marshal.SizeOf(new INPUT()));

        /// return mouse 
        Cursor.Position = oldPos;
    }

我在使用SendMessage()或PostMessage时遇到麻烦。

第一个问题是与SendMessage或PostMessage有关。

静态外部布尔PostMessage(IntPtr hwnd,uint Msg,IntPtr wParam,IntPtr lParam);

IParam的鼠标位置,相对于屏幕还是手柄控件。

比方说该按钮没有手柄,但是我想使用父手柄并获取到父手柄的相对位置(TPanel)并初始化该单击。它是否单击?

上面的链接确实显示了一个句柄,但是该句柄来自何处?是整个gui窗口句柄还是该非句柄按钮的父级。像TPanel一样?

这个职位是另一个问题。如果PostMessage基于句柄。是从手柄的左上角位置还是屏幕的左上角位置?

假设屏幕的范围是0,0到100,100。 PostMessage的句柄是10,10到20,20。是否可以在句柄位置范围之外初始化单击?

谢谢

0 个答案:

没有答案