如何使用Windows放大API反转整个屏幕颜色?

时间:2019-06-17 07:51:53

标签: .net windows visual-c++

我主要用Java编写一个恶作剧应用程序,但是有一小部分Visual C ++可以帮助访问某些本机Windows API /功能。

我该如何使用Visual C ++通过一个函数来自动反转整个屏幕的颜色,以模仿Windows Magnifier的方式,并使用Windows Magnification API将该函数恢复为正常状态?

我已经进行了深入的在线研究,但是没有找到能完成任务的任何代码。

2 个答案:

答案 0 :(得分:0)

我无法在帖子上添加评论,所以我在这里写下来。

您可能已经错过了以下名为NegativeScreen的开源项目。 这是说明

  

说明

     

NegativeScreen的主要目标是在   在一个黑暗的房间里享受明亮的白色网络。这个任务是   反转屏幕的颜色即可轻松实现。不像   Windows放大镜,也可以进行这种颜色反转,   NegativeScreen专门设计为易于使用   采用。它带有系统形式的最小图形界面   带有上下文菜单的任务栏图标,但是不用担心,这只会使它   更容易使用!

     

功能

     

反转屏幕的颜色。

     

....

因此,您可能需要检查一下以获取参考https://github.com/mlaily/NegativeScreen

答案 1 :(得分:0)

放大API仅使用 DSTINVERT 标志:

A反转屏幕测试颜色=>

HDC hDC = GetDC(NULL);
RECT rcClient;
GetClientRect(GetDesktopWindow(), &rcClient);
int nWidth = rcClient.right - rcClient.left;
int nHeight = rcClient.bottom - rcClient.top;
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, nWidth, nHeight);
HBITMAP hBmOld = (HBITMAP)SelectObject(hMemDC, hBitmap);
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hDC, 0, 0, SRCCOPY);
BitBlt(hDC, 0, 0, nWidth, nHeight, hMemDC, 0, 0, DSTINVERT);
SelectBitmap(hMemDC, hBmOld);
DeleteDC(hMemDC);
DeleteObject(hBitmap);
ReleaseDC(NULL, hDC);