diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,8 @@
+0.3.2
+=====
+
+  * Cygwin/MSYS support (https://github.com/biegunka/terminal-size/pull/8)
+
 0.3.1
 =====
 
diff --git a/src/System/Console/Terminal/Windows.hs b/src/System/Console/Terminal/Windows.hs
--- a/src/System/Console/Terminal/Windows.hs
+++ b/src/System/Console/Terminal/Windows.hs
@@ -8,6 +8,9 @@
 import Foreign.Ptr
 import Foreign.Storable
 import Foreign.Marshal.Alloc
+import System.Exit
+import System.IO
+import System.Process
 
 type HANDLE = Ptr ()
 
@@ -34,8 +37,26 @@
     hdl <- c_GetStdHandle c_STD_OUTPUT_HANDLE
     allocaBytes sizeCONSOLE_SCREEN_BUFFER_INFO $ \p -> do
         b <- c_GetConsoleScreenBufferInfo hdl p
-        if not b then return Nothing else do
-            [left,top,right,bottom] <- forM [0..3] $ \i -> do
-                v <- peekByteOff p ((i*2) + posCONSOLE_SCREEN_BUFFER_INFO_srWindow)
-                return $ fromIntegral (v :: Word16)
-            return $ Just $ Window (1+bottom-top) (1+right-left)
+        if not b
+            then do -- This could happen on Cygwin or MSYS
+                let stty = (shell "stty size") {
+                      std_in  = UseHandle stdin
+                    , std_out = CreatePipe
+                    }
+                (_, mbStdout, _, rStty) <- createProcess stty
+                exStty <- waitForProcess rStty
+                case exStty of
+                    ExitFailure _ -> return Nothing
+                    ExitSuccess ->
+                        maybe (return Nothing)
+                              (\hSize -> do
+                                  sizeStr <- hGetContents hSize
+                                  let [r, c] = map read $ words sizeStr :: [Int]
+                                  return $ Just $ Window (fromIntegral r) (fromIntegral c)
+                              )
+                              mbStdout
+            else do
+                [left,top,right,bottom] <- forM [0..3] $ \i -> do
+                    v <- peekByteOff p ((i*2) + posCONSOLE_SCREEN_BUFFER_INFO_srWindow)
+                    return $ fromIntegral (v :: Word16)
+                return $ Just $ Window (1+bottom-top) (1+right-left)
diff --git a/terminal-size.cabal b/terminal-size.cabal
--- a/terminal-size.cabal
+++ b/terminal-size.cabal
@@ -1,5 +1,5 @@
 name:                terminal-size
-version:             0.3.1
+version:             0.3.2
 synopsis:            Get terminal window height and width
 description:
   Get terminal window height and width without ncurses dependency.
@@ -21,7 +21,7 @@
 source-repository this
   type:     git
   location: https://github.com/biegunka/terminal-size
-  tag:      0.3.1
+  tag:      0.3.2
 
 library
   default-language:
@@ -32,6 +32,9 @@
   if impl(ghc >= 7.4 && < 7.6)
      build-depends:
        ghc-prim
+  if os(windows)
+     build-depends:
+       process
 
   build-tools:
     hsc2hs
