我需要防止屏幕截图的打印屏幕按钮。还有第三方软件。
我决定使用全屏,这样他们就不能用第三方软件来制作截图了。
但我还是不知道怎么防止截图。
PS。这个应用程序与打击盗版有关。我不想免费分享我的大量电子书。我想的是视频等,但写作更多的是我的方式。
这样,他们唯一的复制方法就是用高清相机拍照。
有人知道这是否可能吗?这件事我什么都没发现。
发布于 2017-11-23 13:30:09
你不能阻止它,但你可以尝试,在一定程度上,覆盖它。
这样做的目的是检测打印屏幕被按下,隐藏想要隐藏的内容,并调用另一个打印屏幕,覆盖前一个屏幕。
这是不健全的,当然也有局限性,可以通过,但可以给你基本的控制。
这个swing basic演示是在我的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(); }
}
});
}
}
}
}这个快速代码的目的是演示这个想法。
发布于 2017-11-23 11:01:27
不是以常规的方式。您可以轮询剪贴板,也可以检查进程列表(对于屏幕抓取应用程序);对进程的最新支持是很好的。需要一些探索。
https://stackoverflow.com/questions/47453678
复制相似问题