仅使用MB_OK时,WTSSendMessage不返回超时

问题描述

我正在编写一个简单的系统服务,以根据计划打开和关闭某些计算机的远程桌面访问。这包括通知,然后注销系统切换到仅本地时将要连接的远程用户

为了通知用户,我使用了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将包含respIDYES,或IDNO,具体取决于发生的情况。我还尝试显式地使用该函数的unicode(IDTIMEOUT)版本,以防万一,但它不会改变任何内容

这是终端服务API中的错误吗?我在任何地方都找不到对此行为的引用。是否有解决方法(除了改写消息并使用“是/否”或“确定/取消”布顿夫妇)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)