SendInput 指定句柄 c# 后台点击 API使用实例
时间: 2024-09-22 12:01:57 浏览: 19
在 C# 中,`SendInput` 是一个用于模拟键盘和鼠标输入的 Windows API 函数,常用于自动化测试、脚本编写等场景。如果你想通过代码让应用程序后台点击某个元素,通常需要先获取到对应的窗口句柄和坐标信息。这里是一个简单的例子,说明如何使用 `SendInput` 来发送鼠标左键单击操作:
```csharp
using System.Runtime.InteropServices;
using User32 = System.Runtime.InteropServices.Marshal;
[DllImport("User32.dll", SetLastError = true)]
private static extern bool SendInput(int nInputs, INPUT[] pInputs, int cbSize);
[StructLayout(LayoutKind.Sequential)]
private struct INPUT
{
public INPUT_TYPE type;
public MouseKeyStruct mouse;
public KeyboardKeyStruct keyboard;
}
enum INPUT_TYPE { MOUSE, KEYBOARD };
public class MouseKeyStruct
{
public uint dwFlags;
public int x;
public int y;
public int z;
public IntPtr dwExtraInfo;
}
public class KeyboardKeyStruct
{
public uint vkCode;
public uint flags;
public IntPtr dwExtraInfo;
}
// 示例:点击屏幕坐标 (0, 0) 的左键
public void ClickAtBackgroud(int x, int y)
{
INPUT input = new INPUT
{
type = INPUT_TYPE.MOUSE,
mouse = new MouseKeyStruct
{
dwFlags = InputDeviceFlags.LEFTDOWN,
x = x,
y = y,
dwExtraInfo = IntPtr.Zero
}
};
int size = Marshal.SizeOf(input);
INPUT[] inputs = new INPUT[1] { input };
SendInput(1, inputs, size);
// 等待一段时间后释放左键(假设你想避免连续点击)
Thread.Sleep(100); // 这里替换为你实际所需的延迟时间
input.mouse.dwFlags |= InputDeviceFlags.LEFTUP; // 左键上抬
SendInput(1, inputs, size);
}
```