    {-# LINE 1 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
    {-# LANGUAGE CPP #-}
    {- |
       Module      :  System.Win32.Automation.Input.Key
       Copyright   :  2013 shelarcy
       License     :  BSD-style

       Maintainer  :  shelarcy@gmail.com
       Stability   :  Provisional
       Portability :  Non-portable (Win32 API)

       Keyboard input events
    -}
    module System.Win32.Automation.Input.Key where
    import Foreign.Ptr        ( Ptr )
    import Foreign.Storable   ( Storable(..) )
    import System.Win32.Types ( ULONG_PTR )
    import System.Win32.Word  ( DWORD, WORD )

    type PKEYBDINPUT = Ptr KEYBDINPUT

    data KEYBDINPUT = KEYBDINPUT
         { KEYBDINPUT -> WORD
    wVk         :: WORD
         , KEYBDINPUT -> WORD
    wScan       :: WORD
         , KEYBDINPUT -> Word32
    dwFlags     :: DWORD
         , KEYBDINPUT -> Word32
    time        :: DWORD
         , KEYBDINPUT -> ULONG_PTR
    dwExtraInfo :: ULONG_PTR
         } deriving Int -> KEYBDINPUT -> ShowS
    [KEYBDINPUT] -> ShowS
    KEYBDINPUT -> String
    (Int -> KEYBDINPUT -> ShowS)
    -> (KEYBDINPUT -> String)
    -> ([KEYBDINPUT] -> ShowS)
    -> Show KEYBDINPUT
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> KEYBDINPUT -> ShowS
    showsPrec :: Int -> KEYBDINPUT -> ShowS
    $cshow :: KEYBDINPUT -> String
    show :: KEYBDINPUT -> String
    $cshowList :: [KEYBDINPUT] -> ShowS
    showList :: [KEYBDINPUT] -> ShowS
    Show

    instance Storable KEYBDINPUT where
        sizeOf :: KEYBDINPUT -> Int
    sizeOf = Int -> KEYBDINPUT -> Int
    forall a b. a -> b -> a
    const (Int
    24)
    {-# LINE 35 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
        alignment _ = 8
    {-# LINE 36 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
        poke buf input = do
            ((\hsc_ptr -> pokeByteOff hsc_ptr 0))     buf (wVk input)
    {-# LINE 38 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            ((\hsc_ptr -> pokeByteOff hsc_ptr 2))   buf (wScan input)
    {-# LINE 39 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            ((\hsc_ptr -> pokeByteOff hsc_ptr 4)) buf (dwFlags input)
    {-# LINE 40 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            ((\hsc_ptr -> pokeByteOff hsc_ptr 8))    buf (time input)
    {-# LINE 41 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            ((\hsc_ptr -> pokeByteOff hsc_ptr 16)) buf (dwExtraInfo input)
    {-# LINE 42 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
        peek buf = do
            wVk'         <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) buf
    {-# LINE 44 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            wScan'       <- ((\hsc_ptr -> peekByteOff hsc_ptr 2)) buf
    {-# LINE 45 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            dwFlags'     <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) buf
    {-# LINE 46 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            time'        <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) buf
    {-# LINE 47 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            dwExtraInfo' <- ((\hsc_ptr -> peekByteOff hsc_ptr 16)) buf
    {-# LINE 48 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}
            return $ KEYBDINPUT wVk' wScan' dwFlags' time' dwExtraInfo'

    kEYEVENTF_EXTENDEDKEY  :: DWORD
    kEYEVENTF_EXTENDEDKEY :: Word32
    kEYEVENTF_EXTENDEDKEY  =  Word32
    1
    kEYEVENTF_KEYUP        :: DWORD
    kEYEVENTF_KEYUP :: Word32
    kEYEVENTF_KEYUP        =  Word32
    2
    kEYEVENTF_SCANCODE     :: DWORD
    kEYEVENTF_SCANCODE :: Word32
    kEYEVENTF_SCANCODE     =  Word32
    8
    kEYEVENTF_UNICODE      :: DWORD
    kEYEVENTF_UNICODE :: Word32
    kEYEVENTF_UNICODE      =  Word32
    4

    {-# LINE 56 "libraries\\Win32\\System\\Win32\\Automation\\Input\\Key.hsc" #-}