【问题标题】:TightVNC Viewer seamless windows via Autohotkey script (or mirroring Windows app windows)通过 Autohotkey 脚本(或镜像 Windows 应用程序窗口)实现 TightVNC 查看器无缝窗口
【发布时间】:2014-10-04 06:02:30
【问题描述】:

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

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

然后我使用以下 AutoHotkey 脚本破解 TightVNC 查看器窗口(我隐藏工具栏的位置):

^!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 服务器,这对多显示器系统很有吸引力。

【问题讨论】:

  • 滚动条不会被WS_HSCROLLWS_VSCROLL 窗口样式启用/禁用——这些样式仅用于指示滚动条是否可见。程序使用SetScrollInfo 和类似函数控制其滚动条。
  • @JonathanPotter:谢谢,但这正是我想做的:让它们不可见。在 Autohotkey ^ 中切换属性,它实际上添加/删除了 第二对 滚动条。记事本窗口也会发生这种情况。使用记事本,刚才我成功了:使用 Autohotkey Windows Spy,我看到这些条与主窗口无关,而是与内部 Edit1 控件相关,因此我为其设置了 0x200000 样式。使用 TightVNC 仍然无法正常工作。间谍说要破解的窗口是 TvnWindowClass1,它可能不支持0x200000 样式。

标签: winapi autohotkey vnc vnc-viewer


【解决方案1】:

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

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

例如它适用于记事本,其中&lt;control name&gt;Edit1

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

无论如何,用-sharewindow &lt;app window name&gt; 替换服务器选项-shareapp &lt;app PID&gt;,没有滚动条。

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

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

如果使用 Ctrl+Alt+h 切换窗口样式,TightVNC 工具栏也不会切换,请在从窗口控制菜单或使用普通视图 Shift+Ctrl+Alt+t

如果你想在两个不同的系统中使用脚本,你必须将它分成两部分,服务器命令在服务器端运行,客户端命令在客户端系统上运行。

请注意,对于更一般的用途,正则表达式用于命名目标应用程序窗口。

注意 该脚本在复制窗口时很有用。 窗口镜像在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2016-07-12
    • 2019-05-25
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多