    {-# INCLUDE <windows.h> #-}
    {-# LINE 1 "Graphics\Win32\Key.hsc" #-}
    -----------------------------------------------------------------------------
    {-# LINE 2 "Graphics\Win32\Key.hsc" #-}
    -- |
    -- Module      :  Graphics.Win32.Key
    -- Copyright   :  (c) Alastair Reid, 1997-2003
    -- License     :  BSD-style (see the file libraries/base/LICENSE)
    --
    -- Maintainer  :  Esa Ilari Vuokko <ei@vuokko.info>
    -- Stability   :  provisional
    -- Portability :  portable
    --
    -- A collection of FFI declarations for interfacing with Win32.
    --
    -----------------------------------------------------------------------------

    module Graphics.Win32.Key where

    import Graphics.Win32.GDI.Types
    import System.Win32.Types

    import Control.Monad (liftM)

    {-# LINE 23 "Graphics\Win32\Key.hsc" #-}

    type VKey   = DWORD

    vK_LBUTTON    :: VKey
    vK_LBUTTON    =  1
    vK_RBUTTON    :: VKey
    vK_RBUTTON    =  2
    vK_CANCEL     :: VKey
    vK_CANCEL     =  3
    vK_MBUTTON    :: VKey
    vK_MBUTTON    =  4
    vK_BACK       :: VKey
    vK_BACK       =  8
    vK_TAB        :: VKey
    vK_TAB        =  9
    vK_CLEAR      :: VKey
    vK_CLEAR      =  12
    vK_RETURN     :: VKey
    vK_RETURN     =  13
    vK_SHIFT      :: VKey
    vK_SHIFT      =  16
    vK_CONTROL    :: VKey
    vK_CONTROL    =  17
    vK_MENU       :: VKey
    vK_MENU       =  18
    vK_PAUSE      :: VKey
    vK_PAUSE      =  19
    vK_CAPITAL    :: VKey
    vK_CAPITAL    =  20
    vK_ESCAPE     :: VKey
    vK_ESCAPE     =  27
    vK_SPACE      :: VKey
    vK_SPACE      =  32
    vK_PRIOR      :: VKey
    vK_PRIOR      =  33
    vK_NEXT       :: VKey
    vK_NEXT       =  34
    vK_END        :: VKey
    vK_END        =  35
    vK_HOME       :: VKey
    vK_HOME       =  36
    vK_LEFT       :: VKey
    vK_LEFT       =  37
    vK_UP         :: VKey
    vK_UP         =  38
    vK_RIGHT      :: VKey
    vK_RIGHT      =  39
    vK_DOWN       :: VKey
    vK_DOWN       =  40
    vK_SELECT     :: VKey
    vK_SELECT     =  41
    vK_EXECUTE    :: VKey
    vK_EXECUTE    =  43
    vK_SNAPSHOT   :: VKey
    vK_SNAPSHOT   =  44
    vK_INSERT     :: VKey
    vK_INSERT     =  45
    vK_DELETE     :: VKey
    vK_DELETE     =  46
    vK_HELP       :: VKey
    vK_HELP       =  47
    vK_NUMPAD0    :: VKey
    vK_NUMPAD0    =  96
    vK_NUMPAD1    :: VKey
    vK_NUMPAD1    =  97
    vK_NUMPAD2    :: VKey
    vK_NUMPAD2    =  98
    vK_NUMPAD3    :: VKey
    vK_NUMPAD3    =  99
    vK_NUMPAD4    :: VKey
    vK_NUMPAD4    =  100
    vK_NUMPAD5    :: VKey
    vK_NUMPAD5    =  101
    vK_NUMPAD6    :: VKey
    vK_NUMPAD6    =  102
    vK_NUMPAD7    :: VKey
    vK_NUMPAD7    =  103
    vK_NUMPAD8    :: VKey
    vK_NUMPAD8    =  104
    vK_NUMPAD9    :: VKey
    vK_NUMPAD9    =  105
    vK_MULTIPLY   :: VKey
    vK_MULTIPLY   =  106
    vK_ADD        :: VKey
    vK_ADD        =  107
    vK_SEPARATOR  :: VKey
    vK_SEPARATOR  =  108
    vK_SUBTRACT   :: VKey
    vK_SUBTRACT   =  109
    vK_DECIMAL    :: VKey
    vK_DECIMAL    =  110
    vK_DIVIDE     :: VKey
    vK_DIVIDE     =  111
    vK_F1         :: VKey
    vK_F1         =  112
    vK_F2         :: VKey
    vK_F2         =  113
    vK_F3         :: VKey
    vK_F3         =  114
    vK_F4         :: VKey
    vK_F4         =  115
    vK_F5         :: VKey
    vK_F5         =  116
    vK_F6         :: VKey
    vK_F6         =  117
    vK_F7         :: VKey
    vK_F7         =  118
    vK_F8         :: VKey
    vK_F8         =  119
    vK_F9         :: VKey
    vK_F9         =  120
    vK_F10        :: VKey
    vK_F10        =  121
    vK_F11        :: VKey
    vK_F11        =  122
    vK_F12        :: VKey
    vK_F12        =  123
    vK_F13        :: VKey
    vK_F13        =  124
    vK_F14        :: VKey
    vK_F14        =  125
    vK_F15        :: VKey
    vK_F15        =  126
    vK_F16        :: VKey
    vK_F16        =  127
    vK_F17        :: VKey
    vK_F17        =  128
    vK_F18        :: VKey
    vK_F18        =  129
    vK_F19        :: VKey
    vK_F19        =  130
    vK_F20        :: VKey
    vK_F20        =  131
    vK_F21        :: VKey
    vK_F21        =  132
    vK_F22        :: VKey
    vK_F22        =  133
    vK_F23        :: VKey
    vK_F23        =  134
    vK_F24        :: VKey
    vK_F24        =  135
    vK_NUMLOCK    :: VKey
    vK_NUMLOCK    =  144
    vK_SCROLL     :: VKey
    vK_SCROLL     =  145

    {-# LINE 99 "Graphics\Win32\Key.hsc" #-}

    foreign import stdcall unsafe "windows.h EnableWindow"
      enableWindow :: HWND -> Bool -> IO Bool

    getActiveWindow :: IO (Maybe HWND)
    getActiveWindow = liftM ptrToMaybe c_GetActiveWindow
    foreign import stdcall unsafe "windows.h GetActiveWindow"
      c_GetActiveWindow :: IO HWND

    foreign import stdcall unsafe "windows.h GetAsyncKeyState"
      getAsyncKeyState :: Int -> IO WORD

    getFocus :: IO (Maybe HWND)
    getFocus = liftM ptrToMaybe c_GetFocus
    foreign import stdcall unsafe "windows.h GetFocus"
      c_GetFocus :: IO HWND

    foreign import stdcall unsafe "windows.h GetKBCodePage"
      getKBCodePage :: IO UINT

    foreign import stdcall unsafe "windows.h IsWindowEnabled"
      isWindowEnabled :: HWND -> IO Bool