anchor.diff:    int get wScan => ptr.elementAt(1).value;
     int get dwFlags => ptr.elementAt(2).cast<Uint32>().value;
     int get time => ptr.elementAt(4).cast<Uint32>().value;
  -  int get dwExtraInfo => ptr.elementAt(6).cast<Uint32>().value;
  +  int get dwExtraInfo => ptr.elementAt(6).cast<IntPtr>().value;
   
     set wVk(int value) => ptr.value = value;
     set wScan(int value) => ptr.elementAt(1).value = value;
     set dwFlags(int value) => ptr.elementAt(2).cast<Uint32>().value = value;
     set time(int value) => ptr.elementAt(4).cast<Uint32>().value = value;
  -  set dwExtraInfo(int value) => ptr.elementAt(6).cast<Uint32>().value = value;
  +  set dwExtraInfo(int value) => ptr.elementAt(6).cast<IntPtr>().value = value;
   }
   
   // typedef struct tagHARDWAREINPUT {
  
positive.code:     .._data3 = 0
      .._data4 = 0;
  }
  
  // BUG: Unfortunately this is broken on 32-bit Dart at present.
  
  // typedef struct tagMOUSEINPUT {
  //   LONG      dx;
  
negative.code:   int get type => addressOf.cast<Uint32>().value;
    set type(int value) => addressOf.cast<Uint32>().value = value;
  
    // Location adjusts for padding on 32-bit or 64-bit
    MOUSEINPUT get mi =>
        MOUSEINPUT(addressOf.cast<Uint8>().elementAt(sizeOf<IntPtr>()).cast());
    KEYBDINPUT get ki =>
        KEYBDINPUT(addressOf.cast<Uint8>().elementAt(sizeOf<IntPtr>()).cast());
    HARDWAREINPUT get hi =>
        HARDWAREINPUT(addressOf.cast<Uint8>().elementAt(sizeOf<IntPtr>()).cast());
  
    factory INPUT.allocate() => allocate<INPUT>().ref
      .._data0 = 0
  