{- | Module : System.Win32.Console.HWND Copyright : 2009 Balazs Komuves, 2013 shelarcy License : BSD-style Maintainer : shelarcy@gmail.com Stability : Provisional Portability : Non-portable (Win32 API) Get the handle of the current console window. -} module System.Win32.Console.HWND where import Control.Concurrent ( threadDelay ) import Control.Exception ( bracket ) import Foreign.Ptr ( nullPtr ) import Graphics.Win32.Window ( c_FindWindow ) import Graphics.Win32.GDI.Types ( HWND ) import System.Win32.Console.Title ( getConsoleTitle, setConsoleTitle ) import System.Win32.Process ( getCurrentProcessId ) import System.Win32.String ( withTString ) import System.Win32.Time ( getTickCount ) -- | Get the handle of the current console window by using window's title. -- See: getConsoleHWND :: IO HWND getConsoleHWND = bracket getConsoleTitle setConsoleTitle $ \_ -> do time <- getTickCount pid <- getCurrentProcessId let unique = show time ++ show pid setConsoleTitle unique threadDelay (42*1000) withTString unique $ \punique -> c_FindWindow nullPtr punique