Dưới đây là một đoạn trích của một số mã tôi đang sử dụng để mô phỏng các lần nhấn phím thông qua API SendInput. Điều này hoạt động chính xác nếu tôi thiết lập ứng dụng của tôi để biên dịch cho một CPU x86, nhưng không làm việc cho việc biên dịch CPU x64.SendInput và 64bits
Tôi đoán nó có điều gì đó cần làm với thực tế là x64 sử dụng con trỏ kích thước gấp đôi, nhưng tôi đã cố gắng thay đổi này [FieldOffset(4)]
thành [FieldOffset(8)]
nhưng nó không hoạt động.
Có thể liên quan đến thực tế việc nhập phiên bản 32 bit của user32.dll không?
#region SendInput API
[DllImport("user32.dll", EntryPoint = "SendInput", SetLastError = true)]
static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
[DllImport("user32.dll", EntryPoint = "GetMessageExtraInfo", SetLastError = true)]
static extern IntPtr GetMessageExtraInfo();
private enum KeyEvent
{
KeyUp = 0x0002,
KeyDown = 0x0000,
ExtendedKey = 0x0001
}
private struct KEYBDINPUT
{
public ushort wVk;
public ushort wScan;
public uint dwFlags;
public long time;
public uint dwExtraInfo;
};
[StructLayout(LayoutKind.Explicit, Size = 28)]
private struct INPUT
{
[FieldOffset(0)]
public uint type;
[FieldOffset(4)]
public KEYBDINPUT ki;
};
#endregion
public void sendKey(KeyCode Key)
{
INPUT[] InputList = new INPUT[2];
INPUT keyInput = new INPUT();
keyInput.type = 1;
keyInput.ki.wScan = 0;
keyInput.ki.time = 0;
keyInput.ki.dwFlags = (int)KeyEvent.KeyDown;
keyInput.ki.dwExtraInfo = (uint)GetMessageExtraInfo();
keyInput.ki.wVk = (ushort)Key;
InputList[0] = keyInput;
keyInput.ki.dwFlags = (int)KeyEvent.KeyUp;
InputList[1] = keyInput;
SendInput((uint)2, InputList, Marshal.SizeOf(InputList[0]));
}
Bằng cách nào đó, một số mã đã mất tích do đó, dòng trong câu hỏi nên đọc '[StructLayout (LayoutKind.Explicit, Kích thước = 28)]' – Cheetah