لاقط شاشة سهل الإستخدام و صغير الحجم

    • لاقط شاشة سهل الإستخدام و صغير الحجم

      تعديل بسيط على البرنامج تم التعديل على المرفق
      تعليمات الإستخدام
      HotKeySet("{PRINTSCREEN}", "ChildWindowsCapture")
      HotKeySet("{ESC}", "Terminate")
      HotKeySet("{HOME}", "AllChildWindowsCapture")0

      بعد تشغل البرنامج مباشرة يقوم بعمل منجل على النافذة و التي في مقدمة الشاشة
      للتقاطها تظغط على مفتاح PRINTSCREEN في لوحة المفاتيح يمكنك
      تمرير الماوس لتحديد جزء من برنامج أو نافذة كلأزرار أو القوائم ثم تضغط
      على نفس المفتاح ستجد الصورة الملتقطة بداخل مجلد جديد اسمه Capture
      و موقعه بجانب البرنامج

      يمكنك أخذ جميع النوافذ المتاحة لبرنامج على مقدمة الشاشة بالضغط على مفتاح
      HOME بلوحة المفاتيح حيث سيتم أخذ صور لجميع الأزرة و القوائم و أدوات
      التحكم للبرنامج ستجد الصور الملتقطة بجنب البرنامج في مجلد اسمه AllCapture

      لإقفال البرنامج قم بالضغط على مفتاح الهروب أو الخروج Esc في الزاوية اليسرى
      العلوية للوحة المفاتيح .

      الصور الملتقطة بنوعين PNG و BMP

      البرنامج على المرفقات

      كود البرنامج على لغة Autoit لمن يريد الإستفاده منه .... في حفض الله

      أعتذر سبق و عرضت سكاربت البرنامج على كود PHP
      و حدثت أخطاء في السكاربت بعض الشرط إنحذفت بسبب أن أوامر
      هذه اللغة لا تتناسب مع هذا النوع من الكود و أرجو كذالك أن لا
      تكون هناك أخطاء بالمواضيع الأخرى الآن قمت باستخدام الكود
      العادي و الأوامر كاملة وصحيحة .

      C كود المصدر

      1. #include <WindowsConstants.au3>
      2. #include <GDIPlus.au3>
      3. #include <WinAPI.au3>
      4. #include <WindowsConstants.au3>
      5. #include <StructureConstants.au3>
      6. #include <ScreenCapture.au3>
      7. Global $Child = "" ,$ChildArray[1][5] , $PTR_Chi , $WINhwnd , _
      8. $hPen , $ForegroundX , $Capture , $CHK
      9. HotKeySet("{PRINTSCREEN}", "ChildWindowsCapture")
      10. HotKeySet("{ESC}", "Terminate")
      11. HotKeySet("{HOME}", "AllChildWindowsCapture")
      12. $hPen = _WinAPI_CreatePen($PS_SOLID,5,0xFF)
      13. While 1
      14. GetWindowsMose()
      15. WEnd
      16. Func AllChildWindowsCapture()
      17. DirCreate(@ScriptDir & "\AllCapture")
      18. $WindowArray = GetChildWindows(_WinAPI_GetForegroundWindow())
      19. _GDIPlus_Startup ()
      20. For $i = 0 To UBound($WindowArray) - 1
      21. _WinAPI_RedrawWindow($WindowArray[$i][0], 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
      22. $hBitmap = BitmapCreateFromControlHWND($WindowArray[$i][0])
      23. $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)
      24. _GDIPlus_ImageSaveToFile ($hBitmap, @ScriptDir & "\AllCapture\" & $WindowArray[$i][0] & ".bmp")
      25. _GDIPlus_ImageSaveToFile ($hBitmap, @ScriptDir & "\AllCapture\" & $WindowArray[$i][0] & ".png")
      26. _WinAPI_DeleteObject ($hBitmap)
      27. Next
      28. _GDIPlus_ShutDown ()
      29. EndFunc
      30. Func GetWindowsMose()
      31. $pos = MouseGetPos()
      32. $Foreground = _WinAPI_GetForegroundWindow()
      33. $ChildArray = GetChildWindows($Foreground)
      34. _WinAPI_RedrawWindow($ForegroundX, 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
      35. Sleep(500)
      36. if IsArray($pos) And IsArray($ChildArray) Then
      37. $CHK = False
      38. For $i = 0 To UBound($ChildArray) - 1
      39. $ML = $pos[0]
      40. $MT = $pos[1]
      41. $hwnd = $ChildArray[$i][0]
      42. $L = $ChildArray[$i][1]
      43. $T = $ChildArray[$i][2]
      44. $W = $ChildArray[$i][3]
      45. $H = $ChildArray[$i][4]
      46. if ($ML >= $L ) And ($ML <= ($L + $W)) _
      47. And ($MT >= $T ) And ($MT <= ($T + $H)) Then
      48. $WINhwnd = $hwnd
      49. $LX = $L
      50. $TX = $T
      51. $WX = $W
      52. $HX = $H
      53. $CHK = True
      54. $ForegroundX = $Foreground
      55. $Capture = $WINhwnd
      56. EndIf
      57. Next
      58. IF $CHK = True And ($WINhwnd) Then
      59. $hDC = _WinAPIGetDC($WINhwnd)
      60. $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
      61. _WinAPI_DrawLine($hDC,0,0,$WX,0)
      62. _WinAPI_DrawLine($hDC,0,0,0,$HX)
      63. _WinAPI_SelectObject($hDC, $obj_orig)
      64. Sleep(300)
      65. Else
      66. $RECT = _WinAPI_GetWindowRect($Foreground)
      67. $Capture = $Foreground
      68. $Desktop = _WinAPI_GetDesktopWindow()
      69. if ($Desktop) Then
      70. $hDC = _WinAPI_GetWindowDC($Desktop)
      71. $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
      72. $Left = DllStructGetData($RECT,1)
      73. $Top = DllStructGetData($RECT,2)
      74. $Right = DllStructGetData($RECT,3)
      75. $Bottom = DllStructGetData($RECT,4)
      76. $L = $Left
      77. $T = $Top
      78. $W = $Right - $Left
      79. $H = $Bottom - $Top
      80. if $Left < 0 Then $Left = 0
      81. if $Right < 0 Then $Right = _WinAPI_GetSystemMetrics(0)
      82. if $Top < 0 Then $Top = 0
      83. if $Bottom < 0 Then $Bottom = _WinAPI_GetSystemMetrics(1)
      84. _WinAPI_DrawLine($hDC,$Left,$Top,$Right,$Top)
      85. _WinAPI_DrawLine($hDC,$Right,$Top,$Right,$Bottom)
      86. _WinAPI_SelectObject($hDC, $obj_orig)
      87. Sleep(300)
      88. $ForegroundX = $Desktop
      89. EndIf
      90. EndIf
      91. EndIf
      92. EndFunc
      93. Func ChildWindowsCapture()
      94. DirCreate(@ScriptDir & "\Capture")
      95. _WinAPI_RedrawWindow($Capture, 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
      96. if $CHK = True Then
      97. $hBitmap = BitmapCreateFromControlHWND($Capture)
      98. _GDIPlus_Startup ()
      99. $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)
      100. _GDIPlus_ImageSaveToFile ($hBitmap, @ScriptDir & "\Capture\" & $WINhwnd & ".bmp")
      101. _GDIPlus_ImageSaveToFile ($hBitmap, @ScriptDir & "\Capture\" & $WINhwnd & ".png")
      102. _WinAPI_DeleteObject ($hBitmap)
      103. _GDIPlus_Shutdown ()
      104. Else
      105. _ScreenCapture_CaptureWnd(@ScriptDir & "\Capture\" & $WINhwnd & ".bmp",$Capture)
      106. _ScreenCapture_CaptureWnd(@ScriptDir & "\Capture\" & $WINhwnd & ".png",$Capture)
      107. EndIf
      108. EndFunc
      109. Func GetChildWindows($hWndParent)
      110. If Not ($PTR_Chi) Then $PTR_Chi = RegisterEnumChildProc("CALLBACK_EnumChildProc")
      111. EnumChildWindows($hWndParent , $PTR_Chi)
      112. if UBound($ChildArray) > 1 Then _
      113. ReDim $ChildArray[UBound($ChildArray) - 1][5]
      114. Return $ChildArray
      115. EndFunc
      116. Func EnumChildWindows($hWndParent , $lpEnumFunc)
      117. Local $lParam = 0
      118. Global $Child = ""
      119. Global $ChildArray = 0
      120. Dim $ChildArray[1][5]
      121. $BOOL = DllCall("user32.dll","int","EnumChildWindows","hwnd",$hWndParent,"ptr",$lpEnumFunc,"int",$lParam)
      122. if Not @error Then Return SetError(@error,"",$BOOL[0])
      123. Return SetError(@error,"",False)
      124. EndFunc
      125. Func RegisterEnumChildProc($lpEnumFunc)
      126. $handle = DLLCallbackRegister ($lpEnumFunc, "int", "hwnd;int")
      127. Return DllCallbackGetPtr($handle)
      128. EndFunc
      129. Func CALLBACK_EnumChildProc($hwnd,$lParam)
      130. $Test = False
      131. For $i = 0 To UBound($ChildArray) - 1
      132. if $hwnd = $ChildArray[$i][0] Then $Test = True
      133. Next
      134. if $Test = False Then
      135. $RECT = _WinAPI_GetWindowRect($hWnd)
      136. $Left = DllStructGetData($RECT,1)
      137. $Top = DllStructGetData($RECT,2)
      138. $Right = DllStructGetData($RECT,3)
      139. $Bottom = DllStructGetData($RECT,4)
      140. $L = $Left
      141. $T = $Top
      142. $W = $Right - $Left
      143. $H = $Bottom - $Top
      144. $ChildArray[UBound($ChildArray) - 1][0] = $hwnd
      145. $ChildArray[UBound($ChildArray) - 1][1] = $L
      146. $ChildArray[UBound($ChildArray) - 1][2] = $T
      147. $ChildArray[UBound($ChildArray) - 1][3] = $W
      148. $ChildArray[UBound($ChildArray) - 1][4] = $H
      149. ReDim $ChildArray[UBound($ChildArray) + 1][5]
      150. Return True
      151. Else
      152. Return False
      153. EndIf
      154. EndFunc
      155. Func BitmapCreateFromControlHWND($HWND)
      156. Local $Width = _WinAPI_GetWindowWidth($hWnd)
      157. Local $Height =_WinAPI_GetWindowHeight($hWnd)
      158. $DC = _WinAPIGetDC($HWND)
      159. $CompatibleDC = _WinAPI_CreateCompatibleDC($DC)
      160. $hBitmap = _WinAPI_CreateCompatibleBitmap($DC,$Width, $Height)
      161. _WinAPI_SelectObject($CompatibleDC, $hBitmap)
      162. _WinAPI_BitBlt($CompatibleDC, 0, 0, $Width, $Height, $DC, 0, 0,$SRCCOPY)
      163. Return $hBitmap
      164. EndFunc
      165. Func _WinAPIGetDC($hWnd)
      166. Local $aResult
      167. $aResult = DllCall("User32.dll", "hwnd", "GetDC", "hwnd", $hWnd)
      168. if Not @error Then Return $aResult[0]
      169. Return 0
      170. EndFunc ;==>_WinAPIGetDC
      171. Func Terminate()
      172. _WinAPI_RedrawWindow($Capture, 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
      173. Exit 0
      174. EndFunc
      عرض الكل

    • شكرا لك اخي ناقوس
      فقط حبيت استفسر، هل هناك فرق بين هذا البرنامج وبين الطريقة العايدة لتصوير الشاشة من الكيبورد؟
      ،،،
      أنت اليوم حيث أتت أفكارك وستكون غدا حيث تأخذك أفكارك
    • AL~FaReS كتب:

      شكرا لك اخي ناقوس
      فقط حبيت استفسر، هل هناك فرق بين هذا البرنامج وبين الطريقة العايدة لتصوير الشاشة من الكيبورد؟
      ،،،


      مرحبا الفارس ... هناك فرق بالطبع لأن التصوير عن طريق الكيبورد باستخدام مفتاح
      PRINTSCREEN يصور الشاشة كاملة أما عن طريق البرنامج فيمكن تصوير
      النوافذ الأبناء Child Windows لنافذة الأم و هي طبعا عبارة عن مقاطع
      من النافذة مثل الأزرة و القوائم العلاقة بين الطريقتين هي فقط في استخدام نفس
      مفتاح الكيبورد
      PRINTSCREEN

      في حفض الله
    • [B]مشكور مشكور
      مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور مشكور
      مشكور مشكور مشكور
      مشكور مشكور
      مشكور

      [/B]
      قال رسول الله صلى الله عليه وسلم من دخل الســــوق فقــــــال : لا إله إالا الله وحده لا شريك له له الملك وله الحمد يحيى ويميت وهو حى لا يموت بيده الخير وهو على كل شيء قدير. كتب له ألف ألف حسنة ومحــــــا عنه ألف ألف سيئـــة ورفــــــع لـــه ألف ألف درجــــــــــــة