首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止全屏应用中的截图(打印屏幕)

防止全屏应用中的截图(打印屏幕)
EN

Stack Overflow用户
提问于 2017-11-23 10:49:51
回答 2查看 1.2K关注 0票数 1

我需要防止屏幕截图的打印屏幕按钮。还有第三方软件。

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

但我还是不知道怎么防止截图。

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

这样,他们唯一的复制方法就是用高清相机拍照。

有人知道这是否可能吗?这件事我什么都没发现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-23 13:30:09

你不能阻止它,但你可以尝试,在一定程度上,覆盖它。

这样做的目的是检测打印屏幕被按下,隐藏想要隐藏的内容,并调用另一个打印屏幕,覆盖前一个屏幕。

这是不健全的,当然也有局限性,可以通过,但可以给你基本的控制。

这个swing basic演示是在我的windows机器上测试的:

代码语言:javascript
复制
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();  }
                    }
                });

            }
        }
    }
}

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

票数 0
EN

Stack Overflow用户

发布于 2017-11-23 11:01:27

不是以常规的方式。您可以轮询剪贴板,也可以检查进程列表(对于屏幕抓取应用程序);对进程的最新支持是很好的。需要一些探索。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47453678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档