【发布时间】:2012-02-16 06:49:03
【问题描述】:
可能重复:
SendInput and 64bits
我正在使用来自 .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 个 KEYBOARD_INPUT 结构。
这会产生结果 = 0,当我检查最后一个错误时,我发现最后一个错误设置为 57(ERROR_INVALID_PARAMETER,参数不正确)。
有没有办法在 WIN7 64 位操作系统的 64 位主机下工作?这适用于 XP...
谢谢
【问题讨论】:
标签: c# .net windows-7 64-bit pinvoke