2

Windows Vista / 7 UACの同意ブロックから得られるような「セキュアデスクトップモード」(効果)を実現する方法はありますか?

私はそれがあちこちのピクセルを削除し(そしておそらくそれらを灰色にする)そして最後にそれをスクリーンに描くいくつかの関数だと思います。これを自分のアプリケーションに適用して、別のユーザーがシステムに接続するまでユーザーが何もしないようにします(ただし、それは重要ではありません)。

アドバイスをいただければ幸いです。

よろしくお願いします、
A。

編集:私は本当にこれだけを探していました

graphicsFX.setColor(new Color(0, 0, 0, 0.8f));
graphicsFX.fillRect(0, 0, 800, 600);

入力の延期は非常にうまくできます。

ありがとうございます。

4

2 に答える 2

5

この正確な目的のためにJXLayerを使用しています...

ここに画像の説明を入力してくださいここに画像の説明を入力してください

GlassPaneこれは、ソリューションのようにアプリケーションからロックアウトすることなく、特定のコンテナーからユーザーをロックアウトするため、非常に便利です。コンテナ用のガラス板のようなものです;)

ここの基本的な考え方を盗んだ

 public class JXLayerTest {

      public static void main(String[] args) {
           new JXLayerTest();
      }

      public JXLayerTest() {
           EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                     try {
                          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                     } catch (ClassNotFoundException ex) {
                     } catch (InstantiationException ex) {
                     } catch (IllegalAccessException ex) {
                     } catch (UnsupportedLookAndFeelException ex) {
                     }

                     final LockableUI ui = new LockableUI();
                     JPanel panel = new JPanel(new GridBagLayout());
                     buildUI(panel);

                     // This stolen directly from the JXLayer lockable blog                         
                     JXLayer layer = new JXLayer(panel, ui);

                     // Java2D grayScale BufferedImageOp
                     ColorConvertOp grayScale = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
                     // wrap it with the jxlayer's BufferedImageOpEffect 
                     BufferedImageOpEffect effect = new BufferedImageOpEffect(grayScale);
                     // set it as the locked effect        
                     ui.setLockedEffects(effect);
                     ui.setLocked(false);

                     JFrame frame = new JFrame();
                     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                     frame.setLayout(new BorderLayout());
                     frame.add(layer);

                     JPanel panelButtons = new JPanel(new GridBagLayout());

                     final JButton lock = new JButton("Lock");
                     lock.addActionListener(new ActionListener() {
                          @Override
                          public void actionPerformed(ActionEvent e) {
                               boolean locked = !ui.isLocked();
                               ui.setLocked(locked);
                               lock.setText(locked ? "Unlock" : "Lock");

                          }
                     });

                     panelButtons.add(lock);
                     frame.add(panelButtons, BorderLayout.SOUTH);

                     frame.pack();
                     frame.setLocationRelativeTo(null);
                     frame.setVisible(true);
                }

                protected void buildUI(JPanel panel) {
                     GridBagConstraints gbc = new GridBagConstraints();
                     gbc.gridx = 0;
                     gbc.gridy = 0;

                     JLabel label = new JLabel();
                     try {
                          BufferedImage image = ImageIO.read(new File("megatokyo.png"));
                          label.setIcon(new ImageIcon(image));
                     } catch (IOException ex) {
                          label.setText("Nothing to see here");
                     }

                     panel.add(label, gbc);

                     JButton button = new JButton("Clickl me");
                     button.addActionListener(new ActionListener() {
                          @Override
                          public void actionPerformed(ActionEvent e) {
                               JOptionPane.showMessageDialog(null, "Clicked");
                          }
                     });

                     gbc.gridy++;
                     panel.add(button, gbc);

                }
           });
      }
 }
于 2012-10-19T22:59:44.370 に答える
3

ホイールを再発明する代わりに、setEnabled(false)コンポーネントを使用してホイールを無効にしてみてください。システムへの接続が確立されたら、setEnabled(true)コンポーネントを再度有効にするように呼び出します。

グレー表示/クリック不可を示す詳細については、この例を参照してJButtonください。

ここに画像の説明を入力してください

于 2012-10-19T21:56:08.383 に答える