通过Autohotkey脚本(或镜像Windows应用程序窗口)的TightVNC Viewer无缝窗口

时间:2014-08-11 11:59:17

标签: winapi autohotkey vnc vnc-viewer

我正在尝试使用TightVNC Viewer获得Seamless windows效果 基本上我将客户端可见区域设置为带有

的应用程序
"C:\Program Files\TightVNC\tvnserver.exe"  -controlapp  -shareapp <app PID>

然后我使用以下AutoHotkey脚本来破解TightVNC Viewer窗口(隐藏工具栏的地方):

^!h::
IfWinExist, antonio - TightVNC Viewer
{
   WinSet, Style, ^0xC00000  ; title bar, without you can move only with win-key 
   WinSet, Style, ^0x800000  ; thin-line border
   WinSet, Style, ^0x400000  ; dialog frame
   WinSet, Style, ^0x40000   ; sizing border, without you cannot resize
   WinSet, Style, ^0x200000  ; vertical scroll bar
   WinSet, Style, ^0x100000  ; horizont scroll bar
}
return
; http://www.autohotkey.com/docs/misc/Styles.htm

脚本转换边框和其他窗口元素 我仍然在使用这些样式,但主要问题是滚动条不会消失。

我怎样摆脱它们?

旁注

在本地VNC共享窗口的一个有趣的副作用,即环回连接,是你可以在Windows中获得一些X服务器,吸引多监视器系统。

1 个答案:

答案 0 :(得分:2)

我找到了滚动条的“半通用”解决方案。它们不是窗口的属性,而是一些编辑子控件。通过Window Spy获取控件名称,您可以使用以下命令从某个应用程序中删除栏:

Control, Style, -0x100000, <control name>, <app window name>
Control, Style, -0x200000, <control name>, <app window name>

例如,它适用于记事本,其中<control name>Edit1

不幸的是,TightVNC使用非标准的Window类TvnWindowClass1,我无法影响其滚动条。

无论如何,将服务器选项-shareapp <app PID>替换为-sharewindow <app window name>,没有滚动条。

以下是本地工作示例,假设您要共享calc.exe,其窗口名称为Calculator

按一下 Ctrl + Alt + h ,您将在本地启动共享计算器窗口的客户端 - 服务器VNC。再次按下,您获得无缝效果。再次按下,您将返回标准视图(您可以移动,再次调整大小)。

如果使用 Ctrl + Alt + h 切换窗口样式,则TightVNC工具栏也不会切换,手动将其设置为开启或关闭从窗口控制菜单或使用的正常视图 + 控制 + 替代 +

如果要在两个不同的系统中使用该脚本,则必须将其分为两部分,其中服务器命令在服务器端运行,客户端系统上的客户端命令运行。

请注意,对于更一般的用途,regexp用于命名目标应用程序窗口。

注意 该脚本非常有用,可以复制窗口。 窗口镜像在Linux X Window中是微不足道的(对于显示器的服务器性质),而在Windows中需要工具付费。当您拥有多显示器系统或投影仪并且您想要复制时,镜像变得很有用,而不是整个桌面,而只是第二台显示器(投影仪)上的某些特定窗口。

^!h::
SetTitleMatchMode RegEx
IfWinExist, TightVNC Viewer$
{

   WinGet, Style, Style
   if(Style & 0x800000) {

    WinGetPos, X, Y
    Sleep,  6000    
    WinSet, Style, -0xC00000  ; title bar, without you can move only with win-key 
    WinSet, Style, -0x800000  ; thin-line border                                  
    WinSet, Style, -0x400000  ; dialog frame                                      
    WinSet, Style, -0x40000   ; sizing border, without you can't resize
    Send !+^t ; no toolbar 

    WinMinimize
    Sleep,  500 
    WinRestore  
    WinMove, X, Y 

   } else {

     WinSet, Style, +0xC00000  ; title bar, without you can move only with win-key 
     WinSet, Style, +0x800000  ; thin-line border                                  
     WinSet, Style, +0x400000  ; dialog frame                                      
     WinSet, Style, +0x40000   ; sizing border, without you can't resize
     Send !+^t ; no toolbar
   }

}


IfWinNotExist, TightVNC Viewer$
{
  Run, calc
  Run, "C:\Program Files\TightVNC\tvnserver.exe"  -run
  Sleep,  1000
  Run, "C:\Program Files\TightVNC\tvnserver.exe"  -controlapp -sharewindow Calculator
  Run, "C:\Program Files\TightVNC\tvnviewer"  127.0.0.1
}
return