根据j-krue的回答和AutoHotKey脚本。来源:
https://autohotkey.com/boards/viewtopic.php?t=15619。
以下代码在Windows 10上经过测试,可以正常切换平板模式,无需重新登录或重启。
sruct ITabletModeController : IUnknown
{
virtual HRESULT STDMETHODCALLTYPE GetMode(int* piMode) = 0;
virtual HRESULT STDMETHODCALLTYPE SetMode(int iMode, int iModeTrigger) = 0;
};
DEFINE_GUID(CLSID_ImmersiveShell, 0xC2F03A33, 0x21F5, 0x47FA, 0xB4, 0xBB, 0x15, 0x63, 0x62, 0xA2, 0xF2, 0x39);
DEFINE_GUID(IID_ITabletModeController, 0x4FDA780A, 0xACD2, 0x41F7, 0xB4, 0xF2, 0xEB, 0xE6, 0x74, 0xC9, 0xBF, 0x2A);
static void EnableTabletMode(BOOL bEnable)
{
::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IServiceProvider* pServiceProvider = NULL;
HRESULT hr = CoCreateInstance(CLSID_ImmersiveShell, NULL, CLSCTX_LOCAL_SERVER, IID_IServiceProvider, (PVOID*)&pServiceProvider);
if (SUCCEEDED(hr))
{
ITabletModeController* pTabletController = NULL;
hr = pServiceProvider->QueryService(IID_ITabletModeController, IID_ITabletModeController, (void**)&pTabletController);
if (SUCCEEDED(hr) && pTabletController)
{
int iMode = -1;
hr = pTabletController->GetMode(&iMode);
int iToMode = bEnable ? 1 : 0;
if (iMode != -1 && iMode != iToMode)
{
hr = pTabletController->SetMode(iToMode, 4);
}
pTabletController->Release();
}
pServiceProvider->Release();
}
::CoUninitialize();
}