从剪贴板读取时权限被拒绝
Permission denied when reading from clipboard
我写了一个小程序来跟踪我的剪贴板 activity 并使用 reactive-banana 和 System.Clipboard.
将它打印到终端
module Main where
import Reactive.Banana
import Reactive.Banana.Frameworks
import System.Clipboard
import Data.Maybe(fromJust)
main :: IO ()
main = do
sources <- (,) <$> newAddHandler <*> newAddHandler
network <- setupNetwork sources
actuate network
s <- getClipboardString
loop s sources
loop s (epop, epush) = do
c <- getClipboardString
if s /= c then
snd epush [fromJust c]
else
loop s (epop, epush)
setupNetwork (epop, epush) = compile $ do
ePop <- fromAddHandler $ fst epop
ePush <- fromAddHandler $ fst epush
bStack <- accumB [""] $ (++) <$> ePush
eStack <- changes bStack
reactimate' $ fmap print <$> eStack
当我 运行 它时,我移动到另一个 window(如 chrome)并复制一些文本。当我这样做时,我得到 Main.hs: CloseClipboard: invalid argument (Thread does not have a clipboard open.)
。我在 运行windows 上发布了这个。
任何帮助都会很棒!
干杯
经过一些研究,我相信我找到了问题的原因。发生的事情是,当我将新文本复制到剪贴板时,程序锁定了程序,因此不会对其进行其他更改。在此锁定时间内,我的程序试图访问剪贴板并出错。为了解决这个问题,我使用 Control.Exception
中的 try
将对 getClipboardString
的调用包装在 Either
中,然后模式匹配错误。
c <- try getClipboardString :: IO (Either SomeException (Maybe String))
case c of
Left err -> loop s (epop, epush) --ignore
Right clip -> --do something usefull
我写了一个小程序来跟踪我的剪贴板 activity 并使用 reactive-banana 和 System.Clipboard.
将它打印到终端module Main where
import Reactive.Banana
import Reactive.Banana.Frameworks
import System.Clipboard
import Data.Maybe(fromJust)
main :: IO ()
main = do
sources <- (,) <$> newAddHandler <*> newAddHandler
network <- setupNetwork sources
actuate network
s <- getClipboardString
loop s sources
loop s (epop, epush) = do
c <- getClipboardString
if s /= c then
snd epush [fromJust c]
else
loop s (epop, epush)
setupNetwork (epop, epush) = compile $ do
ePop <- fromAddHandler $ fst epop
ePush <- fromAddHandler $ fst epush
bStack <- accumB [""] $ (++) <$> ePush
eStack <- changes bStack
reactimate' $ fmap print <$> eStack
当我 运行 它时,我移动到另一个 window(如 chrome)并复制一些文本。当我这样做时,我得到 Main.hs: CloseClipboard: invalid argument (Thread does not have a clipboard open.)
。我在 运行windows 上发布了这个。
任何帮助都会很棒!
干杯
经过一些研究,我相信我找到了问题的原因。发生的事情是,当我将新文本复制到剪贴板时,程序锁定了程序,因此不会对其进行其他更改。在此锁定时间内,我的程序试图访问剪贴板并出错。为了解决这个问题,我使用 Control.Exception
中的 try
将对 getClipboardString
的调用包装在 Either
中,然后模式匹配错误。
c <- try getClipboardString :: IO (Either SomeException (Maybe String))
case c of
Left err -> loop s (epop, epush) --ignore
Right clip -> --do something usefull