public void TurnOn()
 {
     if (!flags.HasFlag(StickyKeys.Flags.SKF_STICKYKEYSON))
     {
         flags |= StickyKeys.Flags.SKF_STICKYKEYSON;
         SetStickKeysFlags(flags);
     }
 }
 private void Refresh()
 {
     this.flags      = GetStickyKeysFromSPI().dwFlags;
     this.rightALT   = new StickyKeyModifier(flags.HasFlag(Flags.SKF_RALTLATCHED), flags.HasFlag(Flags.SKF_RALTLOCKED));
     this.leftALT    = new StickyKeyModifier(flags.HasFlag(Flags.SKF_LALTLATCHED), flags.HasFlag(Flags.SKF_RALTLOCKED));
     this.rightCTL   = new StickyKeyModifier(flags.HasFlag(Flags.SKF_RCTLLATCHED), flags.HasFlag(Flags.SKF_RCTLLOCKED));
     this.leftCTL    = new StickyKeyModifier(flags.HasFlag(Flags.SKF_LCTLLATCHED), flags.HasFlag(Flags.SKF_RCTLLOCKED));
     this.rightWIN   = new StickyKeyModifier(flags.HasFlag(Flags.SKF_RWINLATCHED), flags.HasFlag(Flags.SKF_RWINLOCKED));
     this.leftWIN    = new StickyKeyModifier(flags.HasFlag(Flags.SKF_LWINLATCHED), flags.HasFlag(Flags.SKF_RWINLOCKED));
     this.rightSHIFT = new StickyKeyModifier(flags.HasFlag(Flags.SKF_RSHIFTLATCHED), flags.HasFlag(Flags.SKF_RSHIFTLOCKED));
     this.leftSHIFT  = new StickyKeyModifier(flags.HasFlag(Flags.SKF_LSHIFTLATCHED), flags.HasFlag(Flags.SKF_RSHIFTLOCKED));
 }
        private void SetStickKeysFlags(StickyKeys.Flags flags)
        {
            uint        stickyKeysSize = (uint)Marshal.SizeOf(typeof(Win32Struct));
            Win32Struct stickyKeys     = new Win32Struct {
                cbSize = stickyKeysSize, dwFlags = flags
            };
            bool result = SystemParametersInfo(uiActions.SPI_SETSTICKYKEYS, stickyKeysSize, ref stickyKeys, 0);

            if (!result)
            {
                throw new System.ComponentModel.Win32Exception();
            }
        }
 public void TurnOff()
 {
     flags &= ~StickyKeys.Flags.SKF_STICKYKEYSON; // remove the ON bit if set
     SetStickKeysFlags(flags);
 }