SendInput eta 64 bit

Jarraian SendInput APIaren bidez teklak sakatzeko erabiltzen ari naizen kode batzuen laburpena dago. Honek ondo funtzionatzen du nire aplikazioa x86 CPU baterako konpilatzeko ezartzen badut, baina ez du funtzionatzen x64 CPU konpilaziorako.

X64 tamaina bikoitzeko erakusleak erabiltzen dituela uste dut zerbait duela, baina saiatu naiz aldatu hau [FieldOffset (4)] honetara [FieldOffset (8)] baina ez du funtzionatu.

Izan liteke inportatzen ari denarekin zerikusia duen zerbait user32.dll-ren 32bit bertsioa?

    #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]));
    }
10
задан David Heffernan 17 December 2011 в 11:46
поделиться