如何获取一个隐藏窗口的截图?
隐藏窗口后就不影响工作了。这样可以干别的事情了。但是用截屏函数只能截取到桌面的左边了。对IE的自动网页填表就没法识别验证码了。求教了。 _ScreenCapture_CaptureWnd 谢谢我测试下试试 用_ScreenCapture_CaptureWnd无法获取隐藏的ie截图 不会隐藏窗口截图,但是给你一个思路……移动窗口到显示范围外,然后显示窗口截图,至于要不要再隐藏移动回来那就是你的事情了……不过能达到你要的不影响你干其他事情的目的 好办法啦。谢谢。我试试看。 实验了几天没有特别好的方法,实现的代码略显难懂,而且需要激活一次窗口 把代码发上来啊~ 光这么说只能给你思路,给不了代码~ 明天放代码 #include <GUIConstantsEx.au3>#include <StaticConstants.au3>
#include <WinAPIGdi.au3>
#include <WindowsConstants.au3>
#include <Process.au3>
#include <array.au3>
#include <GDIPlus.au3>
local $url="http://WWW.SOHU.COM"
local $title=""
local $hWnd=NULL
local $hWnd2=NULL
_GDIPlus_Startup()
Run(@programFilesDir & "\Internet Explorer\iexplore.exe " & $url)
WinWait($title, "", 10)
WinSetState($title, "", @SW_HIDE)
do
$hWnd2=WinGetHandle($title)
until $hWnd2
WinMove($hWnd2,"",3000,3000,1600,800)
WinSetState($hWnd2, "", @SW_SHOW)
Sleep(100)
$hWnd=ControlGetHandle($title,"","Internet Explorer_Server1")
Local $iSize = WinGetPos($hWnd)
local $hPic=$hWnd
Local $hDC = _WinAPI_GetDC($hPic);取得控件的环境句柄
Local $hDestDC = _WinAPI_CreateCompatibleDC($hDC);创建兼容的内存环境,返回内存环境句柄
Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iSize, $iSize);创建画布,返回画布句柄
Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap);把画布放到内存环境里去,返回之前的对象的句柄
Local $hSrcDC = _WinAPI_CreateCompatibleDC($hDC);再创建一个内存环境。
Local $hBmp = _WinAPI_CreateCompatibleBitmap($hDC, $iSize, $iSize);再创建一个画布。
Local $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hBmp);然后把第二画布放到第二个内存环境里去。
_WinAPI_PrintWindow($hWnd, $hSrcDC);复制程序窗口到第2个内存环境中去。
_WinAPI_BitBlt($hDestDC, 0, 0, $iSize, $iSize, $hSrcDC, 0, 0, $MERGECOPY)
;从第二个内存环境中传输位图信息到第一个内存环境。
_WinAPI_ReleaseDC($hPic, $hDC);释放控件的环境句柄
_WinAPI_SelectObject($hDestDC, $hDestSv);还原内存环境
_WinAPI_SelectObject($hSrcDC, $hSrcSv);;还原内存环境
_WinAPI_DeleteDC($hDestDC);删除内存环境句柄
_WinAPI_DeleteDC($hSrcDC);删除内存环境句柄
_WinAPI_DeleteObject($hBmp);删除第二个位图
local $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
; 创建 24 位位图克隆
local $iX = _GDIPlus_ImageGetWidth($hImage)
local $iY = _GDIPlus_ImageGetHeight($hImage)
local $hClone = _GDIPlus_BitmapCloneArea($hImage, 0, 0, 1000, 700, $GDIP_PXF24RGB)
_GDIPlus_ImageSaveToFile($hClone, @desktopDir & "\GDIPlus_Image.bmp")
_GDIPlus_ImageDispose($hClone)
_GDIPlus_ImageDispose($hImage)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()
while ProcessExists("iexplore.exe")
ProcessClose("iexplore.exe")
WEnd
exit
大家测试下,我没办法做到一上来就隐藏窗口,还请指教。谢谢。里面的注释代码是我自己加上去的。翻译的不对的请指正。或者代码本省还可以省略也请指正。谢谢。 WinWait($title, "", 10)
这句最好换成真实的网页TITLE,不要用类,否则可能截到黑屏,我就不修改了。
页:
[1]