Comment puis-je empêcher l’impression écran

Je souhaite impérativement qu’une application sur laquelle je travaille empêche l’utilisateur de capturer facilement le contenu de l’écran.

J’ai indiqué qu’il n’y avait pas de moyen réalisable d’empêcher complètement que cela se produise, mais je cherche des méthodes pour introduire des obstacles au processus.

J’utilise C # / .NET 2.0 et WinForms

Tu ne peux pas.

Le mieux que vous puissiez faire est de rendre le rendu sur un périphérique à accélération matérielle sur une superposition, comme ce que faisaient auparavant les lecteurs vidéo. Fondamentalement, vous peignez toute la fenêtre en bleu et vous restituez vos graphiques sur la carte vidéo. En interne, la carte vidéo remplacera le bleu par les graphiques. L’inconvénient, c’est que vous devez abandonner l’utilisation des contrôles winforms, et je ne connais aucun moyen de le faire facilement avec .NET. Je pense que si vous utilisez DirectShow.NET , l’un de leurs exemples met vos propres graphiques dans un stream.

Même après tout cela, il est toujours possible d’obtenir une capture d’écran. Il suffit de prendre une photo de l’écran avec un appareil photo numérique.

À partir d’ ici:

A. Windows implémente Print Screen en utilisant un raccourci clavier enregistré. Windows utilise les raccourcis clavier prédéfinis IDHOT_SNAPDESKTOP et IDHOT_SNAPWINDOW pour gérer l’écran d’impression. Celles-ci correspondent à Print Screen, qui capture la totalité de l’écran, et à Alt + Print Screen, qui capture uniquement la fenêtre active. Pour désactiver ces fonctions, vous n’avez qu’à enregistrer les touches de raccourci. Windows envoie alors à votre application un message WM_HOTKEY lorsque l’utilisateur appuie sur l’une des touches de raccourci. Votre implémentation peut ignorer le message pour contourner le comportement de capture d’écran par défaut. Un bon endroit pour le faire est dans votre classe d’ordinateur central.

Vous aurez deux cas dont vous devez vous inquiéter. L’une, lorsque votre fenêtre / application a le focus, l’autre quand elle ne l’est pas.

Si elle ne possède pas le focus, vous ne pouvez plus rien faire. Par exemple, si l’utilisateur clique sur votre application et sur le bureau, les clés ne sont pas envoyées à votre application, vous ne les verrez donc jamais. Dans ce cas, vous pouvez réduire le contenu du bac lorsque votre application perd le focus (ou, peut-être, placez un panneau “vide” sur le formulaire pour empêcher les utilisateurs de voir quoi que ce soit qui empêcherait également l’utilisation d’un écran d’impression).

Dans l’autre cas, lorsque vous avez le focus, capturez les frappes et examinez-les. Si la touche Alt est enfoncée et que la touche PrintScreen est enfoncée, réinitialisez la valeur afin qu’aucun écran d’impression ne se produise. (En y réfléchissant, cela risque de ne pas fonctionner. Il faudrait que je teste pour en être sûr.)

Vous pouvez regarder dans ce que font les joueurs de cinéma. Je crois qu’ils rendent directement sur une surface matérielle (via DirectX). Je soupçonne que tu devrais faire ça.

Peut-être que cet article pourrait être utile:

Désactivation de l’écran d’impression, appel de destructeurs dérivés, etc.

FWIW, c’est possible. Voici un code:

Ce serait une dll que vous créez, puis appelez la méthode HookKeyboard à partir de votre application. Je l’ai testé et ça marche. Certes, si quelqu’un prend une photo avec un appareil photo, il ne peut s’empêcher de faire valoir son sharepoint vue. NYAH!

  namespace KeyboardHook { public class Hooker { [StructLayout(LayoutKind.Sequential)] public struct KBDLLHOOKSTRUCT { public int vkCode; public int scanCode; public int flags; public int time ; public int extraInfo; } public delegate int HookProc(int nCode, int wParam, IntPtr ptrKBDLLHOOKSTRUCT); [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)] public static extern IntPtr SetWindowsHookEx(int idHook, HookProc callBack, IntPtr hMod, int threadId); [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)] public static extern int CallNextHookEx(IntPtr hhk, int nCode, int wParam, IntPtr lParam); private static IntPtr kbh_Handle; private static HookProc kbh_HookProc; private const int VK_SNAPSHOT = 0x2C; private const int WM_KEYDOWN = 0x0100; private const int WM_SYSKEYDOWN = 0x0104; private const int WH_KEYBOARD_LL = 13; private static int LowLevelKeyboardProc(int nCode, int wParam, IntPtr lParam) { if (nCode < 0) { CallNextHookEx(kbh_Handle, nCode, wParam, lParam); return 0; } if (wParam == WM_KEYDOWN) { IntPtr kbdll = lParam; KBDLLHOOKSTRUCT kbdllstruct = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(kbdll, typeof(KBDLLHOOKSTRUCT)); if (kbdllstruct.vkCode == VK_SNAPSHOT) return -1; } return CallNextHookEx(kbh_Handle, nCode, wParam, lParam); } public static void HookKeyboard() { try { kbh_HookProc = LowLevelKeyboardProc; kbh_Handle = SetWindowsHookEx(WH_KEYBOARD_LL, kbh_HookProc, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); if (kbh_Handle != IntPtr.Zero) System.Diagnostics.Debug.WriteLine(String.Format("It worked! HookHandle: {0}", kbh_Handle)); else { throw new Win32Exception(Marshal.GetLastWin32Error()); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(String.Format("ERROR: {0}", ex.Message)); } } } } 

Cela ne répond pas vraiment aux questions, mais gardez à l’esprit qu’il existe des outils pour capturer l’écran et qu’un simple appareil photo casse tout.

Je veux dire ok tu “dois”, mais je le ferais (mais je suis jeune et toujours étudiant, donc je ne sais pas grand chose de ce que l’on peut dire) réponds que c’est juste stupide.

Découvrez le nouveau site tech – sivizion.com , ils empêchent l’impression d’écran tous ensemble – aucun moyen de le contourner. Si quelqu’un veut trouver un moyen de le pirater, merci de poster ici, je ne pourrais pas. Je pense qu’ils accordent également une licence à leur technologie, mais je ne suis pas sûr de le vérifier.

Vous pouvez essayer d’utiliser IpcProtectWindow fourni dans msipc.dll.

 [DllImport("msipc.dll", SetLastError = false, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)] internal static extern int IpcProtectWindow([In] IntPtr hwnd); 

Téléchargez le SDK de Microsoft

Appelez la fonction ci-dessus et indiquez le pseudonyme du formulaire que vous souhaitez protéger. (Propriété Form.Handle)

Eh bien, vous pouvez essayer de capturer le bouton, mais je ne sais pas si cela fonctionnera.

Une chose qui m’a toujours ennuyé est que chaque fois que je joue un film, il ne prend jamais de captures d’écran de celui-ci. Si vous pouvez effectuer un rendu dans un contexte séparé, cela rendrait vraiment ennuyeux de prendre une photo de celui-ci. Peut-être que vous pouvez envoyer votre sortie d’écran via quelque chose comme ça?

Certaines applications peuvent capturer l’écran à partir d’applications OpenGL et DirectX! (selon (ils sont utilisés pour enregistrer des films de jeu) ps. windows aero est DirectX

http://www.fraps.com/ Je pense que c’est l’application

Vous pouvez rendre inutile tout écran d’impression occasionnel à l’aide de Visual Cryptography et de tirer parti de la persistance de la rétine (voir cet article pour plus de détails, ainsi que bit.ly/vcrypto pour une démonstration Web).

L’idée est d’alterner à haute fréquence deux ou plusieurs images de bruit aléatoires, qui se combinent par persistance de la vision pour révéler le contenu. Une capture d’écran ne saisira qu’une image, avec un bruit aléatoire sans signification.

Cela se fait au prix de scintillements et de maux de tête induits par l’utilisateur, il peut être neutralisé par un appareil photo prenant une photo de l’écran ou par un utilisateur moins occasionnel connaissant Photoshop, mais vaincu tout type de capture d’écran ou de capture d’image occasionnelle.

Cela peut parfois être utile, au sens académique du terme!

Il est trop tard, mais il y a une solution rapide, utilisez-le simplement sous forme de MDI
Définissez la propriété TopMost de la forme True , puis écrivez ci-dessous l’événement privé privé frmMDI_Deactivate (expéditeur de l’object, EventArgs e) {Clipboard.Clear ();}

après avoir pris l’écran de l’utilisateur doivent minimiser l’application, le moment où l’utilisateur minimise l’application, nous effaçons le presse-papiers.

vous pouvez utiliser cette fonction lors de la déconnexion ou lorsque l’écran se déplace ou se redimensionne ou tout autre événement de formulaire, le cas échéant 🙂

L’outil de capture ne peut pas non plus copier les écrans si la propriété TopMost est true.

Oui, nous ne pouvons empêcher l’utilisateur de capturer l’écran à partir d’un périphérique externe tel qu’un téléphone ou une caméra.

Je l’ai résolu en utilisant un object Timer et la méthode Clipboard.Clear() .

Ajoutez d’abord un Timer à votre formulaire principal avec Interval=1 (Très rapide), puis ajoutez le code suivant dans son événement:

 Clipboard.Clear();