我有一台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;
}
GetConsoleWindow()
代替FindWindowA("ConsoleWindowClass", NULL)
,这样如果有多个控制台打开,就不会错误地找到错误的控制台窗口。2)根据GetAsyncKeyState()
文档,返回值的最低有效位不能保证准确,并且不应该依赖它,所以将== -32767
更改为& 0x8000
或< 0
。3)你的KEY_DOWN/UP()
宏测试0x80000
,而实际上应该是测试0x8000
。 - Remy Lebeau