【发布时间】:2015-03-21 19:05:04
【问题描述】:
我正在尝试使用 SendInput 模拟鼠标左键单击,它可以工作,但也会将光标移动到屏幕的左上角 (0,0),我不知道为什么。
(我使用相同的结构来移动光标(相对和绝对),这是有效的。)
private static void Send(INPUT input)
{
SendInput(1, ref input, Marshal.SizeOf(new INPUT()));
}
private static void MouseAction(MouseFlags mf)
{
INPUT aInput = new INPUT();
aInput.type = InputType.INPUT_MOUSE;
aInput.mkhi.mi.dwFlags = mf;
Send(aInput);
}
// Performs a LeftClick but moves the cursor to (0.0)
public static void LeftClick()
{
MouseAction(MouseFlags.MOUSEEVENTF_LEFTDOWN | MouseFlags.MOUSEEVENTF_LEFTUP);
}
当我填写所有结构成员时,结果是一样的。 完整的 INPUT 定义:
[StructLayout(LayoutKind.Sequential)]
struct INPUT
{
public InputType type;
public MouseKeyboardHardwareUnion mkhi;
}
[StructLayout(LayoutKind.Explicit)]
struct MouseKeyboardHardwareUnion
{
[FieldOffset(0)]
public MOUSEINPUT mi;
[FieldOffset(0)]
public KEYBDINPUT ki;
}
[StructLayout(LayoutKind.Sequential)]
struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public MouseFlags dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
// Not relevant
[StructLayout(LayoutKind.Sequential)]
struct KEYBDINPUT
{
public KeyboardVirtual wVk;
public ushort wScan;
public KeyboardFlags dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
用光标的当前位置填充 MOUSEINPUT 的 dx 和 dy 字段似乎也不能解决问题。
【问题讨论】:
标签: c# windows winapi sendinput