如何在没有相关窗口的情况下在屏幕上显示图像

时间:2012-01-27 21:08:41

标签: java c assembly

MAJOR EDIT 我已经将我的问题重组为更合适,更少随意,但基本信息仍然存在。

我想要做的是使用以下任何语言创建一些没有关联窗口的文本:Java,C或python。它只是我希望看到的文本完全覆盖在您当前在桌面上发生的任何事情上。它将覆盖所有程序等。

有关如何执行此操作的任何建议/起点?

旧帖子 我听说有传言说可以使用汇编来制作“图像”(我不知道他们实际上会考虑什么,我听到的是我的朋友教授制作了一个半透明的绿色美元钞票标志出现了并在屏幕的右下方上下摆动)

所以我的问题是:

是否有任何汇编命令/系列命令可以在屏幕上显示内容? 任何人都可以指出我使用程序集与屏幕上显示的内容进行交互的方向吗? 是否可以在没有与之关联的窗口的情况下显示独立符号?或者,是否可以使背景窗口完全透明,同时仍保持图像完好无损? 创建一个使文本以这种方式出现的汇编程序有多难? (即覆盖屏幕上当前拥有的任何内容而不打开它自己的窗口)

注意如果您想提供任何非常赞赏的示例,我目前在Mac上,因此我的计算机只能解释AT& T语法

旧帖子

2 个答案:

答案 0 :(得分:2)

这当然是可行的,但取决于您的操作系统和窗口系统,因为大多数操作系统会阻止程序直接访问视频内存(允许程序共享它,它们必须施加一些限制)。基本思想是创建一个透明的无边框窗口并在其中绘制您的内容。如果您要求窗口系统在所有其他窗口(Z顺序)之前显示您的窗口,那么,它将显示为您的程序直接绘制到屏幕上。

有一些库可以做到这一点。对于X11,您可以使用libXosd。对于Windows,OSD可执行文件可以显示单个字符串(源代码似乎不可用)。

答案 1 :(得分:2)

最终你要创建一个窗口,你只需将其背景设置为透明。将此代码放入名为test.java的文件中并试一试 - 只需在Mac OS 10.7上试用它就可以了。 (文本显示在显示器左上角附近的黑色 - 您必须仔细查看它。)请注意,根据this post,您确实需要Java> 1.6。

import javax.swing.*;
import java.awt.*;
public class test extends JWindow{
    public test(){
        super();
        this.setSize(500, 400);
        this.setLocation(50, 50);

        setBackground(new Color(0,0,0,0)); // this is the critical line - that fourth 0 represents alpha (or opacity)

        setAlwaysOnTop( true );  // keeps it in the foreground so you don't click away from it - note that clicks on the transparent part DO pass through to the desktop, at least on Lion

        JLabel testLabel = new JLabel("Floating text hah");
        this.add(testLabel);

    }
    public static void main(String[] args){
        System.out.println("Sup");
        test t = new test();
        t.setVisible(true);
    }
}

希望这会让你走上正确的道路。