منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
كلاس التقاط النافذة النشطة - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مكتبة اكواد VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=185)
+--- الموضوع : كلاس التقاط النافذة النشطة (/showthread.php?tid=21347)



كلاس التقاط النافذة النشطة - سعود - 11-08-17

اضف كلاس جديد وضع التالي ضمنه
PHP كود :
Imports System.Runtime.InteropServices

Public Class ScreenCapturer
    
<DllImport("user32.dll")> _
    Private Shared 
Function GetForegroundWindow() As IntPtr
    End 
Function

 
   <DllImport("user32.dll")> _
    Private Shared 
Function GetWindowRect(hWnd As IntPtrByRef rect As Rect) As IntPtr
    End 
Function

 
   <StructLayout(LayoutKind.Sequential)> _
    Private Structure Rect
        Public Left 
As Integer
        Public Top 
As Integer
        Public Right 
As Integer
        Public Bottom 
As Integer
    End Structure

    Public 
Function Capture(Optional activeWindowOnly As Boolean True) As Bitmap
        Dim bounds 
As Rectangle

        If Not activeWindowOnly Then
            bounds 
Screen.GetBounds(Point.Empty)
 
           CursorPosition Cursor.Position
        Else
            Dim foregroundWindowsHandle 
GetForegroundWindow()
 
           Dim rect = New Rect()
 
           GetWindowRect(foregroundWindowsHandlerect)
 
           bounds = New Rectangle(rect.Leftrect.Toprect.Right rect.Leftrect.Bottom rect.Top)
 
           CursorPosition = New Point(Cursor.Position.rect.LeftCursor.Position.rect.Top)
 
       End If

 
       Dim result = New Bitmap(bounds.Widthbounds.Height)

 
       Using g Graphics.FromImage(result)
 
           g.CopyFromScreen(New Point(bounds.Leftbounds.Top), Point.Empty, bounds.Size)
 
       End Using

        Return result
    End 
Function

 
   Public Property CursorPosition() As Point
End 
Class 
والتالي كلاس الفورم
PHP كود :
Imports System.Drawing.Imaging
Public Class Form1
    Dim a 
As Integer 0
    Public Sub ScreenCopy
(Optional file As String "test.jpg")
 
       Dim sc = New ScreenCapturer()
 
       Using bitmap sc.Capture()
 
           bitmap.Save(fileImageFormat.Jpeg)
 
           Process.Start(file' for test purposes
        End Using
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.Hide()
        ScreenCopy(a & ".jpg")
        Me.Show()
        a += 1
    End Sub
End Class 



RE: كلاس التقاط النافذة النشطة - silverlight - 11-08-17

منذ بضعة أعوام أنا كنت متخيل إن الدالة GetForegroundWindow
بتحدد نافذة موجودة علي سطح المكتب لكن الأيام أثبتت لي انها بتحدد صورة سطح المكتب


عموما ما أريد أن أقوله لك أنك تستطيع الاستغناء عن دوال API الخاصة بمايكروسوفت تماما

فالفكرة كلها تنحصر في مقارنة الصور مع بعضها البعض
ربما يكون اصعب جزء في الموضوع انك تعمل Scan لأي صورة ثم تحدد مستطيل معين داخل تلك الصورة ثم تقطع الصورة التي تمثل هذا المستطيل أيضا مايكروسوفت بتستخدم CursorPosition لتحديد مكان علي صورة سطح المكتب تستخدمه في حساب المستطيلات التي تمثل أبعاد اي فورم ظاهر علي سطح المكتب

الموضوع الموجود في الرابط التالي يوضح الأساس الجيد الذي يمكنك استخدامه

الرابط


ملحوظة أخيرة علي الكود الخاص بك
حاول ان تخفي الفورم لفترة زمنية مناسبة باستخدام Threading حتي لا يظهر في الصور


RE: كلاس التقاط النافذة النشطة - سعود - 11-08-17

الكلاس هذا وجدته بالنت ولا اقصد انه جديد بل اكتب هنا لكي اجده بسهولة لاحقاSmile
بارك الله فيكم اجمعين وشكر لكم مشاركتكم.