在全屏应用程序中防止屏幕截图(打印屏幕) [英] Preventing Screenshots (Print Screen) In Full screen Application

查看:402
本文介绍了在全屏应用程序中防止屏幕截图(打印屏幕)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要防止使用打印屏幕"按钮制作屏幕截图.并通过第三方软件.

I have a need to prevent screenshots made by Print Screen button. And by third party software.

我决定使用全屏模式,这样他们就不能使用第三方软件制作屏幕截图了.

I decided to use fullscreen so they can't use their third party software to make a screenshot.

但是我仍然不知道如何防止屏幕截图.

But I still have no clue how to prevent screenshot.

PS.这个程序与打击盗版有关.我不希望免费分享我的大量电子书.我想到的是视频等,但写作更多是我的方式.

PS. This app is related to fighting piracy. I don't want my massive ebooks to be shared for free. I thought of videos etc instead but writing is more how I do it.

通过这种方式,他们唯一的复制方法就是使用高清摄像机拍摄照片.

This way their only method to copy it will be making photos with a HD camera.

有人知道这是否可能吗?我对此一无所获.

Does anyone know if it's possible? I haven't found anything about this.

推荐答案

您不能阻止它,但是可以在一定程度上尝试覆盖它.
这个想法是检测按下一个打印屏幕,隐藏要隐藏的内容,然后调用另一个打印屏幕,以覆盖前一个屏幕.
这不是很可靠,当然也有局限性,可以绕开它,但是可以为您提供基本控制.
这个swing基本演示已经在我的Windows机器上进行了测试:

You can not prevent it, but you can try, to a certain extent, overwrite it.
The idea is detect that a print screen was pressed, hide what you want to hide, and invoke another print screen, overwriting the previous one.
This is not robust, and of course has limitations and can be by-passed, but can give you basic control.
This swing basic demonstration was tested on my windows machine:

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Robot;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class NoPrintScreen extends JFrame{

    public final String RED_PAGE = "red page";
    public final String WHITE_PAGE = "white page";
    private CardLayout cLayout;
    private JPanel mainPane;
    boolean isRedPaneVisible = false;

    public NoPrintScreen(){

        setTitle("No Print Screen");
        setSize(400,250);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        addKeyListener(new MyKeyListener());
        setFocusable(true);

        mainPane = new JPanel();
        cLayout = new CardLayout();
        mainPane.setLayout(cLayout);

        JPanel whitePane = new JPanel();
        whitePane.setBackground(Color.WHITE);
        whitePane.add(new JLabel("Hit Prtint Screen and check resuts"));

        JPanel redPane = new JPanel();
        redPane.setBackground(Color.RED);
        redPane.add(new JLabel("Print Screen is discouraged"));

        mainPane.add(WHITE_PAGE, whitePane);
        mainPane.add(RED_PAGE, redPane);
        add(mainPane,BorderLayout.CENTER);
        switchPanes();
        setVisible(true);
    }

    void switchPanes() {

        if (isRedPaneVisible) {showRedPane();}
        else { showWhitePane();}
    }

    void showWhitePane() {
        cLayout.show(mainPane, WHITE_PAGE);
        isRedPaneVisible = true;
    }

    void showRedPane() {
        cLayout.show(mainPane, RED_PAGE);
        isRedPaneVisible = false;
    }

    public static void main(String[] args) {
        new NoPrintScreen();
    }

    class MyKeyListener extends KeyAdapter {

        @Override
        public void keyReleased(KeyEvent e) {

            if(KeyEvent.VK_PRINTSCREEN== e.getKeyCode()) {

                switchPanes();

                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {

                        try {

                            final Robot robot = new Robot(); //invoke new print screen
                            robot.keyPress(KeyEvent.VK_PRINTSCREEN);

                        } catch (AWTException  ex) { ex.printStackTrace();  }
                    }
                });

            }
        }
    }
}

此快速代码的目的是演示这个想法.

The purpose of this quick-code is to demonstrate the idea.

这篇关于在全屏应用程序中防止屏幕截图(打印屏幕)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆