クリップボードからテキストを取り出す。

Windows限定ですが、クリップボードからテキストを取り出すプログラムを書いてみました。

module Main (main) where

import Foreign.C.String (peekCString)
import Foreign.Ptr (nullPtr, castPtr)
import Graphics.Win32.GDI.Clip (openClipboard, getClipboardData, 
                                closeClipboard, cF_TEXT)
import System.Win32.Mem (globalLock, globalUnlock)

getTextFromClipboard :: IO String
getTextFromClipboard = do
  openClipboard nullPtr
  h <- getClipboardData cF_TEXT
  s <- peekCString . castPtr =<< globalLock h
  globalUnlock h
  closeClipboard 
  return s

main :: IO ()
main = putStrLn =<< getTextFromClipboard

参照: http://www.dev.pei.jp/programming/sdk/sdk31.html