gpt4 book ai didi

windows - Haskell 中的屏幕截图?

转载 作者:可可西里 更新时间:2023-11-01 12:32:56 24 4
gpt4 key购买 nike

是否可以在 Windows 环境中使用 Haskell 捕获屏幕(或窗口)? (即,每隔几分钟左右截取一次屏幕截图)。如果是这样,人们将如何做这件事(同样,在 Haskell 中,对于 Windows 环境)?

更多信息:我是 Haskell 的初学者。一个 friend 想让我为他的会计师事务所编写一些程序来降低开发成本,但他坚持让我使用 Haskell。他想要一个可以让他监控不同 Windows XP 工作站桌面的工具。它可能必须是客户端/服务器类型的应用程序。他只需要监控桌面事件,因此他不想使用市场上已有的任何昂贵的管理软件。我筛选了很多文档,只找到了 wxHaskell,但我找不到太多关于捕获屏幕的信息,尤其是对于 Windows 环境。

最佳答案

Tikhon 提到的方法是正确的。只是在他上面给出的答案中添加一些代码

import Graphics.Win32.Window
import Graphics.Win32.GDI.Bitmap
import Graphics.Win32.GDI.HDC
import Graphics.Win32.GDI.Graphics2D

main = do desktop <- getDesktopWindow -- Grab the Hwnd of the desktop, GetDC 0, GetDC NULL etc all work too
hdc <- getWindowDC (Just desktop) -- Get the dc handle of the desktop
(x,y,r,b) <- getWindowRect desktop -- Find the size of the desktop so we can know which size the destination bitmap should be
-- (left, top, right, bottom)
newDC <- createCompatibleDC (Just hdc) -- Create a new DC to hold the copied image. It should be compatible with the source DC
let width = r - x -- Calculate the width
let height = b - y -- Calculate the Height
newBmp <- createCompatibleBitmap hdc width height -- Create a new Bitmap which is compatible with the newly created DC
selBmp <- selectBitmap newDC newBmp -- Select the Bitmap into the DC, drawing on the DC now draws on the bitmap as well
bitBlt newDC 0 0 width height hdc 0 0 sRCCOPY -- use SRCCOPY to copy the desktop DC into the newDC
createBMPFile "Foo.bmp" newBmp newDC -- Write out the new Bitmap file to Foo.bmp
putStrLn "Bitmap image copied" -- Some debug message
deleteBitmap selBmp -- Cleanup the selected bitmap
deleteBitmap newBmp -- Cleanup the new bitmap
deleteDC newDC -- Cleanup the DC we created.

这只是快速组合在一起,但它会将屏幕截图保存到名为 Foo.bmp 的文件中。附言。对于编写 Win32 库的人,干得好 :)

关于windows - Haskell 中的屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com