我有一个让我发疯的问题。我已经成功地将我的 teamviewer 会话从浏览器 uri 连接到我所需的远程资源。我通过在浏览器地址栏中使用以下 uri 命令来实现这一点(实际上,它是在 html 中单击按钮):
- teamviewer8://remotecontrol?connectcc=123456789
尽管这可以根据需要完美连接,但它提出了一个我需要解决的问题。
问题
如果连接尚未打开,则会启动 teamviewer 会话,并根据需要在我的第二个监视器中弹出窗口。都好。但是,如果会话已经在运行并且我向同一个 uri 发起后续请求,则会生成一个新会话,并且我会留下多个重复的会话窗口。从长远来看,这既是资源匮乏的,在实践中也是不可取的。
我的理想解决方案
理想情况下,我希望该进程能够运行,以便在没有给定 id 已经运行的情况下调用新会话。如果具有该 ID 的较早会话正在运行,那么我想找到一种方法来关注它,而不是让 teamviewer 新建一个新会话。
我已经知道的
我知道这是可能的,因为如果您尝试针对已经运行的 id 启动第二个会话,teamviewer 控制台就会这样做。使用 teamviewer 控制台不是一个选项,因为我开发了一个基于 Web 的桌面解决方案,该解决方案需要通过UI 内的按钮单击来启动会话(ID 存储在我自己的数据库中)。
我创建的应用程序有可能会打开数百个重复的窗口,因为我正在集中时间查看一小部分 id 的许多进程,因此迫切需要一个解决方案。
底线
是否可以在 uri 中添加一个参数来告诉teamviewer 不要创建新会话。是否有一个我缺少的简单开关可以解决这个问题?
谢谢阅读...
[编辑] - 虽然不太可能对事情产生任何影响,但我正在使用 asp.net mvc 进行应用程序。我添加了这个信息,因为它很可能是 http 管道正在添加/缓存一些被 teamviewer 解释为 uniq 标识符的东西。
[更新]
经过仔细考虑和无果的搜索,我决定创建自己的代理应用程序并使用我自己选择的协议注册它。使用与 teamviewer 协议相同的参数调用此代理应用程序,即 arb://remotecontrol?connectcc=123456789。我的小应用程序有一个内部字典,并在字典中搜索窗口标题。如果找到匹配项,则使窗口成为焦点,如果没有,则使用 teamviewer 协议执行 Process.Start(),然后将数据添加到字典中。还有其他一些检查,但到目前为止效果很好。
我使用这些链接来获得最初的灵感:
- http://msdn.microsoft.com/en-us/library/aa767914%28VS.85%29.aspx
- http://www.openwinforms.com/run_exe_from_javascript.html
希望这可以帮助其他任何需要在任何情况下需要解决这种情况的人。