我在OpenKODE环境中构建了一个C ++应用程序。特别是对于WinRT平台,我需要一个功能,它可以告诉我鼠标是否连接到机器。我试图使用Windows运行时C ++模板库(WRL)解决此问题并访问MouseCapabilities.MousePresent property。 所以我的代码是跟随的(它仅针对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使用0x80004002(E_NOINTERFACE)代码返回失败的HRESULT。我是WRL或其他COM类库的新手,请帮助我做错了什么?
答案 0 :(得分:0)
你是什么意思&#34;特别是对于WinRT平台&#34;?看起来您正在编写桌面应用程序,而不是Windows应用商店应用程序 - 我不熟悉它,但我没有看到OpenKODE支持Windows应用商店应用的任何迹象
您的代码看起来非常正确,但MouseCapabilities类仅适用于Windows应用商店应用,无法从桌面应用实例化。
桌面应用可以使用GetSystemMetrics来检测鼠标(与MouseCapabilities具有相同的警告:驱动程序可以报告非物理鼠标,因此您无法确定是否已连接物理鼠标)
答案 1 :(得分:0)
对于set
,您需要使用IMouseCapabilities
代替:
ActivateInstance