Touche print screen ?

Résolu
diablamanshadow Messages postés 419 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 28 janvier 2008 - 14 sept. 2006 à 20:33
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 - 27 nov. 2006 à 15:49
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

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
14 sept. 2006 à 23:11
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 #
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 21
14 sept. 2006 à 23:20
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
3
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
14 sept. 2006 à 23:40
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
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
14 sept. 2006 à 21:16
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
14 sept. 2006 à 21:46
Peut-être avec la fonction d'API GetKeyState, voir si la touche Print Screen est prise en compte

@++
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
14 sept. 2006 à 21:50
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 #
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
14 sept. 2006 à 21:56
Etonnant DarkSidious ;) , que tu ne fasses pas de pub pour tes APIs :

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

++
0
diablamanshadow Messages postés 419 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 28 janvier 2008
14 sept. 2006 à 22:42
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 ?
0
diablamanshadow Messages postés 419 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 28 janvier 2008
14 sept. 2006 à 23:15
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
0
diablamanshadow Messages postés 419 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 28 janvier 2008
14 sept. 2006 à 23:30
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 ?
0
diablamanshadow Messages postés 419 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 28 janvier 2008
14 sept. 2006 à 23:46
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 ?
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
14 sept. 2006 à 23:54
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
15 sept. 2006 à 01:54
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>
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 sept. 2006 à 09:33
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 #
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
27 nov. 2006 à 15:49
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
0
Rejoignez-nous