问题描述
我正在编写一个简单的系统服务,以根据计划打开和关闭某些计算机的远程桌面访问。这包括通知,然后注销系统切换到仅本地时将要连接的远程用户。
为了通知用户,我使用了WTSSendMessage
函数,该函数可以在给定会话中显示一个对话框。它还允许指定超时-在这种情况下非常重要,这样,如果没有人在给定的超时时间内确认该消息,则该服务可以简单地强制注销。
我面临的问题是WTSSendMessage
(至少在最新的Windows 10版本2004和Windows Server 2019版本1809上,我测试过的两个系统)没有返回{{ 1}},只要对话框中只有“确定”按钮即可:
IDTIMEOUT
在这种情况下,WTSSendMessage(WTS_CURRENT_SERVER_HANDLE,WTS_CURRENT_SESSION,SESSION_STOP_TITLE,strlen(SESSION_STOP_TITLE),SESSION_STOP_MSG,strlen(SESSION_STOP_MSG),MB_OK | MB_ICONEXCLAMATION,SESSION_WARNING_TIMEOUT,&resp,TRUE);
变量始终包含resp
,与用户单击“确定”还是超时到期无关。文档中没有任何关于单击“确定”按钮的特殊情况的说明。
如果我代替IDOK
使用其他任何东西(例如MB_OK
),则该呼叫正常运行,并且MB_YESNO
将包含resp
,IDYES
,或IDNO
,具体取决于发生的情况。我还尝试显式地使用该函数的unicode(IDTIMEOUT
)版本,以防万一,但它不会改变任何内容。
这是终端服务API中的错误吗?我在任何地方都找不到对此行为的引用。是否有解决方法(除了改写消息并使用“是/否”或“确定/取消”布顿夫妇)?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)