识别窗口的变体
Identifying variations of windows
我正在编写一个库,我想在各种平台的程序中使用它。以下是我检测不同版本的窗口的方法:
#if defined(_MSC_VER)
#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
// Windows PC Store App
#define OS_WINDOWS_STORE
#endif
#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// Windows Desktop App
#define OS_WINDOWS
#endif
#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
// Windows Phone App
#define OS_WINDOWS_PHONE
#endif
#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
// Windows RT Store App
#define OS_WINDOWS_RT
#endif
#elif defined(_WIN32_) || defined(_WIN32)
// Windows Desktop App
#define OS_WINDOWS
#endif
我的理解是WINAPI_FAMILY_PARTITION任何x86程序都应设置为DESKTOP,PC_APP x86上的Windows应用商店应用程序,因此我在DESKTOP之前检查PC_APP。然后,PHONE_APP Windows 8 Phone应用程序,并且APP是为所有内容定义的,因此我认为如果其他应用程序都没有成功,我们必须使用WinRT应用程序。这是对的吗?另外,我相信此标头仅包含在最新版本的MSVC中,在默认为Win32检查之前,我应该使用什么截止点?2011年之前的东西足够好吗?
根据您要区分这些的原因,有比您的方法更好的方法来解决此问题。 例如,如果您想知道可以访问什么 API,您应该使用推荐的方法并在代码中的适当位置检查WINAPI_FAMILY_PARTITION
。
如果你想使用你的方法,有很多问题。首先,你的 #ifdefs 不匹配。其次,WINAPI_PARTITION_APP
是一个已弃用的常量,与 WINAPI_FAMILY_PC_APP
相同。第三,如果你真的想识别Windows RT版本,你需要检查CPU,而不是WINAPI_FAMILY
,因为Windows RT(即ARM上的Windows 8.1)和Windows 8.1 Store(即x86或x86-64上的Windows应用商店应用程序)都有相同的API可供他们使用。
#if defined(_MSC_VER)
#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
#if _M_ARM
// Windows RT Store App
#define OS_WINDOWS_RT
#else
// Windows PC Store App
#define OS_WINDOWS_STORE
#endif
#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// Windows Desktop App
#define OS_WINDOWS
#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
// Windows Phone App
#define OS_WINDOWS_PHONE
#endif
#elif defined(_WIN32_) || defined(_WIN32)
// Windows Desktop App
#define OS_WINDOWS
#endif
相关文章:
- 提升 ASIO 无法识别计时器对象
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 从udp接收帧对于人脸识别来说太慢
- 问:如何使用C++中的按钮从窗口打开窗口
- 模板类无法识别友元运算符
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- std::visit无法识别类型
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 处理闪烁窗口事件
- 仅从 EnumDesktopWindows 识别应用程序窗口
- 如何识别子窗口小部件中的QMouseEvent
- 识别窗口的变体
- 来自文件的窗口语音识别 (SAPI) 的质量
- 如何识别UI窗口以便将其追溯到源代码
- 检测键盘输入后,窗口识别的关键
- 像cerr, exit, string这样的c++表达式在eclipse c++ IDE窗口中无法识别