Bonjour,
Je viens de VB6 et bosse sur VB.net depuis hier.
J'ai besoins de copie une fenetre windows pour ensuite récuperer des infos dessus.
J'ai fait le programme vb6, et en voyant le temps que ca prenait j'ai recommencé sur vb.net et exactement le même temps.
Ce que je ne m'explique pas c'est que si on copie un rectangle de l'écran vers une picturebox , et bien le temps est le même quelque soit la taille du rectangle ..
J'ai remarqué que si les couleurs de l'écran sont en 16bits.. c'est nettement plus rapide mais en 32bits.. c'est quand même lent. Et sur WIndows 10 impossible de passer les couleurs en 16bits, on ne peut plus..
Si vous avez une idée je suis preneur , car je suis perdu :: :-)

Voici le programme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Public Class Form1
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Declare Auto Function BitBlt Lib "GDI32.DLL" (ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As Int32) As Boolean
    Dim image
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim xdeb, xfin, ydeb, yfin As Integer
        Dim g1 As Graphics = Graphics.FromHwnd(GetDesktopWindow)
        Dim k As Integer
        xdeb = 0
        ydeb = 0
        xfin = 100
        yfin = 100
        image = New Bitmap(xfin - xdeb + 1, yfin - ydeb + 1, g1)
        Dim g2 As Graphics = Graphics.FromImage(image)
        Dim dc1 As IntPtr = g1.GetHdc
        Dim dc2 As IntPtr = g2.GetHdc
 
 
        ' Parametres
        Dim Stopwatch As System.Diagnostics.Stopwatch
        Stopwatch = New Stopwatch
 
        ' Initialisation : debut de la mesure
 
 
        Stopwatch.Start()
        For k = 0 To 100
            BitBlt(dc2, 0, 0, xfin - xdeb + 1, yfin - ydeb + 1, dc1, xdeb, ydeb, 13369376)
        Next k
 
        Stopwatch.Stop()
        ' Affichage de la mesure
        MessageBox.Show(Stopwatch.Elapsed().TotalSeconds & " secondes")
 
        PictureBox1.Image = image
        g1.ReleaseHdc(dc1)
        g2.ReleaseHdc(dc2)
 
 
    End Sub
End Class