- Сообщения
- 5,379
- Репутация
- 2,724
Заметил такую штуку, в Windows XP (в Vista/7 не проверял) функция _ScreenCapture_Capture() берет не все, что находится на экране. Например окна имеющие стиль WS_EX_LAYERED невозможно захватить с помощью этой функции. Немного наморщив ум, написал аналогичную функцию для создания скриншота всего экрана, но работающую через "PrintScreen".
Код:
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>
_ScreenCapture(@ScriptDir & '\Screenshot.bmp')
Func _ScreenCapture($sFile)
Local $Result, $Timer, $hImage, $hBitmap = 0
ClipPut('')
Send('{PRINTSCREEN}')
$Timer = TimerInit()
While TimerDiff($Timer) < 1000
_ClipBoard_Open(0)
$hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
_ClipBoard_Close()
If $hBitmap Then
ExitLoop
EndIf
Sleep(10)
WEnd
If Not $hBitmap Then
Return 0
EndIf
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
$Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
Return $Result
EndFunc ;==>_ScreenCapture