经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++判断当前程序是否运行在Windows展台(Kiosk)模式下
来源:cnblogs  作者:HRESULT  时间:2024/6/26 8:53:42  对本文有异议

Windows有一个展台(Kiosk)模式。展台模式可以使Windows作为数字标牌进行使用。具体请参考Windows 展台

配置完展台模式,重启设备后,Windows会以全屏的方式运行展台应用,无法进入桌面。有点类似iPhone中的引导者模式。此时我们自己的应用如果设置了开机自启,也会运行,但是会被展台应用遮挡,无法显示在最前,即使设置了TOPMOST也没有用。其原因是展台应用使用了UIAccess

如图:将Windows安全中心为展台应用
image
image

那如何判断我们的应用现在已经被展台遮挡了呢?
配置展台时,系统会将展台账户的SID写入注册表HKLM\SOFTWARE\Microsoft\Windows\AssignedAccessConfiguration\Configs\的子级,我们只需要获取当前进程的用户令牌,根据令牌拿到SID,再查询此SID是否存在于注册表中即可。

关键代码如下:

  1. bool CheckIsKioskMode()
  2. {
  3. HANDLE hToken = NULL;
  4. if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
  5. {
  6. DWORD dwSize = 0;
  7. if (!GetTokenInformation(hToken, TokenUser, NULL, 0, &dwSize) && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
  8. {
  9. PTOKEN_USER pTokenUser = (PTOKEN_USER)malloc(dwSize);
  10. if (GetTokenInformation(hToken, TokenUser, pTokenUser, dwSize, &dwSize))
  11. {
  12. PSID pSid = pTokenUser->User.Sid;
  13. LPTSTR strSid = NULL;
  14. if (ConvertSidToStringSidW(pSid, &strSid))
  15. {
  16. std::wstring basePath = L"SOFTWARE\\Microsoft\\Windows\\AssignedAccessConfiguration\\Configs\\";
  17. std::wstring registryPath = basePath + strSid;
  18. HKEY hKey;
  19. LONG result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, registryPath.c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
  20. LocalFree(strSid);
  21. free(pTokenUser);
  22. CloseHandle(hToken);
  23. if (result == ERROR_SUCCESS)
  24. {
  25. RegCloseKey(hKey);
  26. printf("当前进程所在的会话是展台Kiosk模式\n");
  27. return true;
  28. }
  29. else
  30. {
  31. return false;
  32. }
  33. }
  34. free(pTokenUser);
  35. }
  36. }
  37. CloseHandle(hToken);
  38. }
  39. return false;
  40. }

原文链接:https://www.cnblogs.com/xyycare/p/18267786/cpp-check-kiosk

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号