java防止截屏,在全屏应用程序中防止屏幕截图(打印屏幕)

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. 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.

解决方案

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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值