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