Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止全屏应用程序中的屏幕截图(打印屏幕)_Java_Pdf_Fullscreen_Printscreen_Piracy - Fatal编程技术网

Java 防止全屏应用程序中的屏幕截图(打印屏幕)

Java 防止全屏应用程序中的屏幕截图(打印屏幕),java,pdf,fullscreen,printscreen,piracy,Java,Pdf,Fullscreen,Printscreen,Piracy,我有一个需要防止屏幕截图的打印按钮。和第三方软件 我决定使用全屏,这样他们就不能使用第三方软件来制作屏幕截图 但我仍然不知道如何防止截图 附:此应用程序与打击盗版有关。我不希望我的大量电子书被免费分享。我想到了视频等,但写作更重要的是我如何做到这一点 这样一来,他们唯一的复制方法就是用高清摄像机拍摄照片 有人知道这是否可能吗?我还没有发现这方面的任何东西。简单地回答:你不能 创建屏幕截图通常是底层操作系统的一项功能。在操作系统上运行的Java应用程序不能限制在该操作系统上运行的其他进程。或者限制

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

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

但我仍然不知道如何防止截图

附:此应用程序与打击盗版有关。我不希望我的大量电子书被免费分享。我想到了视频等,但写作更重要的是我如何做到这一点

这样一来,他们唯一的复制方法就是用高清摄像机拍摄照片


有人知道这是否可能吗?我还没有发现这方面的任何东西。

简单地回答:你不能

创建屏幕截图通常是底层操作系统的一项功能。在操作系统上运行的Java应用程序不能限制在该操作系统上运行的其他进程。或者限制该操作系统提供的功能。即使你不能-没有什么可以阻止人们在虚拟机上运行操作系统,然后从运行虚拟机的主机上截屏

除此之外:创建屏幕截图是一项无价的功能。你知道,也许有人想为你的应用程序创建一些屏幕截图,为他的同事记录它的使用情况。或者有人想在这里或那里截屏,为自己记录某些方面。现在你来宣布:“对不起,根本没有屏幕截图”。这可能会让你的用户望而却步。没有什么比说服用户你的产品带来糟糕的用户体验更糟糕的了


从这个意义上讲,您的问题没有好的技术解决方案。相反:很可能你需要花费相当多的努力才能得到半途而废的东西(正如所说的:在虚拟机设置中,你什么也做不了)。相反,我会将我的资源用于以合理的成本创造出色的用户体验。不要集中精力限制你的用户

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

你不能阻止它,但你可以尝试在一定程度上覆盖它。
其思想是检测打印屏幕是否被按下,隐藏要隐藏的内容,然后调用另一个打印屏幕,覆盖上一个打印屏幕
这不是健壮的,当然也有局限性,可以通过,但可以给你基本的控制。
swing
基本演示已在我的windows机器上进行了测试:

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();  }
                    }
                });

            }
        }
    }
}

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

完全正确!我将设置Prnt Scrn按钮,将某些文本或某些meme复制到剪贴板!聪明的你!谢谢我将努力实现这一点。希望它能覆盖屏幕截图。记住虚拟机。您通常无法控制外部操作系统。嗯,如果有办法禁用在虚拟机上运行应用程序的话。@PeterAnson记住蓝色药丸,虚拟化层可能非常薄,很难掌握。。。此外,远程桌面解决方案还可以让其他机器获得屏幕内容。。。。即使有可能停止底层操作系统的屏幕截图功能,人们仍然可以在虚拟机中运行程序并从主机操作系统截图。。。(只是在下面划线,你不能…)确定那是对的。也许我会在应用程序中嵌入视频或mp3。然而,文本是我最喜欢的格式