可能重复:
SendInput和64位
我正在使用来自.NET代码(PInvoke)的SendInput。
在32位操作系统上,代码运行良好,但现在在WIN7上,SendInput返回0,并且上一个错误设置为57(ERROR_INVALID_PARAMETER)。
由于我已经加载到64位主机中,因此无法将代码编译为x86。此外,我尝试了各种解决方案,包括结构大小和字段偏移量,但都没有成功。
以下是我的PInvoke导入和类型:
[StructLayout(LayoutKind.Sequential)]
struct KEYBOARD_INPUT
{
public uint type;
public ushort vk;
public ushort scanCode;
public uint flags;
public uint time;
public uint extrainfo;
public uint padding1;
public uint padding2;
}
[DllImport("User32.dll", SetLastError=true)]
private static extern uint SendInput(
uint numberOfInputs,
[MarshalAs(UnmanagedType.LPArray, SizeConst = 1)] KEYBOARD_INPUT[] input,
int structSize);
代码使用方式如下:
uint result = SendInput(
(uint)inputs.Count,
inputs.ToArray(),
Marshal.SizeOf(inputs[0]));
输入数组包含1个键盘输入结构。这将导致结果为0,并且当我检查上一个错误时,发现上一个错误代码设置为57(ERROR_INVALID_PARAMETER,参数无效)。
在WIN7 64位操作系统下,有没有方法使它能够在64位主机下工作? 在XP中可以正常工作…
谢谢