通过注入绘制到桌面
Drawing to the desktop via injection
我想特别用directX 9绘制桌面壁纸区域。在墙纸上方的图标和文字下。类似于Okozo或VLC的模式之一,或Dreamscene。
所以有很多类似的问题,但没有工作示例或教程。这是一个类似的问题,但不同的方法似乎非常有用。几年前,我正在搜索并找到了这个网站和代码。
除了一个大问题之外,即使使用 alpha 混合,图标文本也会变得块状,这是完美的。我尝试了一些修复程序,但我找不到任何有用的文档,也许我只是没有使用正确的词进行搜索,也许它是专有的。我想我通过调用使桌面区域无效来解决这个问题,但我无法真正分辨,因为在此过程中我弄乱了文本的 alpha 值,因此它无法正确绘制字体颜色。那么如何更改文本以进行正确的 alpha 混合呢?
Pouet 的链接都死了我知道我应该发布一个片段,但我无法确定问题出在哪里,因为它更像是一个意想不到的功能。
我一直在寻找这段代码太久了。
我想写一个像应用程序女巫一样的梦境场景,可以渲染视频文件以外的动态内容,这可能是最有希望的解决方案。
我在VS2010 Win7x64中编译了您的代码,发现:
桌面图标文本变得透明,就像 Dreamscene 在窗口时所做的那样:
- 0x00150138 "项目经理"普罗格曼
- 0x000605D6 " SHELLDLL_DefView
- 0x000C05BA "文件夹视图" 系统列表视图32
- 0x000605D6 " SHELLDLL_DefView
桌面图标文本变得正常,但当窗口如下所示时不够清晰:
- 0x000B007C "工人W
- 0x000605D6 " SHELLDLL_DefView
- 0x000C05BA "文件夹视图" 系统列表视图32
- 0x000C05BA "文件夹视图" 系统列表视图32
- 0x000605D6 " SHELLDLL_DefView
- 0x000511E2 "工人W
- 0x00150138 "项目经理"普罗格曼
我尝试了这种方法在Windows 8中绘制桌面图标后面,以使窗口状态始终像第二个条件;并尝试使用D3D在Progman窗口上方的WorkerW窗口上绘制,但没有任何渲染。
到目前为止,没有任何帮助,转储 memoryDC 使用的位图可能会有所帮助,我将稍后尝试。
如果您有任何进一步的方法,请告诉我。
自从我上次使用英语以来已经很久了,如果有的话,对不起我的错误。
更新:清除图标文本得到!
在 d3ddev->BeginScene();
d3ddev->SetSamplerState(0,D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
d3ddev->SetSamplerState(0,D3DSAMP_MAGFILTER, D3DTEXF_GAUSSIANQUAD);
而这个:
HWND desktop = GetDesktopWindow();
HWND explorer = FindWindowEx(desktop, 0, _T("Progman"), _T("Program Manager"));
SendMessageTimeout(explorer, 0x052C, 0, 0, SMTO_NORMAL, 3000, NULL);
HWND defView = 0;
HWND worker = 0;
while(!defView) {
worker = FindWindowEx(desktop, worker, _T("WorkerW"), 0);
if(worker) {
defView = FindWindowEx(worker, 0, _T("SHELLDLL_DefView"), 0);
}
else break;
}
if (!worker){ /*DBG("First WorkerW failed");*/ return 0;}
worker = FindWindowEx(desktop, (HWND)worker, _T("WorkerW"), 0); //find the next WorkerW
if (!worker){ /*DBG("Created WorkerW not found");*/ return 0;}
仍在列表上绘制视图,但工作线程窗口必须存在。此代码仅在启用 Aero 主题的情况下运行。
- 试图在visual studio上用C++创建一个桌面应用程序
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 如何在桌面C++上使用 WinApi 画线
- 如何在快板的屏幕中显示子位图的绘制?
- Linux绘制文本模式(无GUI,桌面)
- FreeGrot(类似于OpenGL)正在拍摄我的桌面而不是绘制形状
- 如何使用 GDI API 在 Windows 桌面上绘制
- Gdiplus DrawString 在远程桌面上绘制透明文本
- 通过注入绘制到桌面
- 使用visualc++在桌面上绘制
- 在(桌面)屏幕上绘制变形对象