Bloquage souris pdt execution de l'application

Signaler
Messages postés
40
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
Messages postés
40
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
Bonjour à tous,

Comme je pense que d'autres ont déjà résolu ce genre de probleme alors je pose la question ici en espérant avoir rapidement une réponse.

 Voila mon soucis :

je crée une apllication permettant de faire un screenshot (imprim ecran) toutes les x secondes (min 5sec).
Ce screenshot enregistre l'image au format jpg pour prendre le moinde place possible.

Cependant à chq screenshot la souris reste bloquée pdt qq millisecondes et cela est génant si le programme tourne tout le temps. j'ai essayé de mettre en thread mais je maitrise pas encore au top cette fonctionnalité.

voici le code faisant appelle a la fonction Shotscreen

'capture de l'ecran

Dim t
As Threadt =

New Thread(
AddressOf ShotScreen)t.Start()

J'attend vos conseil, avis ou résolutions ....

Merci à tous par avance !

7 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Salut,

Ben, ou est le problème ?
Pour l'instant, ce que tu a fait est juste.






__________
Kenji
Messages postés
40
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
15 mai 2008

le problème c'est que ca bloque qd meme la souris pdt quelques millisecondes et je veux pas :(


 
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Si c'est ca on ne peut rien faire. C'est du à la lenteur de la prise de la capture.
Donne nous plutôt le code que tu emplois pour faire la capture.





__________
Kenji
Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
moi je dirais que ça vient de la compression en jpg !

@+

E.B.
Messages postés
40
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
15 mai 2008

je viens de tester sans la compression jpg et ca donne tjrs la meme chose :(

voici le code en entier du module :

Imports

System.Threading
Module

Module1

Public
Declare
Function BitBlt
Lib
"GDI32" (
ByVal hDestDC
As IntPtr,
ByVal X
As
Integer,
ByVal Y
As
Integer,
ByVal nWidth
As
Integer,
ByVal nHeight
As
Integer,
ByVal hSrcDC
As IntPtr,
ByVal SrcX
As
Integer,
ByVal SrcY
As
Integer,
ByVal Rop
As
Integer)
As
Integer

Public
Declare
Function GetForegroundWindow
Lib
"user32" ()
As IntPtr

Public
Declare
Function GetWindowRect
Lib
"user32.dll" (
ByVal hWnd
As IntPtr,
ByRef lpRect
As Rectangle)
As
Integer

Public
Declare
Function GetDesktopWindow
Lib
"user32" ()
As IntPtr

Public DesktopRect
As Rectangle = Screen.GetBounds(
New Point(0, 0))
'obtient la taille du bureau sous forme de rectangle dans DesktopRect

Public cpt = 0
'compteur timer

'Capture tout l'écran

Sub ShotScreen()

Dim image
As Bitmap

'Dim tmppathimage = ShotScreenPart(DesktopRect.Width, DesktopRect.Height)

'appele la fonction ShotScreenPart avec les dimensions du bureau.

'Dim tmpbmap As New System.Drawing.Bitmap(image)

'tmppath = Application.StartupPath & "\image - " & Minute(Now) & ".jpg"

'tmpbmap.Save(tmppath, System.Drawing.Imaging.ImageFormat.Jpeg)

End
Sub 

'Capture une partie de l'ecran, defini par les deux variable width et height (dimensions du rectangle), et des valeur optionels X et Y (base du rectangle)

Public
Function ShotScreenPart(
ByVal nwidth
As
Integer,
ByVal nheight
As
Integer,
Optional
ByVal x
As
Integer = 0,
Optional
ByVal y
As
Integer = 0)
As Bitmap

Dim resultBmp
As Bitmap =
New Bitmap(nwidth, nheight)
'crée l'objet bitmap cible

Dim SrcGraph
As Graphics = Graphics.FromHwnd(GetDesktopWindow)
'crée l'objet "graphics" SelGraph a partir du handdle du bureau

Dim BmpGraph
As Graphics = Graphics.FromImage(resultBmp)
'crée un objet graphics à partir du bitmap

Dim bmpDC
As IntPtr = BmpGraph.GetHdc()
'obtient le device context du bitmap

Dim hDC
As IntPtr = SrcGraph.GetHdc()
'obtient le device context du bureauBitBlt(bmpDC, 0, 0, nwidth, nheight, hDC, x, y, &HCC0020)

'"bit-block transfer" : copie chaque bits affichés dans le device context hDC dans le device context du bitmap SrcGraph.ReleaseHdc(hDC)

'relache le device context du bureauBmpGraph.ReleaseHdc(bmpDC)

'relache le device context du bitmapSrcGraph.Dispose()

BmpGraph.Dispose()

'libere toutes les ressources crées par l'objet (useless?)

Return resultBmp

End
FunctionEnd

Module
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Salut,

J'ai pas vérifier ton code mais regarde ici :
http://www.codyx.org/snippet_faire-capture-ecran_8.aspx


Ce sont pratiquement les mêmes methodes mais qui utilisent moins de trucs.





__________
Kenji
Messages postés
40
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
15 mai 2008

En fait a bien y regarder c'est la même provenance de code donc je pense pas que ca changera qq chose reellement...