Récupérer l'image du curseur de la souris [Résolu]
Récupérer l'image du curseur de la souris [Résolu]
Bonjour à tous,
Je fais des copies d'écran, mais le curseur de la souris n'est pas visible.
J'aimerais pourtant capturer l'image du curseur de la souris.
Est-ce que quelqu'un aurait un chti bout de code pour récupérer l'image du curseur.
Merci d'avance
Stef
Je fais des copies d'écran, mais le curseur de la souris n'est pas visible.
J'aimerais pourtant capturer l'image du curseur de la souris.
Est-ce que quelqu'un aurait un chti bout de code pour récupérer l'image du curseur.
Merci d'avance
Stef
Dernière modification par Stefou le sam. 15/sept./2012 15:48, modifié 1 fois.
Re: Récupérer l'image du curseur de la souris
Voilà un code de LSI qui permet de changer le curseur, je me dis qu'il y a surement de quoi le récupérer du coup.
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
;
; Explication du programme :
; Changer le curseur de la souris au dessus d'un gadget
Procedure SetGadgetCursor_SubClassProc(hwnd, msg, wparam, lparam)
Protected oldproc, Cursor
oldproc = GetProp_(hwnd, "oldproc")
Select msg
Case #WM_NCDESTROY
RemoveProp_(hwnd, "oldproc")
RemoveProp_(hwnd, "cursor")
Case #WM_SETCURSOR
Cursor = GetProp_(hwnd, "cursor")
SetCursor_(Cursor)
ProcedureReturn 0
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hwnd, msg, wparam, lParam)
EndProcedure
Procedure SetGadgetCursor(Gadget, Cursor) ; Change le curseur de la souris au dessus d'un Gadget
If GetProp_(GadgetID(Gadget), "cursor")
RemoveProp_(GadgetID(Gadget), "cursor")
EndIf
SetProp_(GadgetID(Gadget), "cursor", Cursor)
If GetProp_(GadgetID(Gadget), "oldproc") = 0
SetProp_(GadgetID(Gadget), "oldproc", SetWindowLongPtr_(GadgetID(Gadget), #GWL_WNDPROC, @SetGadgetCursor_SubClassProc()))
EndIf
SendMessage_(GadgetID(Gadget), #WM_SETCURSOR , 0, 0)
EndProcedure
Enumeration
#Bouton
EndEnumeration
; Valeurs possibles pour le curseur :
#IDC_ARROW = 32512 ; la flèche (le curseur normal)
#IDC_IBEAM = 32513 ; curseur sélection de texte
#IDC_UPARROW = 32516 ; flèche qui pointe vers le haut
#IDC_APPSTARTING = 32650 ; curseur attente (flèche + sablier)
#IDC_WAIT = 32514 ; curseur occupé (sablier)
#IDC_CROSS = 32515 ; curseur précision de la sélection (croix)
#IDC_SIZENWSE = 32642 ; curseur de dimensionnment, pointe le NordOuest et le SudEst
#IDC_SIZENESW = 32643 ; curseur de dimensionnment, pointe le NE et le SO
#IDC_SIZEWE = 32644 ; curseur de dimensionnment, pointe le E et le O
#IDC_SIZENS = 32645 ; curseur de dimensionnment, pointe le N et le S
#IDC_SIZEALL = 32646 ; curseur de déplacement, pointe le N, S, E et O
#IDC_HELP = 32651 ; curseur aide
#IDC_HAND = 32649 ; curseur main
#IDC_NO = 32648 ; curseur "interdit" (panneau d'interdiction)
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "SetGadgetCursor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
ButtonGadget(#Bouton, 20, 20, 128, 128, "Nouveau curseur")
Curseur = LoadCursor_(0, #IDC_HAND) ; Charge le curseur
SetGadgetCursor(#Bouton, Curseur) ; Applique le curseur au gadget
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case #Bouton
DestroyCursor_(Curseur) ; Supprime l'ancien curseur
Curseur = LoadCursor_(0, #IDC_HELP) ; Charge le curseur
SetGadgetCursor(#Bouton, Curseur) ; Applique le curseur au gadget
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
DestroyCursor_(Curseur) ; Supprime le curseur
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Récupérer l'image du curseur de la souris
C'est gentil....mais ça ne fait pas vraiment avancer le chmilblick !
Re: Récupérer l'image du curseur de la souris
Un peu HS (désolé) mais peut être pas tant que ça.
A ce que j'ai pu lire, l'API BitBlt_ que tu dois (je suppose) utiliser dans ton screenshot ne capture pas le curseur.
La solution récurente que j'ai lu est que les gens capturent l'image puis le curseur et superposent les 2.
un code non PB qui devrait être adaptable sans trop galérer.
http://www.codeproject.com/Articles/128 ... use-Cursor
A ce que j'ai pu lire, l'API BitBlt_ que tu dois (je suppose) utiliser dans ton screenshot ne capture pas le curseur.
La solution récurente que j'ai lu est que les gens capturent l'image puis le curseur et superposent les 2.
un code non PB qui devrait être adaptable sans trop galérer.
http://www.codeproject.com/Articles/128 ... use-Cursor
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Récupérer l'image du curseur de la souris
Effectivement cela m'aide davantage, reste à voir ci j'y comprends quelque chose....
Merci
Si quelqu'un à quelque chose de plus pure....basic, c'est pas de refus.
Merci
Si quelqu'un à quelque chose de plus pure....basic, c'est pas de refus.
Re: Récupérer l'image du curseur de la souris
Je suis trop impressionné par moi même et les infos sur les forums!!!
Je m'en suis sortie !
Ce code ne marchera surement partout, mais il marche chez moi. Par exemple j'ai mis la taille du curseur à 32*32, c'est pas le cas chez tous le monde....
Je m'en suis sortie !
Ce code ne marchera surement partout, mais il marche chez moi. Par exemple j'ai mis la taille du curseur à 32*32, c'est pas le cas chez tous le monde....
Code : Tout sélectionner
Procedure DessineCurseurSouris(StartDrawingDC,x,y)
curst.CURSORINFO
curst\Flags = CURSOR_SHOWING
curst\cbSize = SizeOf(CURSORINFO)
res=GetCursorInfo_(curst)
DrawIconEx_(StartDrawingDC, x, y, curst\hCursor, 32, 32, 0, 0, #DI_NORMAL)
EndProcedure
OpenWindow(0,40,40,100,100,"Le curseur", #PB_Window_SystemMenu )
StickyWindow(0,1)
ImageGadget(0,0,0,10,10,0)
AddWindowTimer(0,1,200)
Repeat
event=WaitWindowEvent()
Select event
Case #PB_Event_Timer
If CreateImage(1,100,100)
StartDrawingID =StartDrawing(ImageOutput(1))
Box(3,3,94,94,$9CEBA8)
DessineCurseurSouris(StartDrawingID,5,5)
StopDrawing()
SetGadgetState(0,ImageID(1))
EndIf
EndSelect
Until event=#WM_CLOSE
Re: Récupérer l'image du curseur de la souris [Résolu]
Bien joué, 
pour info il marche chez moi aussi

pour info il marche chez moi aussi
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Récupérer l'image du curseur de la souris [Résolu]
une petite variante ( que j'avais en stock ) (Merci Nico )
Code : Tout sélectionner
#CAPTUREBLT = $40000000
Procedure CaptureScreen(hdc,x,y,w,h,blayered=0)
Protected thdc,img
img = CreateImage(-1,w,h)
thdc = StartDrawing(ImageOutput(img))
If blayered
rt = BitBlt_(thdc,0,0,w,h,hdc,0,0,#SRCCOPY | #CAPTUREBLT);
Else
rt = BitBlt_(thdc,0,0,w,h,hdc,0,0,#SRCCOPY);
EndIf
StopDrawing()
ProcedureReturn img
EndProcedure
UseJPEGImageEncoder()
UsePNGImageDecoder()
ExamineDesktops()
w= DesktopWidth(0)
h=DesktopHeight(0)
; ************************ ici on recupe le curseur *****************************
GetCursorPos_(point.POINT)
pci.CURSORINFO\cbSize=SizeOf(CURSORINFO)
GetCursorInfo_(@pci)
hIcon=CopyIcon_(pci\hCursor)
GetIconInfo_(hIcon, @info.ICONINFO)
hdc = GetDC_(0)
If hIcon
DrawIcon_(hdc ,point\x-left-info\xHotspot,point\Y-top-info\yHotspot, hIcon) ; on dessine le curseur dans le Context (hdc) courant
EndIf
; **************************************************************************
img = CaptureScreen(hdc,0,0,w,h)
SaveImage(img,"c:\test.bmp",#PB_ImagePlugin_BMP) ; ecrit les shoot dans un dossier Test sur c:\
;SaveImage(img,"c:\test.png",#PB_ImagePlugin_PNG) ; dans 3 formats
;SaveImage(img,"c:\test.jpg",#PB_ImagePlugin_JPEG)
RunProgram("c:\test.bmp") ; on ouvre l'image bmp .. elle contient le curseur souris
;
; EPB
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Récupérer l'image du curseur de la souris [Résolu]
En modifiant son code on peut obtenir une capture en temps reel du desktop.
Il suffit de rajouter un raccourci clavier pour récupérer l'image avec la souris.
Dobro tu m'a grillé d'une minute mais je laisse le code car sa fonctionnalité est différent de ton code
Code : Tout sélectionner
Global Handle_Image.l
Procedure Capture(Handle_Image.l, Handle_DC, ScreenWidth, ScreenHeight)
Protected curst.CURSORINFO
#CAPTUREBLT = $40000000
Result = StartDrawing(ImageOutput(Handle_Image))
;Capture de l'ecran
BitBlt_(Result, 0, 0, ScreenWidth, ScreenHeight, handle_DC, 0, 0, #SRCCOPY|#CAPTUREBLT)
;GetCursor_() : API qui récupère non pas l'image du curseur actif, mais son handle.
curst\hCursor = GetCursor_() ;Cette ligne là peut etre commenter
curst\cbSize = SizeOf(curst)
GetCursorInfo_(curst)
cx = (curst\ptScreenPos\x)
cy = (curst\ptScreenPos\y)
DrawIconEx_(Result, cx, cy, curst\hCursor, 0,0,0,0, #DI_DEFAULTSIZE|#DI_NORMAL)
StopDrawing()
EndProcedure
OpenWindow(0,0,0,720,450,"Capture ecran",#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ExamineDesktops()
Handle_Image = CreateImage(#PB_Any, DesktopWidth(0), DesktopHeight(0))
ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(Handle_Image))
AddWindowTimer(0, 1, 50)
Repeat
event=WaitWindowEvent()
Select event
Case #PB_Event_Timer
Capture(Handle_Image, GetDC_(GetDesktopWindow_()), DesktopWidth(0), DesktopHeight(0))
SetGadgetState(0,ImageID(Handle_Image))
EndSelect
Until event=#WM_CLOSE
Dobro tu m'a grillé d'une minute mais je laisse le code car sa fonctionnalité est différent de ton code

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Récupérer l'image du curseur de la souris [Résolu]
J'adoooorefalsam a écrit :En modifiant son code on peut obtenir une capture en temps reel du desktop.Il suffit de rajouter un raccourci clavier pour récupérer l'image avec la souris.Code : Tout sélectionner
Global Handle_Image.l Procedure Capture(Handle_Image.l, Handle_DC, ScreenWidth, ScreenHeight) Protected curst.CURSORINFO #CAPTUREBLT = $40000000 Result = StartDrawing(ImageOutput(Handle_Image)) ;Capture de l'ecran BitBlt_(Result, 0, 0, ScreenWidth, ScreenHeight, handle_DC, 0, 0, #SRCCOPY|#CAPTUREBLT) ;GetCursor_() : API qui récupère non pas l'image du curseur actif, mais son handle. curst\hCursor = GetCursor_() ;Cette ligne là peut etre commenter curst\cbSize = SizeOf(curst) GetCursorInfo_(curst) cx = (curst\ptScreenPos\x) cy = (curst\ptScreenPos\y) DrawIconEx_(Result, cx, cy, curst\hCursor, 0,0,0,0, #DI_DEFAULTSIZE|#DI_NORMAL) StopDrawing() EndProcedure OpenWindow(0,0,0,720,450,"Capture ecran",#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ExamineDesktops() Handle_Image = CreateImage(#PB_Any, DesktopWidth(0), DesktopHeight(0)) ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(Handle_Image)) AddWindowTimer(0, 1, 50) Repeat event=WaitWindowEvent() Select event Case #PB_Event_Timer Capture(Handle_Image, GetDC_(GetDesktopWindow_()), DesktopWidth(0), DesktopHeight(0)) SetGadgetState(0,ImageID(Handle_Image)) EndSelect Until event=#WM_CLOSE
Dobro tu m'a grillé d'une minute mais je laisse le code car sa fonctionnalité est différent de ton code

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Re: Récupérer l'image du curseur de la souris [Résolu]
t'as plutôt intérêt !falsam a écrit :Dobro tu m'a grillé d'une minute mais je laisse le code car sa fonctionnalité est différent de ton code

