用于屏幕捕获的 C++ 代码

标签 c++

我需要编写代码来进行屏幕共享,例如 WebEx 或 Team Viewer for Windows PC。要求是我没有管理员权限并且我不能为此安装任何应用程序或软件。我知道以下技术,但没有一个对我有用。我已经尝试了此代码项目 URL http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen 的所有示例

(1) GetDC(NULL) 和带 SRCCOPY 的 BitBlt <= 这不会捕获透明窗口 并且它会导致 GDI 挂起(只需尝试在 Paint 中绘图.. 你的执行 BitBlt 操作时铅笔卡住了一段时间)

(2) GetDC(NULL) 和带有 SRCCOPY 和 CAPTUREBLT 选项的 BitBlt <= 这将在我调用 BitBlt 操作时隐藏 Cursor 并且在执行 BitBlt 操作时 GDI Hung .

(3) 我还尝试使用 DirectX 使用 GetFrontBufferData。这会导致我的透明窗口闪烁

(4) 我尝试使用 Windows Media API 但这需要安装 Windows Media Encoder

(5) 我也尝试过使用Mirror Driver,但这需要使用管理员权限安装驱动程序。

任何人都可以推荐 API,无需任何安装我可以捕获整个屏幕并且没有闪烁或 GDI 挂起问题。

提前致谢......

最佳答案

问题是,无论您使用什么方法,您都必须连接到系统(拦截一些操作系统到驱动程序的调用),让系统给您时间安全地进行操作。这需要任何软件以管理模式运行。

由于权限不足导致某些内部调用失败,上述所有方法均失败。

如果你想一想,如果在用户级别运行一个 exe 可以共享系统调用,即使来自非系统级别用户,系统可能存在严重的安全漏洞:我只需要提供一个你使用的应用程序,它共享你的屏幕而不需要你注意到了。

因此,与其试图欺骗您公司的安全政策,不如询问您的管理员:如果您出于商业目的需要这些软件,他们会做所需的事情。

关于用于屏幕捕获的 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19134412/

相关文章:

c++ - 为什么我可以将 char* 隐式转换为 const char* 而不是 unsigned char*

c++ - 为什么使用 debug 或 release 模式时,boost 数值库会给出不同的结果?

c++ - 混合 shared_ptr 和普通 ptr

c++ - 尽管我的 Codeblocks IDe 上有输出,但提交的代码告诉 No output

c++ - 循环链表 : How to correct my remove node function?

c++ - 是否可以在 2GB 以上的文件上创建更小的内存映射 View ?

c++ - 模板结构和模板成员函数之间的名称冲突

c++ - 从字符串文字初始化 char 数组是否被认为是隐式转换?

C++删除数组中的最后一个符号

c++ - 除法对负数停止工作