将窗口焦点放在没有活动会话的Windows服务器上

时间:2017-01-23 16:39:54

标签: c# winforms focus

出于特定原因,我必须在Windows服务器上运行Windows窗体应用程序(2012 RC2,由LiquidWeb托管)。表单应用程序本身是在特定文件系统更改时从控制台应用程序生成的。

该应用程序的目的是使用WebBrowser控件自动执行任务。为了完成任务,我们需要以不同的时间间隔向表单应用程序发送密钥输入(以上载和下载文件)。为了实现这一点,应用程序需要有重点。我使用this thread中的代码专注于应用,没有任何问题。

只要我已登录(通过远程桌面),这一切都很有效,。但是,当我关闭远程桌面会话(没有注销用户)时,表单应用程序似乎无法获得焦点。

产卵效果很好,表单应用程序按计划启动并启动其浏览器会话,但只是不会获得焦点。当我使用远程桌面重新登录时,我可以在控制台应用程序中看到背后的表单应用程序。

我已经尝试过任何SetForegroundWindow / ShowWindow的组合,我可以直接从表单应用程序和生成它的控制台应用程序。我也尝试在生成表单应用程序后从控制台应用程序运行AutoHotKey脚本(包含WinActivate命令),结果相同(只要我有" visual"会话就行了)

任何想法?

1 个答案:

答案 0 :(得分:0)

因此,这似乎与远程计算机在离开远程桌面会话时被锁定这一事实有关,从而阻止有问题的应用程序控制焦点。

解决方案是使用tscon命令注销,如this文章中所述。基本上,通过运行包含以下内容的bat文件来注销:

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
  %windir%\System32\tscon.exe %%s /dest:console
)