Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #SingleInstance,Force
- SetTitleMatchMode,2
- AutoTrim,Off
- SetBatchLines,-1
- count=1
- /*
- Original code by sean.
- Forum post with original http://www.autohotkey.com/board/topic/16677-screen-capture-with-transparent-windows-and-mouse-cursor/page-1
- Note:Sean's link doesn't work for me. If it doesn't work for you, go to the bottom post at
- http://www.autohotkey.com/board/topic/16677-screen-capture-with-transparent-windows-and-mouse-cursor/page-14
- by datalife.
- Edited by dangerdogL2121
- You will need the program at http://en.cze.cz/Images-to-video
- Put it in the same folder as this script.
- Have fun!
- */
- ;loop 10 ;Area of screen
- ;CaptureScreen("100, 100, 400, 400",, A_ScriptDir "\CaptureAreaOfScreen" a_index ".jpg")
- ;
- ;loop 10 ;Entire Screen
- ;CaptureScreen(,,A_ScriptDir "\CaptureEntireScreen" a_index ".jpg")
- ;
- ;loop 10 ;Active window
- ;CaptureScreen(1, false, A_ScriptDir "\CaptureActiveScreen" a_index ".jpg")
- ;return
- ;
- OnExit, endprogram
- FileRemoveDir,%A_Desktop%\ScreenPictures,1
- FileCreateDir,%A_Desktop%\ScreenPictures
- FileSetAttrib,-H,%A_Desktop%\ScreenPictures\ScreenCapture
- Gui, Font, s16 CRed w400, Arial Bold
- Gui,Add,Text,+wrap w900,The program will take screen captures and then put them in a folder called ScreenPictures in the desktop. The program will then run another program to turn the screen captures into a video.`nThe program won't start taking screen captures until this window is fully closed; 0.3 seconds after you click YES.`nAfter the screen capturing has ended, the program will pull up a window of ScreenPictures.`nPress CTRL+X to stop the picture capture.`nClick YES to run the program and NO to exit the program.
- Gui,Add,Button,Default grun,Start screen captures
- Gui,Add,Button,Default gend,Exit program
- Gui,show,Center
- return
- end:
- ExitApp
- return
- run:
- Gui,Destroy
- Hotkey,^x,end,On
- sleep,300
- SetTimer, capture,1
- begtick=%A_TickCount%
- return
- capture:
- {
- CaptureScreen(, True,A_Desktop "\ScreenPictures\ScreenCapture" count ".jpg")
- count++
- }
- if count = 200000
- {
- msgbox,You have reached the limit of 200,000 of screen captures.
- ExitApp
- }
- return
- CaptureScreen(aRect = 0, bCursor = False, sFile = "", nQuality = "")
- {
- If !aRect
- {
- SysGet, nL, 76 ; virtual screen left & top
- SysGet, nT, 77
- SysGet, nW, 78 ; virtual screen width and height
- SysGet, nH, 79
- }
- Else If aRect = 1
- WinGetPos, nL, nT, nW, nH, A
- Else If aRect = 2
- {
- WinGet, hWnd, ID, A
- VarSetCapacity(rt, 16, 0)
- DllCall("GetClientRect" , "Uint", hWnd, "Uint", &rt)
- DllCall("ClientToScreen", "Uint", hWnd, "Uint", &rt)
- nL := NumGet(rt, 0, "int")
- nT := NumGet(rt, 4, "int")
- nW := NumGet(rt, 8)
- nH := NumGet(rt,12)
- }
- Else If aRect = 3
- {
- VarSetCapacity(mi, 40, 0)
- DllCall("GetCursorPos", "int64P", pt)
- DllCall("GetMonitorInfo", "Uint", DllCall("MonitorFromPoint", "int64", pt, "Uint", 2), "Uint", NumPut(40,mi)-4)
- nL := NumGet(mi, 4, "int")
- nT := NumGet(mi, 8, "int")
- nW := NumGet(mi,12, "int") - nL
- nH := NumGet(mi,16, "int") - nT
- }
- Else
- {
- StringSplit, rt, aRect, `,, %A_Space%%A_Tab%
- nL := rt1 ; convert the Left,top, right, bottom into left, top, width, height
- nT := rt2
- nW := rt3 - rt1
- nH := rt4 - rt2
- znW := rt5
- znH := rt6
- }
- mDC := DllCall("CreateCompatibleDC", "Uint", 0)
- hBM := CreateDIBSectionForScreenCapture(mDC, nW, nH)
- oBM := DllCall("SelectObject", "Uint", mDC, "Uint", hBM)
- hDC := DllCall("GetDC", "Uint", 0)
- DllCall("BitBlt", "Uint", mDC, "int", 0, "int", 0, "int", nW, "int", nH, "Uint", hDC, "int", nL, "int", nT, "Uint", 0x40000000 | 0x00CC0020)
- DllCall("ReleaseDC", "Uint", 0, "Uint", hDC)
- If bCursor
- CaptureCursor(mDC, nL, nT)
- DllCall("SelectObject", "Uint", mDC, "Uint", oBM)
- DllCall("DeleteDC", "Uint", mDC)
- If znW && znH
- hBM := Zoomer(hBM, nW, nH, znW, znH)
- If sFile = 0
- SetClipboardData(hBM)
- Else Convert(hBM, sFile, nQuality), DllCall("DeleteObject", "Uint", hBM)
- }
- CaptureCursor(hDC, nL, nT)
- {
- VarSetCapacity(mi, 20, 0), mi := Chr(20)
- DllCall("GetCursorInfo", "Uint", &mi)
- bShow := NumGet(mi, 4)
- hCursor := NumGet(mi, 8)
- xCursor := NumGet(mi,12)
- yCursor := NumGet(mi,16)
- If bShow && hCursor:=DllCall("CopyIcon", "Uint", hCursor)
- {
- VarSetCapacity(ni, 20, 0)
- DllCall("GetIconInfo", "Uint", hCursor, "Uint", &ni)
- bIcon := NumGet(ni, 0)
- xHotspot := NumGet(ni, 4)
- yHotspot := NumGet(ni, 8)
- hBMMask := NumGet(ni,12)
- hBMColor := NumGet(ni,16)
- DllCall("DrawIcon", "Uint", hDC, "int", xCursor - xHotspot - nL, "int", yCursor - yHotspot - nT, "Uint", hCursor)
- DllCall("DestroyIcon", "Uint", hCursor)
- If hBMMask
- DllCall("DeleteObject", "Uint", hBMMask)
- If hBMColor
- DllCall("DeleteObject", "Uint", hBMColor)
- }
- }
- Zoomer(hBM, nW, nH, znW, znH)
- {
- mDC1 := DllCall("CreateCompatibleDC", "Uint", 0)
- mDC2 := DllCall("CreateCompatibleDC", "Uint", 0)
- zhBM := CreateDIBSectionForScreenCapture(mDC2, znW, znH)
- oBM1 := DllCall("SelectObject", "Uint", mDC1, "Uint", hBM)
- oBM2 := DllCall("SelectObject", "Uint", mDC2, "Uint", zhBM)
- DllCall("SetStretchBltMode", "Uint", mDC2, "int", 4)
- DllCall("StretchBlt", "Uint", mDC2, "int", 0, "int", 0, "int", znW, "int", znH, "Uint", mDC1, "int", 0, "int", 0, "int", nW, "int", nH, "Uint", 0x00CC0020)
- DllCall("SelectObject", "Uint", mDC1, "Uint", oBM1)
- DllCall("SelectObject", "Uint", mDC2, "Uint", oBM2)
- DllCall("DeleteDC", "Uint", mDC1)
- DllCall("DeleteDC", "Uint", mDC2)
- DllCall("DeleteObject", "Uint", hBM)
- Return zhBM
- }
- Convert(sFileFr = "", sFileTo = "", nQuality = "")
- {
- If sFileTo =
- sFileTo := A_ScriptDir . "\screen.bmp"
- SplitPath, sFileTo, , sDirTo, sExtTo, sNameTo
- If Not hGdiPlus := DllCall("LoadLibrary", "str", "gdiplus.dll")
- Return sFileFr+0 ? SaveHBITMAPToFile(sFileFr, sDirTo . "\" . sNameTo . ".bmp") : ""
- VarSetCapacity(si, 16, 0), si := Chr(1)
- DllCall("gdiplus\GdiplusStartup", "UintP", pToken, "Uint", &si, "Uint", 0)
- If !sFileFr
- {
- DllCall("OpenClipboard", "Uint", 0)
- If DllCall("IsClipboardFormatAvailable", "Uint", 2) && (hBM:=DllCall("GetClipboardData", "Uint", 2))
- DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "Uint", hBM, "Uint", 0, "UintP", pImage)
- DllCall("CloseClipboard")
- }
- Else If sFileFr Is Integer
- DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "Uint", sFileFr, "Uint", 0, "UintP", pImage)
- Else DllCall("gdiplus\GdipLoadImageFromFile", "Uint", Unicode4Ansi(wFileFr,sFileFr), "UintP", pImage)
- DllCall("gdiplus\GdipGetImageEncodersSize", "UintP", nCount, "UintP", nSize)
- VarSetCapacity(ci,nSize,0)
- DllCall("gdiplus\GdipGetImageEncoders", "Uint", nCount, "Uint", nSize, "Uint", &ci)
- Loop, % nCount
- If InStr(Ansi4Unicode(NumGet(ci,76*(A_Index-1)+44)), "." . sExtTo)
- {
- pCodec := &ci+76*(A_Index-1)
- Break
- }
- If InStr(".JPG.JPEG.JPE.JFIF", "." . sExtTo) && nQuality<>"" && pImage && pCodec
- {
- DllCall("gdiplus\GdipGetEncoderParameterListSize", "Uint", pImage, "Uint", pCodec, "UintP", nSize)
- VarSetCapacity(pi,nSize,0)
- DllCall("gdiplus\GdipGetEncoderParameterList", "Uint", pImage, "Uint", pCodec, "Uint", nSize, "Uint", &pi)
- Loop, % NumGet(pi)
- If NumGet(pi,28*(A_Index-1)+20)=1 && NumGet(pi,28*(A_Index-1)+24)=6
- {
- pParam := &pi+28*(A_Index-1)
- NumPut(nQuality,NumGet(NumPut(4,NumPut(1,pParam+0)+20)))
- Break
- }
- }
- If pImage
- pCodec ? DllCall("gdiplus\GdipSaveImageToFile", "Uint", pImage, "Uint", Unicode4Ansi(wFileTo,sFileTo), "Uint", pCodec, "Uint", pParam) : DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", "Uint", pImage, "UintP", hBitmap, "Uint", 0) . SetClipboardData(hBitmap), DllCall("gdiplus\GdipDisposeImage", "Uint", pImage)
- DllCall("gdiplus\GdiplusShutdown" , "Uint", pToken)
- DllCall("FreeLibrary", "Uint", hGdiPlus)
- }
- CreateDIBSectionForScreenCapture(hDC, nW, nH, bpp = 32, ByRef pBits = "")
- {
- NumPut(VarSetCapacity(bi, 40, 0), bi)
- NumPut(nW, bi, 4)
- NumPut(nH, bi, 8)
- NumPut(bpp, NumPut(1, bi, 12, "UShort"), 0, "Ushort")
- NumPut(0, bi,16)
- Return DllCall("gdi32\CreateDIBSection", "Uint", hDC, "Uint", &bi, "Uint", 0, "UintP", pBits, "Uint", 0, "Uint", 0)
- }
- SaveHBITMAPToFile(hBitmap, sFile)
- {
- DllCall("GetObject", "Uint", hBitmap, "int", VarSetCapacity(oi,84,0), "Uint", &oi)
- hFile:= DllCall("CreateFile", "Uint", &sFile, "Uint", 0x40000000, "Uint", 0, "Uint", 0, "Uint", 2, "Uint", 0, "Uint", 0)
- DllCall("WriteFile", "Uint", hFile, "int64P", 0x4D42|14+40+NumGet(oi,44)<<16, "Uint", 6, "UintP", 0, "Uint", 0)
- DllCall("WriteFile", "Uint", hFile, "int64P", 54<<32, "Uint", 8, "UintP", 0, "Uint", 0)
- DllCall("WriteFile", "Uint", hFile, "Uint", &oi+24, "Uint", 40, "UintP", 0, "Uint", 0)
- DllCall("WriteFile", "Uint", hFile, "Uint", NumGet(oi,20), "Uint", NumGet(oi,44), "UintP", 0, "Uint", 0)
- DllCall("CloseHandle", "Uint", hFile)
- }
- SetClipboardData(hBitmap)
- {
- DllCall("GetObject", "Uint", hBitmap, "int", VarSetCapacity(oi,84,0), "Uint", &oi)
- hDIB := DllCall("GlobalAlloc", "Uint", 2, "Uint", 40+NumGet(oi,44))
- pDIB := DllCall("GlobalLock", "Uint", hDIB)
- DllCall("RtlMoveMemory", "Uint", pDIB, "Uint", &oi+24, "Uint", 40)
- DllCall("RtlMoveMemory", "Uint", pDIB+40, "Uint", NumGet(oi,20), "Uint", NumGet(oi,44))
- DllCall("GlobalUnlock", "Uint", hDIB)
- DllCall("DeleteObject", "Uint", hBitmap)
- DllCall("OpenClipboard", "Uint", 0)
- DllCall("EmptyClipboard")
- DllCall("SetClipboardData", "Uint", 8, "Uint", hDIB)
- DllCall("CloseClipboard")
- }
- Unicode4Ansi(ByRef wString, sString)
- {
- nSize := DllCall("MultiByteToWideChar", "Uint", 0, "Uint", 0, "Uint", &sString, "int", -1, "Uint", 0, "int", 0)
- VarSetCapacity(wString, nSize * 2)
- DllCall("MultiByteToWideChar", "Uint", 0, "Uint", 0, "Uint", &sString, "int", -1, "Uint", &wString, "int", nSize)
- Return &wString
- }
- Ansi4Unicode(pString)
- {
- nSize := DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "Uint", pString, "int", -1, "Uint", 0, "int", 0, "Uint", 0, "Uint", 0)
- VarSetCapacity(sString, nSize)
- DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "Uint", pString, "int", -1, "str", sString, "int", nSize, "Uint", 0, "Uint", 0)
- Return sString
- }
- endprogram:
- ticknum=%A_TickCount%
- tickshow=%A_TickCount%
- SetTimer, capture,Off
- Hotkey,^x,end,Off
- WinClose,Images To Video
- prevcount=%count%
- EnvMult, ticknum, 1000
- EnvMult, tickshow, 1000
- tickshow1=%tickshow%.00001
- tickshow=%tickshow1%
- EnvMult, begtick, 1000
- EnvSub, tickshow, %begtick%
- EnvDiv, tickshow, 1000000
- StringSplit, tickshowsplit, tickshow,.
- stringlen,tickshowlen,tickshowsplit2
- EnvSub, tickshowlen, 2
- StringTrimRight, tickshowend, tickshowsplit2, %tickshowlen%
- tickshow=%tickshowsplit1%.%tickshowend%
- EnvSub, ticknum, %begtick%
- EnvMult, count, 1000000
- count1=%count%.0000001
- count=%count1%
- EnvDiv, count, %ticknum%
- StringSplit, countsplit, count,.
- stringlen,countlen,countsplit2
- EnvSub, countlen, 2
- StringTrimRight, count1, countsplit2, %countlen%
- count=%countsplit1%.%count1%
- countround=%countsplit1%
- rounder=%count1%
- StringSplit, roundersplit, rounder
- if roundersplit1 > 4
- countround++
- Run, %A_Desktop%\ScreenPictures
- Run, %A_ScriptDir%\ImagesToVideo\ImagesToVideo.exe
- WinWaitActive,Images To Video
- Gui,+AlwaysOnTop
- Gui, Font, s16 CRed w400, Arial Bold
- Gui,add,Text,,Number of Pictures: %prevcount%`nLength of picture capture: %tickshow% seconds`nThe program took %count% pictures per second so set the the frame rate at %countround%.
- Gui,add,Button,Default gender,Exit screen capture program
- Gui,show,x0 Center
- return
- ender:
- OnExit,ender
- ExitApp
- return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement