5
我使用SendInput从.NET代码(PInvoke的)。
代码用于在32位操作系统上正常工作,但现在在WIN7上,SendInput返回0,并且最后的错误被设置为57(ERROR_INVALID_PARAMETER)。
我无法将我的代码编译为x86,因为我将其加载到64位主机中。此外,我尝试了各种关于结构尺寸和现场补偿的解决方案,但都没有成功。
这是我的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层KEYBOARD_INPUT结构。
这产生的结果= 0,当我检查最后一个错误时,我得到最后一个错误设置为57(ERROR_INVALID_PARAMETER,该参数不正确)。
有没有办法在WIN7 64bit操作系统的64位主机下工作?这部作品在XP ...
感谢
大,解决了这个问题 – Oren