تعديل بسيط على البرنامج تم التعديل على المرفق
تعليمات الإستخدام
HotKeySet("{PRINTSCREEN}", "ChildWindowsCapture")
HotKeySet("{ESC}", "Terminate")
HotKeySet("{HOME}", "AllChildWindowsCapture")0
بعد تشغل البرنامج مباشرة يقوم بعمل منجل على النافذة و التي في مقدمة الشاشة
للتقاطها تظغط على مفتاح PRINTSCREEN في لوحة المفاتيح يمكنك
تمرير الماوس لتحديد جزء من برنامج أو نافذة كلأزرار أو القوائم ثم تضغط
على نفس المفتاح ستجد الصورة الملتقطة بداخل مجلد جديد اسمه Capture
و موقعه بجانب البرنامج
يمكنك أخذ جميع النوافذ المتاحة لبرنامج على مقدمة الشاشة بالضغط على مفتاح
HOME بلوحة المفاتيح حيث سيتم أخذ صور لجميع الأزرة و القوائم و أدوات
التحكم للبرنامج ستجد الصور الملتقطة بجنب البرنامج في مجلد اسمه AllCapture
لإقفال البرنامج قم بالضغط على مفتاح الهروب أو الخروج Esc في الزاوية اليسرى
العلوية للوحة المفاتيح .
الصور الملتقطة بنوعين PNG و BMP
البرنامج على المرفقات
كود البرنامج على لغة Autoit لمن يريد الإستفاده منه .... في حفض الله
أعتذر سبق و عرضت سكاربت البرنامج على كود PHP
و حدثت أخطاء في السكاربت بعض الشرط إنحذفت بسبب أن أوامر
هذه اللغة لا تتناسب مع هذا النوع من الكود و أرجو كذالك أن لا
تكون هناك أخطاء بالمواضيع الأخرى الآن قمت باستخدام الكود
العادي و الأوامر كاملة وصحيحة .
عرض الكل
تعليمات الإستخدام
HotKeySet("{PRINTSCREEN}", "ChildWindowsCapture")
HotKeySet("{ESC}", "Terminate")
HotKeySet("{HOME}", "AllChildWindowsCapture")0
بعد تشغل البرنامج مباشرة يقوم بعمل منجل على النافذة و التي في مقدمة الشاشة
للتقاطها تظغط على مفتاح PRINTSCREEN في لوحة المفاتيح يمكنك
تمرير الماوس لتحديد جزء من برنامج أو نافذة كلأزرار أو القوائم ثم تضغط
على نفس المفتاح ستجد الصورة الملتقطة بداخل مجلد جديد اسمه Capture
و موقعه بجانب البرنامج
يمكنك أخذ جميع النوافذ المتاحة لبرنامج على مقدمة الشاشة بالضغط على مفتاح
HOME بلوحة المفاتيح حيث سيتم أخذ صور لجميع الأزرة و القوائم و أدوات
التحكم للبرنامج ستجد الصور الملتقطة بجنب البرنامج في مجلد اسمه AllCapture
لإقفال البرنامج قم بالضغط على مفتاح الهروب أو الخروج Esc في الزاوية اليسرى
العلوية للوحة المفاتيح .
الصور الملتقطة بنوعين PNG و BMP
البرنامج على المرفقات
كود البرنامج على لغة Autoit لمن يريد الإستفاده منه .... في حفض الله
أعتذر سبق و عرضت سكاربت البرنامج على كود PHP
و حدثت أخطاء في السكاربت بعض الشرط إنحذفت بسبب أن أوامر
هذه اللغة لا تتناسب مع هذا النوع من الكود و أرجو كذالك أن لا
تكون هناك أخطاء بالمواضيع الأخرى الآن قمت باستخدام الكود
العادي و الأوامر كاملة وصحيحة .
C كود المصدر
- #include <WindowsConstants.au3>
- #include <GDIPlus.au3>
- #include <WinAPI.au3>
- #include <WindowsConstants.au3>
- #include <StructureConstants.au3>
- #include <ScreenCapture.au3>
- Global $Child = "" ,$ChildArray[1][5] , $PTR_Chi , $WINhwnd , _
- $hPen , $ForegroundX , $Capture , $CHK
- HotKeySet("{PRINTSCREEN}", "ChildWindowsCapture")
- HotKeySet("{ESC}", "Terminate")
- HotKeySet("{HOME}", "AllChildWindowsCapture")
- $hPen = _WinAPI_CreatePen($PS_SOLID,5,0xFF)
- While 1
- GetWindowsMose()
- WEnd
- Func AllChildWindowsCapture()
- DirCreate(@ScriptDir & "\AllCapture")
- $WindowArray = GetChildWindows(_WinAPI_GetForegroundWindow())
- _GDIPlus_Startup ()
- For $i = 0 To UBound($WindowArray) - 1
- _WinAPI_RedrawWindow($WindowArray[$i][0], 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
- $hBitmap = BitmapCreateFromControlHWND($WindowArray[$i][0])
- $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)
- _GDIPlus_ImageSaveToFile ($hBitmap, @ScriptDir & "\AllCapture\" & $WindowArray[$i][0] & ".bmp")
- _GDIPlus_ImageSaveToFile ($hBitmap, @ScriptDir & "\AllCapture\" & $WindowArray[$i][0] & ".png")
- _WinAPI_DeleteObject ($hBitmap)
- Next
- _GDIPlus_ShutDown ()
- EndFunc
- Func GetWindowsMose()
- $pos = MouseGetPos()
- $Foreground = _WinAPI_GetForegroundWindow()
- $ChildArray = GetChildWindows($Foreground)
- _WinAPI_RedrawWindow($ForegroundX, 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
- Sleep(500)
- if IsArray($pos) And IsArray($ChildArray) Then
- $CHK = False
- For $i = 0 To UBound($ChildArray) - 1
- $ML = $pos[0]
- $MT = $pos[1]
- $hwnd = $ChildArray[$i][0]
- $L = $ChildArray[$i][1]
- $T = $ChildArray[$i][2]
- $W = $ChildArray[$i][3]
- $H = $ChildArray[$i][4]
- if ($ML >= $L ) And ($ML <= ($L + $W)) _
- And ($MT >= $T ) And ($MT <= ($T + $H)) Then
- $WINhwnd = $hwnd
- $LX = $L
- $TX = $T
- $WX = $W
- $HX = $H
- $CHK = True
- $ForegroundX = $Foreground
- $Capture = $WINhwnd
- EndIf
- Next
- IF $CHK = True And ($WINhwnd) Then
- $hDC = _WinAPIGetDC($WINhwnd)
- $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
- _WinAPI_DrawLine($hDC,0,0,$WX,0)
- _WinAPI_DrawLine($hDC,0,0,0,$HX)
- _WinAPI_SelectObject($hDC, $obj_orig)
- Sleep(300)
- Else
- $RECT = _WinAPI_GetWindowRect($Foreground)
- $Capture = $Foreground
- $Desktop = _WinAPI_GetDesktopWindow()
- if ($Desktop) Then
- $hDC = _WinAPI_GetWindowDC($Desktop)
- $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
- $Left = DllStructGetData($RECT,1)
- $Top = DllStructGetData($RECT,2)
- $Right = DllStructGetData($RECT,3)
- $Bottom = DllStructGetData($RECT,4)
- $L = $Left
- $T = $Top
- $W = $Right - $Left
- $H = $Bottom - $Top
- if $Left < 0 Then $Left = 0
- if $Right < 0 Then $Right = _WinAPI_GetSystemMetrics(0)
- if $Top < 0 Then $Top = 0
- if $Bottom < 0 Then $Bottom = _WinAPI_GetSystemMetrics(1)
- _WinAPI_DrawLine($hDC,$Left,$Top,$Right,$Top)
- _WinAPI_DrawLine($hDC,$Right,$Top,$Right,$Bottom)
- _WinAPI_SelectObject($hDC, $obj_orig)
- Sleep(300)
- $ForegroundX = $Desktop
- EndIf
- EndIf
- EndIf
- EndFunc
- Func ChildWindowsCapture()
- DirCreate(@ScriptDir & "\Capture")
- _WinAPI_RedrawWindow($Capture, 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
- if $CHK = True Then
- $hBitmap = BitmapCreateFromControlHWND($Capture)
- _GDIPlus_Startup ()
- $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)
- _GDIPlus_ImageSaveToFile ($hBitmap, @ScriptDir & "\Capture\" & $WINhwnd & ".bmp")
- _GDIPlus_ImageSaveToFile ($hBitmap, @ScriptDir & "\Capture\" & $WINhwnd & ".png")
- _WinAPI_DeleteObject ($hBitmap)
- _GDIPlus_Shutdown ()
- Else
- _ScreenCapture_CaptureWnd(@ScriptDir & "\Capture\" & $WINhwnd & ".bmp",$Capture)
- _ScreenCapture_CaptureWnd(@ScriptDir & "\Capture\" & $WINhwnd & ".png",$Capture)
- EndIf
- EndFunc
- Func GetChildWindows($hWndParent)
- If Not ($PTR_Chi) Then $PTR_Chi = RegisterEnumChildProc("CALLBACK_EnumChildProc")
- EnumChildWindows($hWndParent , $PTR_Chi)
- if UBound($ChildArray) > 1 Then _
- ReDim $ChildArray[UBound($ChildArray) - 1][5]
- Return $ChildArray
- EndFunc
- Func EnumChildWindows($hWndParent , $lpEnumFunc)
- Local $lParam = 0
- Global $Child = ""
- Global $ChildArray = 0
- Dim $ChildArray[1][5]
- $BOOL = DllCall("user32.dll","int","EnumChildWindows","hwnd",$hWndParent,"ptr",$lpEnumFunc,"int",$lParam)
- if Not @error Then Return SetError(@error,"",$BOOL[0])
- Return SetError(@error,"",False)
- EndFunc
- Func RegisterEnumChildProc($lpEnumFunc)
- $handle = DLLCallbackRegister ($lpEnumFunc, "int", "hwnd;int")
- Return DllCallbackGetPtr($handle)
- EndFunc
- Func CALLBACK_EnumChildProc($hwnd,$lParam)
- $Test = False
- For $i = 0 To UBound($ChildArray) - 1
- if $hwnd = $ChildArray[$i][0] Then $Test = True
- Next
- if $Test = False Then
- $RECT = _WinAPI_GetWindowRect($hWnd)
- $Left = DllStructGetData($RECT,1)
- $Top = DllStructGetData($RECT,2)
- $Right = DllStructGetData($RECT,3)
- $Bottom = DllStructGetData($RECT,4)
- $L = $Left
- $T = $Top
- $W = $Right - $Left
- $H = $Bottom - $Top
- $ChildArray[UBound($ChildArray) - 1][0] = $hwnd
- $ChildArray[UBound($ChildArray) - 1][1] = $L
- $ChildArray[UBound($ChildArray) - 1][2] = $T
- $ChildArray[UBound($ChildArray) - 1][3] = $W
- $ChildArray[UBound($ChildArray) - 1][4] = $H
- ReDim $ChildArray[UBound($ChildArray) + 1][5]
- Return True
- Else
- Return False
- EndIf
- EndFunc
- Func BitmapCreateFromControlHWND($HWND)
- Local $Width = _WinAPI_GetWindowWidth($hWnd)
- Local $Height =_WinAPI_GetWindowHeight($hWnd)
- $DC = _WinAPIGetDC($HWND)
- $CompatibleDC = _WinAPI_CreateCompatibleDC($DC)
- $hBitmap = _WinAPI_CreateCompatibleBitmap($DC,$Width, $Height)
- _WinAPI_SelectObject($CompatibleDC, $hBitmap)
- _WinAPI_BitBlt($CompatibleDC, 0, 0, $Width, $Height, $DC, 0, 0,$SRCCOPY)
- Return $hBitmap
- EndFunc
- Func _WinAPIGetDC($hWnd)
- Local $aResult
- $aResult = DllCall("User32.dll", "hwnd", "GetDC", "hwnd", $hWnd)
- if Not @error Then Return $aResult[0]
- Return 0
- EndFunc ;==>_WinAPIGetDC
- Func Terminate()
- _WinAPI_RedrawWindow($Capture, 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
- Exit 0
- EndFunc
