c# - c# SendMessage 到没有句柄的按钮
问题描述
这是类似的主题,但无法正常工作。
我想将点击发送到没有句柄的按钮。Spy++ 显示它没有句柄。我可以让它与这些代码一起工作,但它必须是一个活动窗口,并且只使用屏幕位置而不是控制手柄位置。我想将它发送到带有没有窗口句柄的子控件的非活动窗口。就像 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。
static extern bool PostMessage(IntPtr hwnd, uint Msg, IntPtr wParam, IntPtr lParam);
IParam 的鼠标位置是相对于屏幕还是相对于手柄控件。
假设该按钮没有句柄,但我想使用父句柄并获取父句柄(TPanel)的相对位置并初始化该单击。它是否单击?
上面的链接确实显示了一个句柄,但是那个句柄是从哪里来的呢?它是整个 gui 窗口句柄还是该非句柄按钮的父级。像TPanel?
立场是另一个问题。如果 PostMessage 基于句柄。位置是手柄的左上角还是屏幕的左上角?
假设屏幕范围从 0,0 到 100,100。PostMessage的句柄是10,10到20,20。可以在句柄位置范围之外初始化点击吗?
谢谢
解决方案
推荐阅读
- c# - COM 互操作,创建 .net com 并在 .net 中使用
- android - 命令失败:./gradlew app:installDebug -PreactNativeDevServerPort=8081
- asp.net - 在当前视图或新视图中下载文件
- python - python中带有按钮的时钟
- firebase - Flutter & Firebase:“Query”类型不是“CollectionReference”类型的子类型
- openvpn - OpenVPN 配置文件和 MFA 失败
- tensorflow - 如何使用 pickle 存储和加载 TFIdf 矢量化器?
- firebase - 使用通知服务扩展在前台来自 FCM 的 iOS 丰富通知
- batch-file - 带有数组循环的批处理 concat 变量[%x%]
- ios - 使用配置构建时 xcodebuild 失败,但在 Xcode 中成功