漆黑的漆膜(纪念地球一小时)


31

您的目标很简单:该程序必须将计算机的屏幕完全变黑

程序启动后,屏幕必须迅速完全变黑,并保持不变,直到退出程序(任何键或alt + F4,鼠标移动等),然后一切都应恢复正常。因此,不允许关闭计算机或关闭显示器的电源。在此期间,不应看到一个非黑色的像素,甚至光标也不会闪烁。

用户不要做任何准备(在程序启动后将鼠标移到屏幕外,断开电缆连接等操作或用户输入),只需启动程序即可。

您可以放心地假设计算机仅连接了一个显示器。我们还假设使用标准台式机或笔记本电脑,因为在没有普通显示器的特定设备上进行操作太简单了。

如果您使用任何外部资源(黑色图像,GUI文件等),它们的字节大小将添加到您的代码大小中。

如果它只能在一个OS系列上运行,或者需要opengl等,但是却要求非常特定的硬件配置,这是可以的。

您的源代码必须用编程语言编写,而不仅仅是其他程序(例如屏幕保护程序)将使用的配置文件。


9
这在具有滞留像素的屏幕上将不起作用...
Ismael Miguel 2014年

21
@IsmaelMiguel:您可以安全地假设屏幕处于理想的工作状态。否则,我们可能会以“如果我的ALU中的一个晶体管被烧毁而我的计算机无法进行任何浮点数学运算呢?”的方式来反对其他问题。:)
vsz 2014年

5
有趣的事实:在既不使用CRT也不使用动态对比度的屏幕上,这将消耗更多的电量!
Ry-


2
所有答案都将自动取消资格-我的其中一台显示器的像素红色值始终为255!
戴帽子的家伙

Answers:


22

重击,28 或12

假设默认安装Ubuntu 12.04 LTS。

gnome-screensaver-command -a

自动启动屏幕保护程序,默认情况下为黑屏。

编辑:根据@Glenn Randers-Pehrson的建议,这是一个具有12个字节的字节

/*/*/gn*d -a

请注意,如果您的系统上还有另一个满足该名称的文件,例如,这可能不起作用/tmp/1/gnd但这是代码高尔夫球,谁在乎?


如果您不使用Gnome屏幕保护程序,请查看我的其他bash答案


1
那种让您思考的答案是:“为什么我没有想到这一点?”。:)
亚历克斯·桑顿2014年

1
使用bash并不能真正清除屏幕。
Darth Egregious 2014年

3
“您的源代码必须使用编程语言编写,而不仅仅是其他程序(例如屏幕保护程序)将使用的配置文件。”
汉尼斯·卡皮拉

2
@hannes karppila我没有更改任何其他程序将使用的任何配置文件。我只启动了另一个程序,大多数bash脚本都这样做(除非用纯bash编写)
pastebin.com斜杠0mr8spkT 2014年

5
@ace,打高尔夫球:/ * / * / gn * d代替gnome-screensaver-command将节省大约16个字节(由mniip表示)
Glenn Randers-Pehrson,2014年

31

汇编程序(引导程序)131个字符/ 512字节已编译(实际上较小,但引导扇区的长度必须为512字节)。

这是一个简单的引导加载程序。当计算机启动时,BIOS将从磁盘(软​​盘)加载它。然后进入图形模式并挂起。当用户按下电源按钮时,程序将结束,计算机将进入运行程序之前的模式。

经过VirtualBox测试。

它将与nasm一起编译:

nasm -f bin file.asm -o start.img

源代码:

[BITS 16]
[ORG 0x7C00]
cli
mov AX,0x0
mov SS,AX
mov SP,0x9000
sti
mov AH,0x0
mov AL,0x13
int 0x10
times 510 - ($-$$) db 0
dw 0xAA55

1
如何在VirtualBox上运行:(使用nasm编译),新VM,类型:其他,版本:其他/未知,没有硬盘。接下来转到虚拟机的设置,选择“存储”,右键单击列表,然后选择“添加软盘控制器”。将已编译的img文件挂载到软盘驱动器上。保存,然后就可以运行它。请享用!
2014年

我想做与dos程序相同的事情,但是您的速度更快。基本上,我唯一记得的是waaay后面的汇编程序:)
Fels

您能解释一下它的工作原理吗?
Mega Man

为什么clisti?移至SS下一条指令期间自动禁用中断,并且AX如果中断发生在之前,则不会更改MOV SS,AX。此外,为什么不MOV AX, 0x13代替2 MOVs?
罗斯兰

年轻的我不知道如何正确编写代码。目前我可能也不知道。
Hannes Karppila


14

爪哇:165

简单的Java,只会创建一个全屏黑框。要退出,您必须先Alt + Tab回到控制台和Ctrl-C,但这似乎很简单。

import java.awt.*;class B{public static void main(String[]a){Frame f=new Frame();f.setExtendedState(6);f.setUndecorated(1>0);f.setBackground(Color.BLACK);f.show();}}

// line breaks below

import java.awt.*;
class B{
    public static void main(String[]a){
        Frame f=new Frame();
        f.setExtendedState(6);
        f.setUndecorated(1>0);
        f.setBackground(Color.BLACK);
        f.show();
    }
}

11

Applesoft] [BASIC(17)

1 HGR2:GET X:TEXT

我不认为这实际上是17个字节...我认为可能会更少。如果我没记错的话,Applesoft标记了它的关键字,因此每个关键字实际上是一个字节...因此这个关键字可能会大大缩短。两种方式均为+1。
Beska 2014年

11

重击-57 26

C=/s*/*/*/*/b*ess;(A=$(cat $C);echo 0;cat;echo $A)|tee $C

在笔记本电脑上,这将通过设置屏幕背光亮度为0 /sys/class/backlight,在平板电脑或手机上,这将通过设置屏幕亮度为0。/sys/class/leds


2
“并保持这种状态,直到退出程序(任何键或alt + F4,鼠标移动等),然后一切都会恢复正常”
Ry-

1
Fn+F6Fn+<up arrow>还有许多其他组合键可归为“任意键”和“等”,这是使灯光恢复原状的众多组合之一。
伊斯梅尔·米格尔

1
@minitech哦。好吧,固定...
mniip

这对我根本不起作用。如果我从bash提示中执行“ C = / s * / * / * / * / b ess;(A = $(cat $ C); echo 0; cat; echo $ A)| tee $ C”,我会得到cat :/ s * / * / * / * / b ess:没有这样的文件或目录tee:/ s * / * / * / * / b / ess:没有这样的文件或目录

@Lembik我以为您没有任何亮度控制器,或者这些控制器缺少驱动程序。介意粘贴find /sys/class/{backlight,leds}/*/
mniip 2014年

8

我知道这是但我无法抗拒。

只要确保您没有打开任何浏览器窗口(在本例中为Chrome)即可;

执行以下PitchBlack.bat(31个 24字节)

chrome --kiosk file:///1

如果放在Chrome.exe文件的同一目录中,此批处理将在信息亭模式下执行Chrome,并以全屏方式打开一个名为/ 1(49 41 34字节)的文件:

<body bgcolor=0 style=cursor:none>

等等!

总字节数:80 72 58
感谢@ace :)

要退出该程序,您必须使用经典的ALT + F4;在程序启动,您实际上不需要做任何准备(之前都没有,您只需要放置/1和批处理文件),因此使用规则很好。

请注意,如果您将光标移到屏幕边框,则它可能会变得可见。OP不允许这样做,因为

程序启动后,屏幕必须迅速完全变黑,并保持不变,直到退出程序(任何键或alt + F4,鼠标移动等),之后一切都应恢复正常。

因此,这应该完全可以!:P


1
也许chrome --kiosk 'data:text/html,<style>body{background:#000;cursor:none;}</style>'不需要附加文件就可以工作吗?
六。

意味着在使用file:shceme时,您看不到任何URL栏,但是使用data:scheme 时却有URL栏?
六。

在我的系统上,chromium-browser --kiosk 'data:text/html,<style>body{background:#000;cursor:none;}</style>几乎全屏显示Chromium的黑色页面都没有任何条纹。
六。

在Ubuntu和Chromium 34.0上进行了测试,可以file:///1将html保存为/1,并且可以将html文件缩短为<body bgcolor=0 style=cursor:none>
pastebin.com slash 0mr8spkT

1
我认为您应该chrome在答案中使用而不是chromium
pastebin.com斜杠0mr8spkT 2014年

7

C# - 211 202 200 196 179字节

using System.Windows.Forms;class A{static void Main(){Cursor.Hide();new Form{BackColor=System.Drawing.Color.Black,WindowState=(FormWindowState)2,FormBorderStyle=0}.ShowDialog();}}

隐藏光标并显示全屏黑色窗口。可以用Alt+ 关闭F4

非高尔夫代码

using System.Windows.Forms;
class A
{
    static void Main()
    {
        Cursor.Hide();
        new Form
        {
            BackColor = System.Drawing.Color.Black,
            WindowState = (FormWindowState)2, // FormWindowState.Maximized
            FormBorderStyle = 0 // FormBorderStyle.None
        }.ShowDialog();
    }
}

我不需要强制转换为FormBorderStyle,因为如果整数是,则没有必要0


2
可以更换System.Drawing.Color.BlackFormWindowState.MaximizedFormWindowState.Maximized以及FormBorderStyle.None与它们对应的值。
伊斯梅尔·米格尔

@IsmaelMiguel:谢谢,我更新了FormWindowState和FormBorderStyle!我无法更新颜色,因为那不是枚举。
ProgramFOX

尝试Color.Black。它应该立即起作用。或BackColor=This.ForeColor,哪个也可能起作用。
伊斯梅尔·米格尔

@IsmaelMiguel:第一个无效,因为我没有添加using System.Drawing;,第二个无效,因为我将变量值设置在括号内。
ProgramFOX

using System;然后尝试new Windows.Forms.FormBackColor=Drawing.Color.Black。它MIGHT工作!并节省一些字节。
伊斯梅尔·米格尔

5

C#175 171 167

class P{static void Main(){SendMessage(65535,274,61808,2);}[System.Runtime.InteropServices.DllImport("user32")]static extern int SendMessage(int a,int b,int c,int d);}

这里的许多答案实际上并不会使屏幕变黑:在LCD屏幕上,背光保持打开并渗出,从而使您看起来呈暗灰色。

这个小片段实际上告诉Windows关闭屏幕,与不活动计时器一样(注意:这并不违反“不关闭电源”规则,因为它实际上只是使监视器进入待机状态。大多数监视器会在恢复输入后重新打开。此外,该规则的目的似乎是确保程序可以重新打开-参见下文。)

移动鼠标或按任意键可重新打开屏幕。

根据https://stackoverflow.com/a/713519/1030702调整显示器电源


“因此,不允许关闭计算机或关闭显示器的电源。”
伊斯梅尔·米格尔

1
@IsmaelMiguel我提供了理由。“直到程序退出(任何键或alt + F4,鼠标移动等),之后情况应恢复正常。因此关闭...”-满足规则的意图。这将“重新打开”。撇开意图,这也satifies的字面意义,因为尽管微软的术语中,这是不是真的将其关闭(在投影机超时,等除外),它把它变成待机状态
鲍勃

4

Amiga组装

ASM-一- 228 219个字符,已编译172个字节(优化了168个字节)

自从我上一次在Amiga汇编中编写单行代码已经20年了,请多多包涵。:-)

在设置黑屏方面,Amiga比PC更具参与性,因此尝试摆脱尽可能多的设置和拆卸。没有禁用中断或多任务的功能;没有双重WaitTOF; 没有视图替换;等。我什至不会为最快,最肮脏的演示编写这篇文章。这意味着:

  • 是不好的做法
  • 可能并不完全安全
  • 可能并不总是有效
  • 即使有这些免责声明,由于20年来被忽视的汇编,可能仍会犯一些愚蠢的错误。

...尽管已在带有或不带有快速内存的模拟A500和A1200上进行了测试。编译为标准可执行文件。鼠标单击退出。

l=$dff080
 move.l 4,a6
 lea g,a1
 jsr -408(a6)
 move.l d0,a1
 move.l 38(a1),d4
 jsr -412(a6)
 move.l #c,l
w:btst #6,$bfe001
 bne w
 move.l d4,l
 rts
g:dc.b "graphics.library",0
 SECTION d,DATA_C
c:dc 256,512,384,0,-1,-2

少打高尔夫球:

COP1LC equ $dff080

    move.l  $4, a6          ; ExecBase
    lea     gfxname, a1
    jsr     -408(a6)        ; OpenLibrary (old, hence no need for clearing d0)
    move.l  d0, a1
    move.l  38(a1), d4      ; store copper list
    jsr     -414(a6)        ; CloseLibrary
                            ; Yeah, if I had a penny for the times I saw that left out
                            ; but I just... can't...

    move.l  #copper,COP1LC  ; write copper list

wait:
    btst    #6, $bfe001     ; Check mouse click
    bne     wait

    move.l  d4, COP1LC      ; restore copper list
    rts

gfxname:
    dc.b    "graphics.library", 0

    SECTION data, DATA_C
copper:
    dc.w $0100, $0200       ; disable bitplanes
    dc.w $0180, $0000       ; color 0 = black
    dc.w $ffff, $fffe       ; end

1
啊,回忆!爱它!
RobIII 2014年

是的,这更像是怀旧之旅的借口,而不是真正尝试编写代码的尝试-Amiga程序集在字符数方面很少会与Perl或Python竞争。尽管我有些惊讶,但它无法击败C#或Java。:)
JimmiTh 2014年

4

的Python / pygame的199 127 125 92

from pygame import*;display.set_mode((9,9),-1<<31);mouse.set_visible(0)
while 1:event.pump()

感谢ace的一些技巧。


由于ALT + F4计数,因此我也要考虑^ C计数,因此您可以在末尾跳过很多字节。
o0'。

1
为了使^ C起作用,您需要专注于终端,并且在程序中pygame窗口始终因pygame而被关注。您的操作系统发现有问题。
哈里比德尔2014年

您可以使用from pygame import*来节省一些字节。另外,我认为fill((0,0,0))没有必要,因为默认颜色是黑色。然后,您可以将其s完全删除。我也不认为display.flip()是不需要的。另外,使用一个空格来缩进而不是4可以节省更多空间。最后,代替FULLSCREENKEYDOWN,您可以使用它们的数值,分别为-1<<31(-2147483648)和2
pastebin.com斜线0mr8spkT 2014年

4

TI-BASIC,7 6

Shade(Ymin,Ymax

在终端(主屏幕)或程序中均可工作。按ON或其他大多数按钮返回到终端/主屏幕。


可以缩小1个字节(即使更改图形屏幕窗口也可以工作)Shade(Ymin,Ymax
lirtosiast 2015年

@ThomasKwa你说得对,谢谢你的提示!
Timtech

3

准将64(16字节)

ROL $A903
BRK
STA $D020
STA $D011
JSR $FF8A
JMP ($032C)

自从我使用Turbo Assembler至今已有20多年了,所以我只能提供VICE显示器使用的源。在$ 032C和save[1]至$ 033B处进行组装。ResetLOAD"PITCHDARK",8,1。打好Runstop+Restore[2]恢复正常。

它是如何工作的?

这是真实的来源:

032C 2E 03      .BY 2E 03
032E A9 00      LDA #$00
0330 8D 20 D0   STA $D020   ; set border color  
0333 8D 11 D0   STA $D011   ; set VIC blanking mode
0336 20 15 FD   JSR $FF8A   ; reset the vectors we trampled
0339 6C 2C 03   JMP ($032C) ; call the real CLALL

$ 032C是内核 CLALL或“关闭所有通道和文件”向量。作为清理的一部分,BASIC LOAD命令执行CLR,然后依次调用CLALL。我们在CLALL向量之后立即用指向我们自己例程的指针来替换向量。我们将边框设置为黑色,并用边框覆盖屏幕,然后调用RESTOR$ FF8A。最后一个向量替换RESTORSAVE$ 0332-0333,这表示最后8个字节不受干扰。然后,我们通过还原的CLALL向量退出以继续LOAD执行。

谢谢你,这很有趣,回过头来,学习了如何做一个自动运行程序:)

[1]使用save而不是bsave,以便使用,1进行加载可以正常工作。
[2]可能是x64中的Escape + PageUp。


3

Arch Linux上的sh / X11,26

b=/b*/*ht;$b =0;read;$b =7

您可能会用别名剃掉几个字符,并且可能同时使用-set这两个字符
ardnew 2014年

1
使用xbacklight = 0xbacklight + 7
bb010g 2014年

1
29个字节:x=xbacklight;$x +0;read;$x +7
nyuszika7h 2014年

@ nyuszika7h:谢谢!(也将它设置为28!)
Ry

3

Bash,37岁

用于unclutter隐藏鼠标指针和的全屏会话xterm以黑屏。如果移动光标,光标将再次出现,但是如果不理会它,则屏幕将变为黑色,直到您按Ctrl + C。

鼠标光标消失将需要几秒钟的时间(只要您不移动它)。如果速度不够快,请将该-grab选项添加到,unclutter以获得额外的6个字符。

unclutter&xterm -fu -bg black -e yes ''

警告:unclutter即使按Ctrl + C,也killall unclutter将停止运行 该进程。

说明

unclutter &发射unclutter。在&那里,因此我们可以继续执行下一个命令,而不必等待该命令终止。

xterm -fullscreen 启动XTerm,默认情况下其背景为黑色。

-e yes ''选项使XTerm运行yes '',从而永远打印空字符串。这用于隐藏终端光标,还提供Ctrl + C功能。


屏幕在我的系统中变白。
六。

@Vi。这意味着您的XTerm背景颜色是白色。

您可以将“ -fullscreen”缩写为“ -fu”,并使用“ -bg black”来强制使用黑色背景色,而不考虑用户的偏好。
2014年

您可以删除周围的空格&以节省2个字节。
nyuszika7h 2014年

3

Bash,31岁(或52岁)

在TTY上,使用以下脚本(假设您的默认TTY背景是黑色,至少对于Ubuntu 12.04 LTS而言是正确的):

setterm -foreground black
clear

即使使用了此脚本,您的TTY仍将完全起作用:)

如果不允许这样做,请使用以下(52个字节):

x='setterm -foreground'
$x black
clear
read
$x white

然后按Enter终止脚本。

特别感谢@ nyuszika7h。


1
对于第二种情况:x='setterm -foreground';$x black;clear;read;$x white(52个字节)。
nyuszika7h 2014年

2

处理中,113

void setup(){noCursor();size(displayWidth, displayHeight);background(0);}boolean sketchFullScreen(){return true;}

我尝试将上面的代码放到draw()上以节省一些字节,但是没有用。按Alt-F4退出。


2

ZX Spectrum Basic(29字节)

1 FOR x=0 TO 255
2 FOR y=0 TO 175
3 PLOT x,y
4 NEXT y
5 NEXT x

遍历屏幕,绘制黑色像素,程序结束时将自动清除这些黑色像素。

ZX Spectrum的基本版使用单个字节作为命令,不使用换行符,如果计算显示的字符,您将获得61个字符。


2

露娜(Lua)+爱(LÖVE)(50)

love.mouse.setVisible()love.window.setFullscreen""

这两个函数都应该采用布尔参数,但这可行。


2

QBasic,9个字节

CLS:SLEEP

CLS清除屏幕,SLEEP没有任何参数将保持执行,直到按下某个键。


2

SmileBASIC,15个字节

XSCREEN 4
EXEC.

按开始或选择将结束程序。

XSCREEN 4设置显示模式以显示跨越两个屏幕的320 * 480图像。这应该清除所有内容,因此ACLS不需要。EXEC.通过在插槽0中不断运行该程序来重复执行代码。我无法执行此操作,XSCREEN 4EXEC.因为您之前不能直接输入数字E


1

Sinclair BASIC-28个字符

BORDER 0:PAPER 0:CLS:PAUSE 0

关于Sinclair BASIC的事情是,每个关键字都有其自己的字符代码(占用一个字节),因此实际上它将占用13个字节(包括空格)。


完成后,这会使屏幕恢复正常吗?
kitcar2000 2014年

@ kitcar2000-考虑一下,不。我可能会在末尾添加“:NEW”作为快速且肮脏的重置,最多占用32个字符/ 15字节
布莱恩

我认为它只有10个字节(带有的12个字符:NEW),因为命令是单个字节而不是字符集合。
kitcar2000 2014年

1

SmileBASIC,23个字节

永久运行,直到使用START或SELECT强制终止程序为止。这将使两个屏幕都完全变黑,从而使3D失效(因此请关闭o3DS上的3D LED)。

ACLS:XSCREEN 3@L GOTO@L

1

大多数POSIX兼容的外壳(至少bashzsh),21

需要在tty上运行

tput civis;clear;read

第一个命令隐藏光标,第二个命令清除屏幕(duh),第三个命令读取一行文本



0

重击:48个字符

eval xrandr\ --output\ DP1\ --{off,auto}\;read\;

CW,因为不清楚其工作方式是否合格:

  • 产生的黑屏是真正的省电功能:它切断发送到显示屏1的信息。
  • 许多计算机显示器在检测到信号丢失时,会暂时或定期显示自己的通知。

(请注意,DP1是第一个连接的显示器。如果您有笔记本电脑,则其嵌入式显示器是eDP1。)


0

HTML应用程序(.hta),102字节

<HTA:APPLICATION CAPTION=no innerborder=0 border=dialog scroll=0 windowstate=maximize><body bgcolor=0>

0

TI-80 BASIC,5个字节

ZOOM OUT
ZOOM OUT
GRIDON

0

Chip-8,0字节

[原始] Chip-8解释器从0x01FC开始执行。解释器在此位置包括两条永久的Chip-8指令,这些指令始终在每个程序开始时执行。其中的第一个0x00E0通过将所有位设置为零来清除显示RAM。第二个,0x004B,调用解释器中的机器语言例程,以打开VIP的显示。

资料来源:http//laurencescotford.co.uk/?p = 75

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.