Vscode-vibrancy: 问题拖动,通过标题栏移动窗口

创建于 2019-07-19  ·  75评论  ·  资料来源: EYHN/vscode-vibrancy

你好,

Windows 10 中的移动窗口似乎存在错误。禁用活力并重新启动 VSC 后,移动窗口按预期工作。

b5IPZOAbeZ

顺便提一句。 非常感谢这个插件。 对此,我真的非常感激。

最有用的评论

我花了几天时间研究这个问题,现在我放弃了。 好像是DWM内部的问题,鼠标轮询率高于屏幕率,导致渲染请求阻塞在队列中,看起来像鼠标延迟。

别着急,同样的问题也出现在了微软的Office中,成千上万的Windows用户都被它所困扰,下面是一些讨论:

https://answers.microsoft.com/en-us/msoffice/forum/all/why-does-my-excel-window-lag-so-much-when-moved/04b1fb97-b9da-481e-b37a-63257460c5b7

https://answers.microsoft.com/en-us/windows/forum/windows_10-performance/windows-10-mouse-lag-sluggish-window-dragging-in/12ab88a5-9e13-4d37-8f2d-106d56fcd775

现在有一些方法:

  • 使用 Windows 10 1809 等待微软修复问题
  • 关闭“拖动时显示窗口内容”
    在任务栏的搜索框中,输入“性能”,然后在结果列表中选择“调整 Windows 的外观和性能”。 在“视觉效果”选项卡上,取消选择“拖动时显示窗口内容”。
  • 降低鼠标轮询率
    在很多游戏鼠标驱动面板中都可以调整鼠标轮询率。

    我还将提供一个仅透明的版本,消除模糊并与所有操作系统和环境兼容。


我花了几天时间研究这个问题,现在我放弃了。看起来是 DWM 内部问题,鼠标的回报率导致屏幕显示率显示呈现请求中的情况,在提示延迟的情况下。

不用担心,同样的问题还出现在 Office 软件中,上千个 Windows 用户会受到其网络的影响,以下是一些讨论:

https://answers.microsoft.com/en-us/msoffice/forum/all/why-does-my-excel-window-lag-so-much-when-moved/04b1fb97-b9da-481e-b37a-63257460c5b7

https://answers.microsoft.com/en-us/windows/forum/windows_10-performance/windows-10-mouse-lag-sluggish-window-dragging-in/12ab88a5-9e13-4d37-8f2d-106d56fcd775

现在有几种备用方法:

  • 使用 Windows 10 1809,然后等待微软修复问题
  • 关闭“时显示窗口内容”
    在任务栏搜索选择“调整 Windows 外观性能和性能显示”,在“视觉选项卡关闭功能,显示时窗口内容”
  • 降低鼠标回报率一般游戏驱动面板都可以调整鼠标回报率

之后我还提供了一个透明版本,清除所有运行和桌面环境。

所有75条评论

感谢您的反馈,非常抱歉。 我不知道如何解决这个问题。 我认为这是Windows中的错误。

我也遇到过这个问题

丙烯酸效果将在电子窗口上产生拖曳延迟。 如果你在后面使用模糊或透明渐变,它就不会出现。

其实我在windows 10 1809中从来没有见过这样的问题。

这个问题出现在Windows 1903,不知道是不是只出现在这个版本。 (其实Windows 1903已经出现了一些界面错误。)

我只在 Windows 1903 上试过这个。有没有人在更新的 Insider 版本的 Windows 上试过这个扩展? 有趣的是,这个问题似乎不会影响 GPU 或 CPU 的使用。

我也是 1903 面临这个问题

1903同样的问题

同样的问题

+1

1903同样的问题

似乎是 1903 问题,因为我在 1809 上没有问题

+1

在 #14 v1.0.6 中。 鼠标卡顿还是存在的,试过很多方法,1903都解决不了。

问题不在电子上,目前还没有完美的方法来打开 1903 年没有 UWP 的亚克力效果。

鼠标延迟在最新的 Windows 10 Insider Preview 中仍然存在。

感谢您花时间研究这个@EYHN。 我想知道是否有办法让 Windows 认为 VSCode/Electron 是一个 UWP 应用程序。

我只是来这里报告这个问题。 有点高兴我不是唯一拥有它的人。

在我工作的电脑上,Windows 1809 的规格还算不错 - 移动没有任何延迟。
在我的家用电脑上,更好的规格,Windows 1903,太慢了。

许多天过去了,这个问题仍然存在。
我已在https://github.com/EYHN/vscode-vibrancy/tree/master/src/blur-cli推送 Windows 的本机代码。
如果你对windows非常了解,也许你可以帮助我

新闻:在window 10 1903中,我发现将“鼠标率”降低到帧率以下可以有效解决这个问题。

我花了几天时间研究这个问题,现在我放弃了。 好像是DWM内部的问题,鼠标轮询率高于屏幕率,导致渲染请求阻塞在队列中,看起来像鼠标延迟。

别着急,同样的问题也出现在了微软的Office中,成千上万的Windows用户都被它所困扰,下面是一些讨论:

https://answers.microsoft.com/en-us/msoffice/forum/all/why-does-my-excel-window-lag-so-much-when-moved/04b1fb97-b9da-481e-b37a-63257460c5b7

https://answers.microsoft.com/en-us/windows/forum/windows_10-performance/windows-10-mouse-lag-sluggish-window-dragging-in/12ab88a5-9e13-4d37-8f2d-106d56fcd775

现在有一些方法:

  • 使用 Windows 10 1809 等待微软修复问题
  • 关闭“拖动时显示窗口内容”
    在任务栏的搜索框中,输入“性能”,然后在结果列表中选择“调整 Windows 的外观和性能”。 在“视觉效果”选项卡上,取消选择“拖动时显示窗口内容”。
  • 降低鼠标轮询率
    在很多游戏鼠标驱动面板中都可以调整鼠标轮询率。

    我还将提供一个仅透明的版本,消除模糊并与所有操作系统和环境兼容。


我花了几天时间研究这个问题,现在我放弃了。看起来是 DWM 内部问题,鼠标的回报率导致屏幕显示率显示呈现请求中的情况,在提示延迟的情况下。

不用担心,同样的问题还出现在 Office 软件中,上千个 Windows 用户会受到其网络的影响,以下是一些讨论:

https://answers.microsoft.com/en-us/msoffice/forum/all/why-does-my-excel-window-lag-so-much-when-moved/04b1fb97-b9da-481e-b37a-63257460c5b7

https://answers.microsoft.com/en-us/windows/forum/windows_10-performance/windows-10-mouse-lag-sluggish-window-dragging-in/12ab88a5-9e13-4d37-8f2d-106d56fcd775

现在有几种备用方法:

  • 使用 Windows 10 1809,然后等待微软修复问题
  • 关闭“时显示窗口内容”
    在任务栏搜索选择“调整 Windows 外观性能和性能显示”,在“视觉选项卡关闭功能,显示时窗口内容”
  • 降低鼠标回报率一般游戏驱动面板都可以调整鼠标回报率

之后我还提供了一个透明版本,清除所有运行和桌面环境。

@EYHN我想我找到了解决方案。
在另一个电子应用程序 Terminus 中,他们提供了一个设置“背景类型”,以及“模糊”和“流利”两种类型,它调用了一个函数this.electron.ipcRenderer.send('window-set-vibrancy', enable, type) ,我发现“流利”工作滞后但“模糊”效果很好。 我不知道this.electron.ipcRenderer.send('window-set-vibrancy', enable, type)是如何工作的,但我认为这是 MS 在 DWM 中修复它之前的解决方案。

我安装了Aero Glass后在改对win10处理的代码让其调用dwm(即win7实现)部分运行在win10 1909拖动时窗口不会卡顿

我安装了Aero Glass后在改对win10处理的代码让其调用dwm(即win7实现)部分运行在win10 1909时时窗口不会卡顿

然而Aero Glass在win10 2004里不起作用

我安装了Aero Glass后在改对win10处理的代码让其调用dwm(即win7实现)部分运行在win10 1909时时窗口不会卡顿

然而Aero Glass在win10 2004里不起作用

从win10通用开发的调试包里取文件覆盖然后命令重建symbols也不行?

另一种方法是将 Windows 置于省电模式,这通常会禁用所有透明效果,但由于某种原因它修复了延迟🤷‍♂️

似乎 Win 10 2004 版本 KB4541738 修复了此项问题。

你能提供详细解决办法吗,windows1909 还是有拖动延迟

奇怪,我之前运行 unpacked 都是正常的无延迟拖动,但现在又有延迟了……

似乎 Win 10 2004 版本 KB4541738 修复了此项问题。

😂厉害

你能提供详细解决办法吗,windows1909 还是有拖动延迟

1909直接用Aero Glass不行么?ps:需要修改该扩展代码

既然拖动有bug,能否通过提供毛玻璃特效的透明背景图片代替解决

使用EasyWindowDrag移动窗口可以解决这个问题

对我来说,安装此扩展程序后无法拖动窗口。 窗户以慢动作移动。 这不是 CPU/GPU 资源问题。

这使得 VS 代码无法使用。 我必须卸载这个扩展才能再次使用 VS 代码。

@Spenhouet感谢您提醒我们这个错误是什么。 这是由于以这种不受支持的方式使用 Acrylic 效果而导致的 Windows 问题,并且实际上没有任何好的解决方案。

@Toby56我不确定这是否与 OP 描述的问题相同。 它看起来与他提供的 GIF 不同。

@Spenhouet是的,GIF 不是很清晰,但正如你所描述的那样! 这是一个鼠标轮询问题,一旦你开始拖动,窗口就会比它应该的慢,并且在它所在的位置和它应该在的位置之间积累了大量的延迟。 不幸的是,您对此无能为力:(

那么这仍然是最新的 Win10 版本的问题吗? 如果它本质上会为我破坏 VSCode,则不想安装它......

@iPyGuy基本上是的,不要指望它会很快得到修复。 这不是官方的 Windows 方法。

似乎 Win 10 2004 版本 KB4541738 修复了此项问题。

这个补丁没有合并到正式的2004里面也没有发布到半年频道里吧

@EYHN @Toby56
您是否认为这可以通过在移动窗口时禁用丙烯酸效果来“修复”,正如您(@Toby56)在此处描述的那样: https ://github.com/23phy/ewc/issues/22#issuecomment -599448590?

或者,您是否认为只有在 VSCode 处于活动/移动状态时,通过动态更改相关注册表项、焦点或移动事件,才能在性能设置中禁用“拖动时显示窗口内容”? 没有看到所有窗口的窗口内容非常糟糕,但如果这只影响 VSCode 我可以接受权衡😅

@jonaskuske
禁用丙烯酸对阻力的影响可能是最好的内部修复。 它可能很繁琐,但您可以将其切换为透明而不会出现任何模糊。 另一个使它变得更复杂的因素是,丙烯酸在节电模式下启用另一个模糊效果时会破裂,因为丙烯酸通常在该模式下被禁用? 我不记得了。 因此,您必须每次重置模糊,这会产生一个小的白色闪光。 据我所知,没有办法判断它是否处于节电模式,而且节电不会很常见。 身份证。

但它在大多数情况下都有效,并且比在运行中弄乱注册表要好得多。 当然,我认为这样做并不实际。

@Toby56

在省电模式下启用另一个模糊效果时,丙烯酸会破裂,因为丙烯酸通常在该模式下被禁用?

是的,Acrylic 通常在节能模式和窗口未聚焦时都被禁用。 因此,通常只有一个带有丙烯酸效果的窗口处于活动状态,而背景中的窗口显示不透明。

据我所知,没有办法判断它是否处于节电模式,而且节电不会很常见。 身份证。

对我来说,一旦电池电量达到 20%,它就会自动启用,所以我不会说这很罕见。 但你可以检测到它!
可以使用本机 Windows 运行时 API 的节点绑定

const { PowerManager } = require('@nodert-win10/windows.system.power')

let energySaverEnabled = PowerManager.energySaverStatus === 2

PowerManager.on('energySaverStatusChanged', () => {
  energySaverEnabled = PowerManager.energySaverStatus === 2
})

@jonaskuske
太好了,您知道一种使用 NodeJS 绑定到本机 Windows 函数来检测节电模式的方法! 这看起来是解决某些问题的超级简单方法。 通过这种方式,我们可以编写通常切换到“模糊背后”​​的代码,并在省电模式下切换到纯透明,消除不必要的白色闪光。

对于这个特定的问题,我不知道这个项目中的代码是如何构造的,如果他们想实现这样的东西,就不得不问@EYHN 。 也许我会发布它的 GIF 动图。

@Toby56
我刚刚意识到原生依赖可能不是 VSCode 扩展中的一个选项,所以虽然这个解决方案应该可以帮助每个想要将丙烯酸效果添加到他们自己的Electron 应用程序的人(这样他们就可以根据他们特定的 Electron/Node 版本编译它),我不知道这里是否有帮助:/

可能需要发布一个单独的预构建二进制文件而不是使用节点绑定,因为这个存储库已经在使用blur-cli.exe 🤔

@jonaskuske
确实如此! 没想到。 我不知道怎么做,但它可能会内置到编译成二进制文件的 C++ 部分??? 我真的不知道 VSCode 扩展的局限性。

对我自己的应用程序绝对有用😀!

对,这应该可行。 不幸的是,我对 C++ 也一无所知(除了编程 Arduinos 所需的一点点):/

无论如何,如果实现了这一点,它绝对应该是可选的,因为如果他们将鼠标采样率设置为 125 之类的东西,例如 144Hz 显示器的人可以在窗口移动期间有活力,这对于日常使用来说仍然足够快。

@quank123wip @EYHN
是的,我也找到了。
总站亚克力背景有两种选择:
image

Blur 没问题,Fluent 也有滞后问题。

所以我认为这就是答案。

不确定这是否有帮助,但 Window Terminal 具有有效的透明效果。 他们称之为“亚克力”。
终端不是建立在电子上的……它是用 C++ 实现的。

image

您还可以更改不透明度:

image

也许看看他们的实现会有所帮助:

https://github.com/microsoft/terminal/blob/master/src/cascadia/TerminalControl/TermControl.cpp#L376

@Spenhouet是的,抱歉,但这对我们帮助不大。 开源的 Windows 终端以及许多其他应用程序都使用这种效果(总是称为丙烯酸),但它们是专用的 Windows 应用程序,可以执行“官方”方式,可以开箱即用。 然而,我们正在做的是把一些东西放在它从未打算去的地方,这就是为什么它有无法修复的错误

@Jinhaihan是的,是的,我们可以让它像那样模糊,它没有问题! 也许我们应该。 但在我看来,它看起来不像“流利”的丙烯酸效果那么好。 我认为这是 Windows 7 (Aero) 中使用的旧效果,或者类似的东西。 模糊半径没有那么大,并且没有流畅的 Windows 10“丙烯酸”纹理,以及使丙烯酸模糊看起来不错的其他图层。

拥有像 Terminus 这样的选项是完全可能的,也许是许多人都会满意的解决方案。

@Toby56这可能是一个愚蠢的问题:走“官方”方式是不可能的吗?

@Spenhouet也许,如果您想从头开始重写 VS Code。 否则,可能不会。

我实际上并不了解如何使用 Node JS 和 C++ 将丙烯酸效果应用于铬窗。 但是 VS Code 是并且将永远是用 Electron 制作的,并且没有官方支持的方式来做到这一点。 我很惊讶这种方法完全有效。 因此,除非某个天才找到另一种方法,否则我们就会陷入困境。

@Toby56好的,有道理。

我猜未来 Windows 中会出现更多的亚克力效果。 VS code 可能会在这个遥远的将来采用它。

@Spenhouet
是的,目前 Acrylic 效果是 XAML 的一项功能,XAML 是只有现代 Windows 应用程序(您通常在 Microsoft Store 中看到的类型)才能使用的 UI 框架。 这就是为什么 Windows 终端和其他人没有问题的原因。 “老式”应用程序可以使用大多数现代 API,但不能使用那些依赖渲染、视图等的 API。
我也不知道这个 repo 中的 hack 是如何工作的,但这绝对是一个 hack 😃

然而,随着即将推出的 WinUI 3( Project Reunion的一部分,微软试图统一旧的和现代的 API),我们将获得一个名为“XAML Islands”的功能,它允许在传统应用程序中使用现代 UI。 然后应该可以在没有 hack 的情况下添加 Acrylic,甚至可以作为 Electron 本身的直接功能。 🙏🏻

@jonaskuske哇,太酷了,不知道微软正在计划这样的事情!!! 如果不打包配套的 Win32 应用程序,UWP 应用程序就无法使用托盘图标之类的东西。

我很高兴地报告 Windows 10 Insider Preview(内部版本 20161)为我解决了这个问题。

@LegoLivesMatter太棒了! 我应该转到快速内幕频道来验证这一点。

@Toby56祝你好运!

@jonaskuske @LegoLivesMatter @racoonx2p @EYHN

我可以确认它已在 build 20161 中修复!
嗯,大部分...

我说主要是因为,虽然它现在很棒并且完全可用,但它有点古怪。 调整大小对我来说仍然存在这个问题,这很烦人,但对任何人来说可能都不是问题,除非你发现自己调整了很多。 简短的快速调整大小很好。


我注意到的东西并不真正相关......
我注意到这并不真正相关,我不知道这是否是一个新问题,是丙烯酸效果的模糊和滤色元素有时会由于某些原因在我的双显示器设置上消失。 如果在显示器之间拖动窗口,使其同时在两个显示器上,效果只会在其中一个显示器上正确渲染,而在另一个显示器上它只是暗透明的纹理(看起来不太糟糕了)。 有时它会闪烁很多。 我无法在屏幕截图中捕获它。 它也可以在其他随机时间暂时中断这种方式。 没关系,因为它只在某些条件下发生,但这很奇怪。

男孩,它看起来不错吗:
image

我有双显示器,同样的问题。 此外,如果窗口靠近任何显示器的边缘,则该边缘的一小部分会变得半透明而不会模糊。 总比没有好!

我还注意到,当 VS Code 窗口在辅助监视器上最大化时,模糊消失了,但丙烯酸“过滤器”仍然存在。 据我所知,这是窗口稍微“到达”另一台显示器的结果。 当 VS Code 窗口没有聚焦或在主监视器上最大化时,不会发生这种情况。

@LegoLivesMatter是的,我也有这个问题,忘了提。 太愚蠢了,但是窗户经常伸到下一个显示器,这显然是原因。 交叉我们的手指,也许它会得到修复。 希望效果打破和窗口交叉!

出于某种原因,使用带有 Stardock WindowBlinds 的主题实际上也解决了这个问题。 它一定是在用窗口管理器合成做一些事情,但不知道是什么。 最大化窗口时会快速闪烁,但除此之外很好。

我安装了windows-insider dev-channel,拖动没问题。 但是,调整大小仍然存在问题。 我也注意到我的 64 位 winforms-app 使用这种方法有这个问题,但不是 32 位版本。 另外,我在使用SetWindowCompositionAttribute时有一个 32 位和 64 位的 WPF 测试应用程序,它可以调整大小。 此外,Avalonia 可以调整大小。

感谢您的回复,但我说我在 Insider-dev 频道上拖动(即移动窗口)没有问题,但在 64 位应用程序上调整大小时遇到​​了问题。

这似乎已在我现在使用的 Windows 版本上得到修复。
突然发现这个,不知道是不是这个版本。
image

@doublethinkio我在 Windows 10 build 19042.541 上仍然有问题?

20H2 在这里构建 19042.572 并且它仍然会发生,所以我认为@doublethinkio专门进行的一些事情使它正常工作。 对我来说,拖动很有效并且很流畅,只是非常非常慢。 这与一些既慢又不流畅的人不同。

@Jinhaihan提到 Blur 在 Terminus 中为他们工作,而 Fluent 在此评论中也有同样的问题。 我确实喜欢 5 分钟的研究,似乎“模糊”映射到选项 3,在这个项目的blur-cli中称为ACCENT_ENABLE_BLURBEHIND ,而“流利”映射到选项 4,称为ACCENT_ENABLE_ACRYLICblur-cli 。 这是不可配置的,而是始终选择ACCENT_ENABLE_ACRYLIC (在 API 中实际上称为ACCENT_ENABLE_ACRYLICBLURBEHIND )。

使这种可配置性非常简单,但是我没有设置 Visual C++ 工具链来构建新的 blur-cli。

怎么删除毛玻璃效果,我卸载插件,删除配置。 还是没用

@doublethinkio ,感谢您提供解决方法。 我尝试使用autohotkey.exe执行EasyWindowDrag.ahk 。 不幸的是,我收到以下错误。 我在执行其他 AutoHotkey 脚本时没有任何问题。

Screenshot

即使我使用直接从以下位置下载的原始脚本:
https://lexikos.github.io/v2/docs/scripts/EasyWindowDrag.ahk

使用 EasyWindowDrag(KDE style).ahk 可以缓解这个问题

https://www.autohotkey.com/
https://lexikos.github.io/v2/docs/scripts/

; Easy Window Dragging -- KDE style (based on the v1 script by Jonny) 
; https://www.autohotkey.com
; This script makes it much easier to move or resize a window: 1) Hold down
; the ALT key and LEFT-click anywhere inside a window to drag it to a new
; location; 2) Hold down ALT and RIGHT-click-drag anywhere inside a window
; to easily resize it; 3) Press ALT twice, but before releasing it the second

不确定这是否有帮助,但这是一个看起来可能有助于解决问题的项目。
Seo-Rii/电子压克力窗

我发现将 Terminus ( eugeny/terminus 1.0.127) 的背景设置为 Fluent,它会在拖动窗口时将背景设置为不透明。 停止或暂时停留后,窗口恢复流畅的背景。 滞后不会出现。

也许这对项目来说是一个很好的解决方法。

最新版本(v1.0.10)包含鼠标延迟的解决方案,详情请看这里

编辑:我刚刚尝试了修复。 它肯定更快,即使在 60hz 上! 谢谢!!!

此页面是否有帮助?
0 / 5 - 0 等级