0

我在 OpenKODE 环境中构建了一个 C++ 应用程序。专门针对WinRT平台,我需要一个函数,它可以告诉我鼠标是否连接到机器上。我正在尝试使用 Windows 运行时 C++ 模板库 (WRL) 并访问MouseCapabilities.MousePresent 属性来解决这个问题。所以我的代码如下(它只为 WinRT 编译):

#include <Windows.Foundation.h>
#include <Windows.Devices.Input.h>
#include <wrl\wrappers\corewrappers.h>
#include <wrl\client.h>
...
// Initialize the Windows Runtime.
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
{
    return PrintError(__LINE__, initialize);
}
ComPtr<IMouseCapabilities> mouseCapabilities;
HRESULT hr = GetActivationFactory(HStringReference(RuntimeClass_Windows_Devices_Input_MouseCapabilities).Get(), &mouseCapabilities);
if (FAILED(hr))
{
    return PrintError(__LINE__, hr);
}
INT32 present = 0;
hr = mouseCapabilities->get_MousePresent(&present);
if (FAILED(hr))
{
    return PrintError(__LINE__, hr);
}

但是我的 GetActivationFactory 返回失败的 HRESULT,代码为 0x80004002 (E_NOINTERFACE)。我是 WRL 或其他类似 COM 的库的新手,请帮助我做错了什么?

4

2 回答 2

0

“专门针对 WinRT 平台”是什么意思?看起来您正在编写桌面应用程序,而不是 Windows 应用商店应用程序——我不熟悉它,但我没有看到任何迹象表明OpenKODE支持 Windows 应用商店应用程序。

您的代码表面上看起来是正确的,但MouseCapabilities类仅适用于 Windows 应用商店应用程序,并且不能从桌面应用程序实例化。

桌面应用程序可以使用GetSystemMetrics来检测鼠标(与 MouseCapabilities 具有相同的警告:驱动程序可以报告非物理鼠标,因此您无法确定是否连接了物理鼠标)。

于 2015-02-27T01:48:41.120 回答
0

因为IMouseCapabilities您需要ActivateInstance改用:

    ComPtr<IMouseCapabilities> caps;
    HRESULT hr = RoActivateInstance(HStringReference(RuntimeClass_Windows_Devices_Input_MouseCapabilities).Get(), &caps);
于 2016-11-18T06:26:05.517 回答