aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/WindowsEnv/Utils.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WindowsEnv/Utils.hs')
-rw-r--r--src/WindowsEnv/Utils.hs30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/WindowsEnv/Utils.hs b/src/WindowsEnv/Utils.hs
new file mode 100644
index 0000000..c852229
--- /dev/null
+++ b/src/WindowsEnv/Utils.hs
@@ -0,0 +1,30 @@
+-- |
+-- Copyright : (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+-- License : MIT
+-- Maintainer : Egor.Tensin@gmail.com
+-- Stability : experimental
+-- Portability : Windows-only
+
+module WindowsEnv.Utils
+ ( notifyEnvironmentUpdate
+ ) where
+
+import Foreign.C.Types (CIntPtr(..))
+import qualified Graphics.Win32.GDI.Types as WinAPI
+import qualified Graphics.Win32.Message as WinAPI
+import qualified System.Win32.Types as WinAPI
+
+foreign import ccall "Windows.h SendNotifyMessageW"
+ c_SendNotifyMessage :: WinAPI.HWND -> WinAPI.WindowMessage -> WinAPI.WPARAM -> WinAPI.LPARAM -> IO WinAPI.LRESULT
+
+notifyEnvironmentUpdate :: IO ()
+notifyEnvironmentUpdate =
+ WinAPI.withTString "Environment" $ \lparamPtr -> do
+ let wparam = 0
+ let lparam = fromIntegral $ WinAPI.castPtrToUINTPtr lparamPtr
+ _ <- c_SendNotifyMessage allWindows messageCode wparam lparam
+ return ()
+ where
+ messageCode = WinAPI.wM_WININICHANGE
+ hWND_BROADCAST = WinAPI.castUINTPtrToPtr 0xffff
+ allWindows = hWND_BROADCAST