这是类似的主题,但是无法正常工作。
我想将单击发送到没有手柄的按钮。间谍+ +显示它没有句柄。我可以使用这些代码,但是它必须是一个活动窗口,并且只能使用屏幕位置而不是控件手柄位置。我想将其发送到没有窗口句柄的带有子控件的非活动窗口。例如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。是否可以在句柄位置范围之外初始化单击?
谢谢