关闭显示器?

5
我有一台64位的Windows 10电脑,经常在屏幕前进行编程。为了防止屏幕的光线和辐射与我的头部碰撞,我需要适时地休息,并通过使屏幕变黑色(就像关闭了一样)来限制这种情况。

我现在能做到的是切换到登录界面,但我希望看到的是真正意义上的黑屏,以此来缓解压力!请问我是否可以通过编程实现这个功能呢?

以下是我目前拥有的代码:

#include <Windows.h>

#define KEY_DOWN(key) ((::GetAsyncKeyState(key) & 0x80000) ? 1 : 0)
#define KEY_UP(key)   ((::GetAsyncKeyState(key) & 0x80000) ? 0 : 1)

int main(void)
{
    // Hide the console window
    HWND hWnd;
    AllocConsole();
    hWnd = FindWindowA("ConsoleWindowClass", NULL);
    ShowWindow(hWnd, 0);

    //Press ctrl + alt + 'L' to lock / Press ctrl + 'E' to terminate the program
    while (1)
    {
        if (::GetAsyncKeyState('L') == -32767)
        {
            if (KEY_DOWN(VK_CONTROL) && KEY_DOWN(VK_MENU))
                LockWorkStation();
        }
        if (::GetAsyncKeyState('E') == -32767)
        {
            if (KEY_DOWN(VK_CONTROL))
                return 0;
        }
    }
    return 0;
}

2
纯黑屏保怎么样? - Iłya Bursov
1
@Lashane 在这种情况下,它只会发出低水平的黑色光线。这与关闭不同。 - Laurel
1
@Laurel 我想这是指“我真正希望实现的是黑屏”。 - Iłya Bursov
@Laurel 我同意黑色光线的危险性,有时甚至比其他颜色的光线更危险。在这种情况下,您需要特殊接地的锡箔帽,普通的可能不起作用。 - Slava
3
注释:1)使用GetConsoleWindow()代替FindWindowA("ConsoleWindowClass", NULL),这样如果有多个控制台打开,就不会错误地找到错误的控制台窗口。2)根据GetAsyncKeyState()文档,返回值的最低有效位不能保证准确,并且不应该依赖它,所以将== -32767更改为& 0x8000< 0。3)你的KEY_DOWN/UP()宏测试0x80000,而实际上应该是测试0x8000 - Remy Lebeau
1个回答

11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接