Ram*_*san 5 rdp remote-desktop gdi screen-capture visual-c++
我正在开发一个记录屏幕的应用程序,它应该支持终端服务,问题实际上是当 RDP 窗口最小化时,用户会话进入无 UI 模式,并且在该应用程序上运行的应用程序无法捕获屏幕特定会议。
\n\n有一种方法可以通过设置注册表值来保留 UI 来处理此问题,如此处所述。
\n\n但我不想这样做,并且想捕获 UI less 模式状态并向用户显示一条消息,表明 RDP 窗口已最小化/已发生快速用户切换并且录制已暂停。
\n\n因此,我决定枚举活动会话并检查用户会话是否空闲或 UI less。但这没有帮助。在几乎花了一天时间后,我没有找到任何关于在 RDP 窗口最小化时检测快速用户切换的线索。
\n\n我找不到任何可以调用的事件或 API,以确保屏幕捕获因快速用户切换/最小化 RDP 窗口而失败。
\n\n这是我的代码,
\n\nbool bActive = false;\n\n{\n DWORD dwCurrentProcessSessionID = 0;\n\n ProcessIdToSessionId(GetCurrentProcessId(), &dwCurrentProcessSessionID);\n\n PWTS_SESSION_INFO pSessionInfo = 0;\n DWORD dwCount = 0;\n\n // Get the list of all terminal sessions \n WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSessionInfo, &dwCount);\n\n int dataSize = sizeof(WTS_SESSION_INFO);\n\n // look over obtained list in search of the active session\n for (DWORD i = 0; i < dwCount; ++i)\n {\n WTS_SESSION_INFO si = pSessionInfo[i];\n if (_WTS_CONNECTSTATE_CLASS::WTSActive == si.State)\n {\n // If the current session is active \xe2\x80\x93 store its ID\n if (dwCurrentProcessSessionID == si.SessionId)\n {\n // would like to have an API that can identify whether the current RDP session is UI less\n if (FunctionToFindCurrentRDPIsUIless(si.SessionId))\n {\n bActive = false;\n }\n else\n {\n bActive = true;\n }\n\n break;\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n任何帮助,将不胜感激。
\n| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |