回答
运行另一个应用程序(它与OpenGl绘制水手),并绘制它。
得到这个程序绘制的图像(通过opengl),将它用作纹理,进行一些变换并替换原始图像。
这些是两个完全不同的东西。根据进一步的说明,“最简单”和“最干净”的方式(如果你可以称之为)根据进一步的说明做你明显想要做的事情的方法是钩wglSwapLayerBuffers
(其中似乎是什么SwapBuffers
和wglSwapBuffers
内部呼叫,你需要确认或者勾选全部三项)。
然后,您拥有一个有效的上下文句柄,并且在交换缓冲区时,您肯定(必然!)帧缓冲区内容是有效且一致的,不存在半绘制原语。因此,没有什么能阻止你回读前面或后面的缓冲区(或两者!),在它上面运行一些内核,然后在将控制权返回给应用程序之前写回。
由于上下文句柄是唯一有效的过程,只有这样,不仅能够可靠地工作没有麻烦,没有一些真是可恶黑客(比这更讨厌的是已经)是通过将假opengl32.dll
,就像这样的工具像GLIntercept一样。
你也许可以从一个迷你调试器“窃取”手柄,但它不会对你的过程有效,所以没有用。
但是...像datenwolf说:只是不这样做。
哦,看起来真的很讨厌。所以像fraps这样的程序(它表明FPS over program)以相同的方式工作? – Jeka 2012-02-16 12:26:31
最有可能。实际的FPS _display_是微不足道的,这可以通过一个分层窗口来完成,除了GDI之外别无它法。但是由于知道FPS涉及知道何时(或多久)缓冲器被切换,所以他们可能需要做API挂钩。唯一的选择是阅读一些特定于IHV的性能计数器,但这同样麻烦且便携性较差... – Damon 2012-02-16 12:53:30
至少,我可以通过我的应用程序获取图像吗?我应该使用钩子来保持最新? – Jeka 2012-02-16 13:28:17
在Windows中只使用非常模糊和肮脏的黑客。我不推荐它。 Qt只是一个框架,依赖于底层的操作系统。在Windows上,所有的Windows限制都适用。
在X11上,你可以在两种模式下创建的OpenGL上下文:直接或间接(见glXCreateContext和glXCreateNewContext的直接参数)。间接上下文可以在X客户端之间共享,因为对于X服务器,没有进程或不同的客户端。只有XID,OpenGL上下文就是其中之一。这允许您在连接到同一个X显示的进程之间传递间接OpenGL上下文的XID。直接上下文绕过GLX协议,因此不能共享。
- 1. 在另一个应用程序中的OpenGL窗口
- 2. 从另一个桌面找到应用程序的窗口
- 3. 用另一个窗口控制另一个窗口
- 4. 一个应用程序在另一个的NSView上绘制
- 5. 获取另一个应用程序窗口的唯一ID
- 6. R - 如何将图形绘制到由另一个应用程序创建的存在窗口
- 7. C++/Linux - 绘制到一个窗口
- 8. 如何在IPhone窗口应用程序中显示另一个窗口
- 9. 如何使另一个应用程序的窗口的父窗口?
- 10. 在另一个应用程序中操作滚动条窗口
- 11. 无法从另一个应用程序(窗口)获取文本
- 12. 从C#中的另一个应用程序显示WPF窗口#
- 13. 在另一个应用程序后面打开窗口
- 14. 如何让另一个应用程序的窗口透明?
- 15. 在另一个Delphi应用程序中嵌入Delphi窗口
- 16. OpenGL正交视图应用程序窗口到全屏
- 17. Opengl在窗口中央绘制
- 18. 在同一个OpenGL窗口中绘制2D和3D
- 19. 使用mingw交叉编译一个opengl应用程序的窗口
- 20. Facebook应用程序在窗口中显示一个窗口
- 21. 制作另一个应用程序的窗口最前面和重点
- 22. 如何在另一个窗口的窗体中绘制
- 23. 强制窗口交换应用程序
- 24. 从另一个应用程序控制应用程序
- 25. 从另一个应用程序控制WPF应用程序
- 26. 使win32控制台应用程序显示一个窗口
- 27. 制作绘制/绘制应用程序
- 28. 从另一个应用程序抓取应用程序的OpenGL输出
- 29. 移动或隐藏UWP应用程序窗口到另一个显示器
- 30. 我的应用程序如何检测到另一个应用程序窗口的更改?
请更具体和/或给我们一些示例代码。 “在我的程序中我必须运行另一个应用程序”是什么意思?你是否从你的程序开始一个新的过程? – tr9sh 2012-02-16 09:12:50
目前没有任何代码。 “你是否从你的程序开始一个新的过程?”是的,我想是这样。我选择运行哪个程序(exe文件),获取由该程序(通过opengl)绘制的图像,将其用作纹理,进行一些变换并替换原始图像。 – Jeka 2012-02-16 09:56:32
@Jeka:你能再详细一点吗?你也应该知道,这样做的解决方案(如钩子已经回答)可以触发反病毒/反作弊程序。 – KillianDS 2012-02-16 13:11:13