【问题标题】:In Windows, how do I programmatically make my whole screen blink black & white?在 Windows 中,如何以编程方式使整个屏幕呈黑白闪烁?
【发布时间】:2023-03-29 06:27:01
【问题描述】:

我正在使用一个简单的番茄钟定时器,但我没有声音/扬声器,所以我想通过简单地用指定颜色将屏幕消隐,然后用另一种颜色切换几次来表示定时器结束.就好像我让我的显示器成为左转汽车信号一样。我如何控制这样的显示器?有没有一些win32代码?

我对 Java 很熟悉,对 c# 或 C++ 了解甚少

【问题讨论】:

    标签: java winapi timer


    【解决方案1】:

    我不确定控制整个屏幕的动机是什么。也许更合适的是在系统托盘中显示通知。

    无论如何,使用 Java,您可以在全屏模式下弹出 JFrame。使用计时器更改其背景几次,然后将其关闭。这是一个演示类似内容的简化示例:

    import java.awt.Color;
    import java.awt.EventQueue;
    import java.awt.GraphicsEnvironment;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    
    import javax.swing.AbstractAction;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.KeyStroke;
    import javax.swing.Timer;
    
    class FullScreenFrame extends JFrame{
        private static final int MAX_COUNT = 3;
        private static final int PERIOD = 1000;
        private JPanel panel;
        private int count;
    
        public FullScreenFrame(){
            super();
    
            setUndecorated(true);
    
            getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false), "ESCAPE");
            getRootPane().getActionMap().put("ESCAPE", new AbstractAction() {
                public void actionPerformed(ActionEvent e) {
                    dispose();
                }
            });
    
            panel = new JPanel();
            panel.setBackground(Color.GREEN);
            add(panel);
    
            new Timer(PERIOD, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (count < MAX_COUNT) {
                        if (count % 2 == 0){
                            panel.setBackground(Color.BLACK);           
                        } else {
                            panel.setBackground(Color.GREEN);
                        }
                        count++;
    
                    } else {
                        ((Timer) e.getSource()).stop();
                        dispose();
                    }
                }
    
            }).start();
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    FullScreenFrame frame = new FullScreenFrame();
                    frame.setBounds(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getBounds());
                    frame.setAlwaysOnTop(true);
                    frame.setVisible(true);
                }
            });
        }
    }
    

    【讨论】:

    • 非常感谢 Max - 你太棒了!
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2013-10-09
    • 2015-03-24
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多