تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كلاس التقاط النافذة النشطة
#1
اضف كلاس جديد وضع التالي ضمنه
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 
الرد }}}
تم الشكر بواسطة: أبو نوره , sendbad100 , sendbad100 , سعود الشامان
#2
منذ بضعة أعوام أنا كنت متخيل إن الدالة GetForegroundWindow
بتحدد نافذة موجودة علي سطح المكتب لكن الأيام أثبتت لي انها بتحدد صورة سطح المكتب


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

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

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

الرابط


ملحوظة أخيرة علي الكود الخاص بك
حاول ان تخفي الفورم لفترة زمنية مناسبة باستخدام Threading حتي لا يظهر في الصور
Retired
الرد }}}
تم الشكر بواسطة: سعود , سعود الشامان
#3
الكلاس هذا وجدته بالنت ولا اقصد انه جديد بل اكتب هنا لكي اجده بسهولة لاحقاSmile
بارك الله فيكم اجمعين وشكر لكم مشاركتكم.
الرد }}}
تم الشكر بواسطة: أبو نوره , سعود الشامان


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كلاس بسيط لطباعة صورة الفورم silverlight 2 2,803 23-03-17, 03:22 PM
آخر رد: abdualla

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم