Автор
DyadyaGenya
Знающий
- Сообщения
- 300
- Репутация
- 10
Спасибо. Но не могу разобраться. У меня своя функция создания скрина окна без привязки к координатам. Возможно ваш вариант и лучше, но все равно не понятно, как прикрутить любую другую дополнительную функцию.для скриншота окна прогресса и вставки в окно скрипта
Вот мой вариант. Можете на нем пояснить?
Код:
#pragma compile(AutoItExecuteAllowed, true)
#RequireAdmin
#include <GUIConstantsEx.au3>
#include <Date.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>
#include <StaticConstants.au3>
#include <WinAPIProc.au3>
#Include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <Clipboard.au3>
#include <GDIPlus.au3>
;#include <поймать окно альт.au3>
Global $timer, $Secs, $Mins, $Hour, $Time, $sTime, $TimeInf, $sPS, $sPD
Global $iPid, $iTM
$hGui = GUICreate('Секундомер', 700, 680, -1, -1, -1, $WS_EX_TOPMOST)
$TimeInf = GUICtrlCreateLabel('00:00:00:000', 8, 8, 330, 81, $SS_CENTERIMAGE + $SS_CENTER, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 36, -1, -1, 'Impact')
Local $btStart = GUICtrlCreateButton('Старт', 392, 8, 75, 25)
Local $btStop = GUICtrlCreateButton('Стоп', 392, 48, 75, 25)
Local $sPathSS = GUICtrlCreateInput('', 8, 96, 325, 21)
Local $sPathDD = GUICtrlCreateInput('', 8, 128, 325, 21)
Local $sPathS = GUICtrlCreateButton('Откуда', 392, 96, 75, 25)
Local $sPathD = GUICtrlCreateButton('Куда', 392, 128, 75, 25)
$Temper = GUICtrlCreateLabel('Температура', 480, 8, 150, 50, $SS_CENTERIMAGE + $SS_CENTER, $WS_EX_STATICEDGE)
$Smart = GUICtrlCreateLabel('Модель' & @LF & 'Серийный' & @CR & 'Буква', 480, 58, 150, 150, $SS_LEFT, $WS_EX_STATICEDGE)
$Pic = GUICtrlCreatePic(@ScriptDir & "\screen1.bmp", 8, 170, 330, 200,$WS_SIZEBOX + $WS_SYSMENU)
$LabelPic1 = GUICtrlCreateLabel('Результат1', 8, 370, 330, 25, $SS_CENTERIMAGE + $SS_CENTER, $WS_EX_STATICEDGE)
$Pic2 = GUICtrlCreatePic(@ScriptDir & "\screen2.bmp", 338, 170, 330, 200, $WS_SIZEBOX + $WS_SYSMENU)
$LabelPic2 = GUICtrlCreateLabel('Результат2', 338, 370, 330, 25, $SS_CENTERIMAGE + $SS_CENTER, $WS_EX_STATICEDGE)
$Pic3 = GUICtrlCreatePic(@ScriptDir & "\screen3.bmp", 8, 400, 330, 200, $WS_SIZEBOX + $WS_SYSMENU)
$LabelPic3 = GUICtrlCreateLabel('Результат3', 8, 600, 330, 25, $SS_CENTERIMAGE + $SS_CENTER, $WS_EX_STATICEDGE)
$Pic4 = GUICtrlCreatePic(@ScriptDir & "\screen4.bmp", 338, 400, 330, 200, $WS_SIZEBOX + $WS_SYSMENU)
$LabelPic4 = GUICtrlCreateLabel('Результат4', 338, 600, 330, 25, $SS_CENTERIMAGE + $SS_CENTER, $WS_EX_STATICEDGE)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
FileDelete('copy.txt')
_Timer_KillTimer($hGui, $iTM)
ProcessClose($iPid)
Exit
Case $sPathS
GUICtrlSetData($sPathSS, '')
$sPS = FileSelectFolder('Выбор копируемой папки', '', 0, '', $hGui)
If Not @error Then GUICtrlSetData($sPathSS, $sPS)
Case $sPathD
GUICtrlSetData($sPathDD, '')
$sPD = FileSelectFolder('Выбор папки назначения', '', 0, '', $hGui)
If Not @error Then GUICtrlSetData($sPathDD, $sPD)
Case $btStart
FileDelete('copy.txt')
If Not ProcessExists($iPid) Then
If FileExists($sPS) And FileExists($sPD) Then
GUICtrlSetData($TimeInf, '00:00:00:000')
FileWrite('copy.txt', "$Shell = ObjCreate('Shell.Application')" & @CRLF & "$Shell.NameSpace('" & $sPD & "').CopyHere('" & $sPS & "', 16)")
$timer = TimerInit()
$iTM = _Timer_SetTimer($hGui, 50, '_TIMER')
$iPid = Run(@AutoItExe & ' /AutoIt3ExecuteScript copy.txt')
If ProcessExists($iPid) Then
While 1
Local $ahWin = _WinAPI_EnumProcessWindows($iPid)
If Not @error Then
If Not StringInStr($ahWin[1][1], 'Autoit') Then
Local $aPosP = WinGetPos($hGui)
WinSetOnTop($ahWin[1][0], '', 1)
WinMove($ahWin[1][0], '', $aPosP[0], $aPosP[1] + $aPosP[3] - 30)
WinSetOnTop($hGui, '', -10)
EndIf
ExitLoop
EndIf
WEnd
EndIf
FileDelete('copy.txt')
EndIf
EndIf
Case $btStop
FileDelete('copy.txt')
_Timer_KillTimer($hGui, $iTM)
ProcessClose($iPid)
GUICtrlSetData($TimeInf, '00:00:00:000')
GUICtrlSetData($sPathSS, '')
GUICtrlSetData($sPathDD, '')
$iPid = 0
EndSwitch
WEnd
Func _TIMER($hWnd, $iMsg, $iIDTimer, $iTime)
If Not ProcessExists($iPid) Then
FileDelete('copy.txt')
_Timer_KillTimer($hGui, $iTM)
$iPid = 0
EndIf
_TicksToTime(Int(TimerDiff($timer)), $Hour, $Mins, $Secs)
$Time = StringFormat('%02i:%02i:%02i:%03i', $Hour, $Mins, $Secs, StringRight(Int(TimerDiff($timer)), 3))
GUICtrlSetData($TimeInf, $Time)
EndFunc ;==>_TIMER
Func _SCREEN()
If Not WinExists("[class:OperationStatusWindow]") Then
MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
Exit
Else
$hWnd = WinGetHandle("[CLASS:OperationStatusWindow]")
;Dim $screen =
Send("!{PRINTSCREEN}")
_ClipBoard_Open(0)
$hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
_ClipBoard_Close()
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\screen.bmp")
_GDIPlus_BitmapDispose($hImage)
_GDIPlus_Shutdown()
Dim $sFile = @ScriptDir & "\screen.bmp"
;_ScreenCapture_SaveImage($sFile, $hBitmap)
ShellExecute($sFile)
EndIf
EndFunc ;==>_SCREEN