Touche print screen ?

Résolu
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008
-
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
-
bonsoir,
je ne savais pas trop ou mettre ca ... en gros j'ai vu qu'on pouvais remplacer le contenu du clipboard par une picture via Clipboard.SetData
cependant j'aimerais faire un truc un peu plus "speciale" en gros j'aimerais faire que quand l'utilisateur de mon logiciel appuie sur la touche printscreen alors que mon prog est visible a l'ecran cela remplace le contenu du printscreen par une image contenue dans un picturebox qui a sur ma form donc en gros impossible de screener mon logiciel lorsqu'il est visible ^^

donc voila j'aimerais savoir comment intercepter la touche print screen lors d'un screen de l'ecran quand mon prog est visible et que sa remplace l'image contenue dans le clipboard donc le contenu du screen sois remplacer par l'image contenue dans une picturebox ^^

voila voila ses surement tout con mais bon je trouve pas :p

Merci d'avance a vous
Diablaman

15 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Extrait de l'ApiGuide et modifié pour ton besoin

A toi d'adapter maintenant.

'A mettre dans un module module -------------------------------------------
Public Const WH_KEYBOARD =  2 
Public Const VK_PRINTSCREEN = &H2C 
Declare Function CallNextHookEx Lib "user32" ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long 
Declare Function GetKeyState Lib "user32" ByVal nVirtKey As Long) As Integer 
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long 
Declare Function UnhookWindowsHookEx Lib "user32" ByVal hHook As Long) As Long 
Public hHook As Long 

Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
    'if idHook is less than zero, no further processing is required
    If idHook < 0 Then 
        'call the next hook
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam) 
    Else 
        'check if PRINTSCREEN is pressed
        If (GetKeyState(VK_PRINTSCREEN) And &HF0000000) Then 
            Clipboard.SetData  LoadPicture ("Chemin\NomDeTonFichier") 
        End If 
        'call the next hook
        KeyboardProc  = CallNextHookEx(hHook, idHook, wParam, ByVal lParam) 
    End If 
End Function 
'---------------------------------------------------------------------------

' A mettre dans une form ----------------------------------------------------
Private Sub Form_Load() 
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'set a keyboard hook
    hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID) 
End Sub 
Private Sub Form_Unload(Cancel As Integer) 
    'remove the windows-hook
    UnhookWindowsHookEx hHook 
End Sub 
'---------------------------------------------------------------------------

<small>Coloration syntaxique
automatique</small>

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Bonsoir tout le monde,
Avec des parenthèses pour recevoir les paramètres des fonctions sa marche mieux je crois :)

Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
LoadPicture sert à charger une image depuis un fichier, ici comme c'est pas un fichier tu fais directement :
Clipboard.SetData Form1.Picture1.Picture

Ciaò
[mailto:madmatt_12@msn.com MadMatt]
www.madmatt.fr.st
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Regarde les sources permettant d'intercepter cette fameuse touche (toutes les sources de capture d'écran en fait), et quand tu l'intercepte, il te suffit de redéfinir le contenu du presse-papier avec l'image que tu veux.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Peut-être avec la fonction d'API GetKeyState, voir si la touche Print Screen est prise en compte

@++
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Effectivement avec GetKeyState, en faisant un Hook.

Mais c'est surrement ce que va trouver Daiblaman dans les différentes sources du site.

De plus c'est le seul moyen, car VB ne reçoie pas d'évènement sur la touche PrintScreen, elle est filtrée par le système.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Etonnant DarkSidious ;) , que tu ne fasses pas de pub pour tes APIs :

http://www.vbfrance.com/codes/AIDE-SUR-PRINCIPALES-API_4514.aspx

++
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008

j'ai trouver dans l'aide d'api ca :

' Exemple de Philippe Plançon : plancon@onetelnet.fr

' Coordonnées d'un point de l'écran
Private Type
POINTAPI
    x As Long
    y
As Long
End Type

' Retourne la position de la souris sur l'écran
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI)
As Long

' Teste si une touche est enfoncée
Private Declare Function
GetKeyStateLib "user32" (ByVal nVirtKey
As Long) As Integer

' Déclaration des touches
Const VK_LBUTTON = 1
' Left mouse button

Private Sub
Timer1_Timer()

    ' Déplacez-vous où vous voulez et appuyez sur le bouton gauche
    ' de la souris et hop on sait tout quand on veut

    '---Déclaration des variables---
    Dim Coord As
POINTAPI
    '---Affiche les coordonnées du curseur de la souris---
    If
GetKeyState(VK_LBUTTON) >= 0 Then
        Me.Caption = "Bouton gauche de la souris relaché"
    Else
        GetCursorPos Coord        Me.Caption "Bouton gauche de la souris enfoncé : x " & _
                     Coord.x & " , y = " & Coord.y
    End If
End Sub

-----------------------------------------------------------
j'ai tenter de modifier de cette maniere :
-----------------------------------------------------------

' Teste si une touche est enfoncée
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
' Déclaration des touches
Const VK_SNAPSHOT = 1






Private Sub Timer1_Timer()
    If GetKeyState(VK_SNAPSHOT) >= 0 Then
        Me.Caption = "Bouton screen relaché"
    Else
        Me.Caption = "Bouton screen relacher"
    End If
End Sub

-----------------------------------------------------------

et ca veut pas allez quelqu'un aurais t'il une solution ?
et comment faire pourredéfinir le contenu du presse-papier avec l'image que je veux ?
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008

il me met les lignes suivantes en rouge :

Declare Function CallNextHookEx Lib "user32" ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" ByVal nVirtKey As Long) As Integer
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" ByVal hHook As Long) As Long

je met pas les autres lignes car j'ai bien mis en module comme tu dis et en form comme tu dis mais ses lignes ci dessus qui sont en modules se mette en rouge :s

je suis sous vb6 j'ai oublier de preciser
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008

ca fonctionne bien les lignes maintenant ^^
mais le prob maintenant est le suivant :

Clipboard.SetData LoadPicture("Chemin\NomDeTonFichier") 

je veux pas que sa prenne d'un fichier externe mais d'une picture box j'ai donc mis :

Clipboard.SetData LoadPicture(Form1.Picture1.Picture) 

et il me fais une erreur :

erreur d'execution 53




fichier introuvable : 1812273418

je fais comment pour regler ce ptit probleme ?
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008

ca fonctionne nikel maintenant cependant (je sais je suis chiant :p) il intercepte la touche que si ma form est "active" donc qu'elle a le "focus" enfin je sais pas si vous voyez se que je veux dire ^^ en gros si mon prog est pas actif mais qu'on le vois la touche print sera pas interceptee :s il faudrais un truc genre qui verifie si l'interface de mon logiciel est presente dans le screen ou koi enfin vous voyez ce que je veux dire ?
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Pour savoir si la form est visible, teste avec les propriétés .Left .Top etc.. de ta form.
Il faut que .Left>0 et que .Left+.Width<Screen.Width
Après pour capturer la touche appuyée meme quand la form n'est pas active je ne me souviens plus comment il faut faire, mais quelqu'un d'autre le sais surement

Ciaò
[mailto:madmatt_12@msn.com MadMatt]
www.madmatt.fr.st
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Pour Casy :

Attention, ma source contient quelques bugs --> lors de la coloration syntaxique automatique, les parenthèses d'ouvertures dans les fonctions d'API disparaissent.

Promis, je fais au plus vite pour faire la MAJ (enfin, une des MAJ...)
Mais ce sera dans la prochaine, je te tiens au courant par MP

Désolé !

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Je le savais mais je n'y ai pas repenser.

[ModeHumour=True]
    De toute façon, moi pas ma faute, le coupable c'est Mortalino. Et puis NA
    Non mais, des fois ...
[ModeHumour=False]

Je suis impatient pour la v2.0

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
9
Ok les gars, ça marche nikel, seuleument mon problème est le suivant:

Si je mets la fenêtre de mon appli en arrière plan et que j'en lance une autre, genre mozilla.
Je peux faire un imprim écran, car mon prog n'est pas en 1ere ligne, donc il autorise le PRTSCR
Donc Carotte! Comment faire pr que le print screen soit empêcher si l'appli est lancé tout court et pas seuleument au premier plan?

TBBUIM