V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  geelaw  ›  全部回复第 4 页 / 共 189 页
回复总数  3765
1  2  3  4  5  6  7  8  9  10 ... 189  
2025 年 9 月 19 日
回复了 lnbiuc 创建的主题 问与答 求一个 windows 虚拟桌面切换的方案
回到楼主的问题,看了一下 @minami #2 似乎有现成的软件,但如果要自己动手的话,解决方案分两步。

1. 用组合键映射软件把 Windows+Shift+Tab 映射为 Windows+Tab
2. 用组合键映射软件把 Windows+Tab 映射为一个几乎不可能用到的组合键 X
3. 对组合键 X 作出反应

这里难点在于如何循环切换虚拟桌面,Windows 没有自带这个功能。思路是利用 IVirtualDesktopManager 接口,它允许做三件事:

- 获取已知窗口所在的虚拟桌面 ID
- 检查已知窗口是否在当前虚拟桌面
- 把已知窗口挪动到已知 ID 的虚拟桌面上

于是要实现循环切换虚拟桌面,可以这样:

1. 建立一个牺牲的窗口 A 并显示,这会导致这个窗口位于当前虚拟桌面上
2. 获取 A 所在的虚拟桌面 ID ,这当然就是当前的
3. 发送 Ctrl+Windows+Right
4. 检查 A 是否在当前的虚拟桌面上,如果不在,说明步骤 3 成功右移了一个桌面,删去 A 并结束
5. 如果 A 在当前的虚拟桌面上,说明一开始位于最后一个虚拟桌面,因此需要反复发送 Ctrl+Windows+Left

如何判断 Ctrl+Windows+Left 已经发送了足够多次?方法同上面判断是否“按尽了 Ctrl+Windows+Right”,反复建立和删除牺牲的窗口。

上面的方法仅使用 Windows 文档中允许的方法,因此理论上在未来的 Windows 上都是有效的。
2025 年 9 月 19 日
回复了 lnbiuc 创建的主题 问与答 求一个 windows 虚拟桌面切换的方案
@coolloves #1 Sysinternals 里面的 desktops64 和 Windows 10 引入的虚拟桌面完全不同,前者用的是 Win32 Desktop 对象,是“真实”桌面,后者不过是 dwm 选择显示或者不显示一些窗口罢了。

Win32 Desktop 对象在日常中接触最多的是“安全桌面”,比如按下 Ctrl+Alt+Del 后看到的界面(这个界面叫做“Windows 安全”对话框),以及登录注销时的界面,以及 UAC 在最高级别时的提权对话框所在的界面,这些界面和日常使用应用程序的 Desktop 对象是隔离的。我最近在 Windows 11 上使用 desktops64 建立更多 Desktop 对象时发现现在的 explorer 和 UWP 都不支持多 Desktop 对象了(具体表现是额外的 Desktop 里壁纸不显示,并且打开“开始”菜单和 UWP 时要么失败,要么被切回第一个 Desktop 对象)。
2025 年 9 月 18 日
回复了 hez2010 创建的主题 C# .NET 换新的异步编程模型了,性能很强
省流版技术总结:在 IL 层面引入异步的概念,于是编译器不用把代码切成很多块儿(这会导致 JIT 很难掌握不变式,于是难以优化),于是 JIT 和运行时可以看到更多信息,从而优化异步性能。

向楼主提问:这套 ABI 是否有“反哺” iterator block 的可能/打算?
2025 年 9 月 17 日
回复了 ksc010 创建的主题 C++ 看到一些 C++ 或者 C#项目 驼峰和下划线一块用,为啥泥?
@w568w #15 iTotalCount 是错误的匈牙利命名法,匈牙利命名法里的“类型”信息不是存储类型而是含义类型,比如 cbStruct 和 cchOutput 才是正确的,uStruct 和 uOutput 则是错误的。

cb = Count of Bytes
cch = Count of CHars
u = Unsigned
2025 年 9 月 17 日
回复了 ksc010 创建的主题 C++ 看到一些 C++ 或者 C#项目 驼峰和下划线一块用,为啥泥?
FooFoo_BarBar 这种在 C# 最常见的是自动生成的事件处理器的方法名,比如 Form_Resized 通常是 this 作为 Form 类上的 Resized 事件,又比如 btnOk_Click 是 this.btnOk 对象的 Click 事件。在 C# 第二常见的是 COM 接口重名方法自动映射的消歧义名字,比如 IFace1 有 HRESULT Method(ULONG *result) 而 IFace2 有 HRESULT Method(SHORT *result),那么同时实现 IFace1 和 IFace2 的 COM 对象就会具有 uint IFace1_Method() 和 short IFace2_Method()。这种 COM 改名方法对于用 C 语言访问 COM 也适用。

可以认为 _ 起到一个 :: (C++) 或者 . (C#) 的作用。
两个建议:

1. 用户可以在“设置”里面选择关闭动画(“晕动画”或者单纯就是不想看),或者在至少 Windows 7 的时候就可以在控制面板 > 轻松访问 > 使计算机更易于使用 > 关闭不必要的动画 中设置。这个选项可以用 SystemParametersInfoW (Win32, Windows Vista) 或者 Windows.UI.ViewManagement.UISettings.AnimationsEnabled (WinRT, Windows 8) 检测。
2. 那个东西叫做“通知区域”( notification area )。
2025 年 9 月 8 日
回复了 dream2716098767 创建的主题 问与答 Win11 下 Telegram Desktop 无法启动
我的建议是检查网络问题,是不是有超长延时所以 Telegram 其实在等超时?如果你把网络禁用,Telegram 是否可以瞬间打开并告诉你没有网络?

更高层的建议是用原版的 Windows 而非“精简版”。

24H2 和 LTSC 的关系是,有很多 LTSC ,每个 LTSC 可以对应不同的常规版本,目前 Windows 11 只有两个 LTSC ( IoT Ent 和 Ent ),都是基于 24H2 的。
2025 年 9 月 8 日
回复了 cpalead 创建的主题 分享发现 电脑上的微信是不是监控你的操作?
@TimG #9 我的评论单纯是技术可行性,安装虚拟机当然是合适的。除非你用一些技巧,否则百度云管家安装的时候就获得过管理员权限,因此创造透明窗口并记录并接棒所有输入是技术可行的;当然,存在着安装百度云管家但从不授予管理员权限的情况,因此理性作者不会把百度云管家弄成通过透明窗口记录所有事件的样子。

> 没有使用管理员模式,是否可能通过其他手段做到类似的功能,或者直接挑明说,这里认为是使用漏洞的操作都是无法判断的

这种漏洞价值太高,在普通用户的程序中利用是非理性决策。未经管理员权限越过 UIPI 是 Windows bug ,目前不知道这种 bug 的存在,所以答案是“不能”。

另外“以上没有表示百度云网盘是恶意软件”是免责我前面描述的用管理员权限的可能场景(而且我个人认为百度云管家并不会让 Windows 不是 Windows ,即“搞这么复杂的事情”),不是你说的“会出来一个全屏广告”。

另外软件打开一个全屏窗口是再稀松平常不过的一件事了,比如很多游戏都是。如果你想说“用户没有点击任何按钮就打开了全屏窗口”,那么答案是桌面 app 的模型里用户是否触发操作和程序能做的事情无关,系统不会监视或知道这件事。
2025 年 9 月 8 日
回复了 cpalead 创建的主题 分享发现 电脑上的微信是不是监控你的操作?
Hmmm 首先我自己运行微信,静息状态下并没有疯狂使用网络。所以我觉得大概是楼主的微信在同步数据(包括下载聊天记录、自动下载附件、自动下载表情包、更新朋友圈,等等)。

@TimG #3 如果你安装恶意软件的时候授予了管理员权限,那么之后操作系就就已经不是原来的操作系统了,此时任何安全性都无意义,因为理论上来说恶意软件可以完全劫持操作系统的 API 并返回伪造数据。

以上没有表示百度云网盘是恶意软件。此外,我觉得百度云网盘应该不会搞这么复杂的事情。

如果你安装、使用时没有授予管理员权限,那么在 Windows 上可以确定两件事:

1. 任何提权进程都受到 UIPI 的保护,因此低权限进程的透明窗口无法把输入传递到高权限窗口,而且高权限窗口会具有失焦样式。
2. 按 Ctrl+Alt+Delete 后,可以确保交互的操作由 Windows 直接处理。

我认为百度云网盘应该受到 1 的限制,所以做透明窗口记录所有事情应该不可行。
2025 年 9 月 4 日
回复了 supuwoerc 创建的主题 JavaScript 这段前端代码存在并发读取竞态的问题吗?
@chairuosen #2 每个 tab 里都有自己的 isRefreshing 。

@crazzy #3 在 if (!isRefreshing) 和 isRefreshing = true 之间不可能有任何 JavaScript 代码执行。

@IWSR #4 这个好像是楼主代码的意思。

@supuwoerc #9

楼主可以多考虑一下读者,尝试简化代码,使之不需要借助外部语境就很容易理解,比如我们不知道 user.useLoginStore.getState() 的状态是否是 session/local 级别的,还是 tab 级别的。如果 user.useLoginStore.getState() 是 session/local 的状态,那么不同的 tab 有自己的 isRefreshing ,当然两个 tab 可以同时看到过期的 token 并分别决定刷新。

@irisdev #8 放在 local/session 都不好,因为用户可以在 tab 1 刷新的时候关闭之,但 tab 1 通过共享的 isRefreshing 锁定了刷新的权力,这会导致 local/session 清空之前不再有任何 tab 会进入刷新的逻辑。
2025 年 9 月 4 日
回复了 supuwoerc 创建的主题 JavaScript 这段前端代码存在并发读取竞态的问题吗?
不存在针对 isRefreshing 的竞态条件,原因很简单:JavaScript 没有多线程,而只有 JavaScript 代码会读写 isRefreshing 。

和 worker 也没有任何关系,因为 worker thread 之间不共享对象,要共享数据必须 postMessage 。
2025 年 9 月 2 日
回复了 zficode 创建的主题 Windows 2025 年, Windows 的开发体验已经赶上 Mac 了
@w568w #3

1. Windows 从上古时期就支持 / \ 了,可以两者混用,命令解析方面只要不混淆即可,解析歧义这点和 Unix 差不多(对比:~, -a, * 的含义)。
2. 需要 & 'path to' 的情况是路径里面有空格(不加 ' 会导致和 path 加参数 to.exe 混淆,加 ' 不加 & 导致和表达式语句混淆),和是否是绝对路径没有关系。
https://www.reddit.com/r/MacOSBeta/comments/1lq8cfu/in_menu_bar_allow_on_menu_bar_i_have_lots_of/

传统搜索引擎的答案 ^ 关键字 macos delete app from allow in menu bar
@Sokranotes #28 首先,你可能没有明确表述问题是什么。

原帖的内容可以推断,你用的是安装了各种应用软件的 Windows 11 并且每次重启都会被提示文件关联重置,你的问题大概是“这种情况(安装了一堆解题者不知道的软件)下如何让关联不再被重置”。

这个问题的答案我已经在 #9 说过了,或许不明显,那么我可以说得更明白一些:有一个软件尝试修改你的文件关联,因此 Windows 会重置之,解决方法是删除这个捣乱的软件。

#26 提到的

>我为了这个问题重装了一次系统,把所有软件重新装了一次,实实在在的做了很多尝试,而不是像你一样空谈“正确方法”。

我不确定你的操作方式,但我可以告诉你的是,安装 en-us_windows_11_consumer_editions_version_24h2_updated_aug_2025_x64_dvd_9236d79b.iso (这个文件的 SHA-256 是 12ee1e95dd2173af0fc9b90449e4cc34287289669ed90a1c4c99c015739636ee )里面的 Windows 11 之后安装 google dot com slash chrome 下载的 Chrome (假设这些操作是 2025 年 8 月完成的),那么用自然的方式设置文件关联后不会被重设。(排除电脑被宇宙射线巧妙轰击的情况。)

所以问题根源依然是你(重新)安装的其他软件之一。

没有更多信息之前,我认为问题没有发生变化,即“在安装了一些未知的软件之后反复被重设文件关联,要怎么防止被重设”。而且因为从干净的系统安装 Chrome 并不会导致你说的问题,所以我建议的方法依然是更优的。

————

如果你同意问题如上,而不是“在我不给大家透露更多有效信息以细化问题后,如何解决细化的问题”,那么你发现用 SetUserFTA 后在你的环境下不再产生该问题,并不能推出你的方法“解决了问题”,因为可以构造如下场景,使得你的问题依然存在:

设置一个程序自启动,并且在随机的延时后篡改文件关联。

此时,如果 SetUserFTA 先完成设置,那么你的问题依然会出现,并且问题是否发生是取决于时延的、随机的。如果你使用 SetUserFTA 后一直没有观测到问题,且取消后又能观测到问题,那么比较合理的推断是:你的 SetUserFTA 程序恰好在文件关联被篡改后、Explorer 检查文件关联完整性之前完成,这样文件关联会是你用 SetUserFTA 设置的版本,并且 Explorer 查看的时候不会发现它曾经损坏过,因此不会重设。我觉得“SetUserFTA 能恰好在这两个时间节点之间完成工作”,并不是很好的假设,因为 Windows 自启动程序的速度、顺序(会影响 SetUserFTA 生效的时间)并不是一成不变的。

————

如果你不同意问题如上,而是认为问题就是你特定装机之后如何避免,那么你可以声称你解决了问题,但是其他人无法验证。

此外,知道哪个程序篡改关联很重要,是因为:

1. 文件关联的 hash 校验是 Windows 8 之后才引入的
2. 任何按照 Windows 7 及之前的方式注册、修改文件关联(包括修改默认关联)的程序,都不会导致这一行为

由此推断,任何导致文件关联被篡改从而重设的程序,必然是刻意绕过 Windows 8 之后设计的“只有用户主动修改才算数”的机制,属于恶意修改。

————

>你读博做研究也会这样吗,问题都没有搞清楚的情况下,就发表自己的看法。

你为什么会觉得研究和 Windows 用法是类似的问题?简单的答案是:Windows 文件关联的机制是有官方文档的,因此所有这类问题的答案都是既定的,我的观点是只要问题本身可以在文档的范围内解决,都应该按照文档记载的方式来;我做研究是自己定义问题或者解决已经定义好但是不知道怎么解的问题,不存在你说的“搞不清楚”的情况。

————

当然,没有必要非要用最好的方法,凑合凑合也挺好的。
@Sokranotes #26 Good 和 better 的区别,睡觉喜欢踢被子并不能用强行把腿绑在床上,并且绳子快断的时候重新绑上(每次登录都重设文件关联)解决。

>你觉得一个会尝试注册表修改的人会不知道尝试默认修改吗?

很多人会不知不觉把简单问题复杂化。

>实实在在的做了很多尝试,而不是像你一样空谈“正确方法”。

努力和效果没有必然联系,看起来 #9 的信息比尝试更有效。
@Sokranotes #24, appendix 3

感到十分困惑,为什么不能简单地用 Settings | Apps | Default apps 选择需要的关联,而要每次重启都重设一次?有人修改过你的注册表的权限导致正常方式设置不能正确存储?如果是后一种情况,推荐的做法是删除 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 和 HKCU\Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts 里面所有的内容(但这两个键本身不删除),然后登出再登入,这样 Windows 会认为一切文件关联都是新鲜的,且会建立正确的权限(除非 FileExts 和 ApplicationAssociationToasts 两个键本身已经损坏)。

使用 SetUserFTA 本质上是一种 hack ,任何 Windows 的更新都可能导致 SetUserFTA 使用的 hash 函数和 Windows 的不同,于是一大坨文件关联会被重设。即使要用自动化的方式设置,受支持的方法也是使用组策略。

对社区有益的做法是:回到使用 SetUserFTA 之前的状态,根据 https://techcommunity.microsoft.com/blog/askperf/how-to-configure-file-associations-for-it-pros/1313151 的指导,用 Windows 事件查看器里的 Microsoft-Windows-Shell-Core/AppDefaults 查看文件关联重设的原因,并使用 procmon64.exe 查看哪个程序在篡改文件关联,然后在此贴警告大家不要用那个软件。
当且仅当两个显示器单个像素边长之比等于两个显示器的 DPI 缩放之比时,两者的绝对大小才可能一样。

另外,一个窗口只能处于一个 DPI 上,通常来说窗口主要位于哪个显示器,它就会按照哪个显示器缩放,因此跨显示器放置窗口不会有好效果(除非两个显示器 DPI 一样)。当然,如果软件实现错误,那么挪动到不同的显示器上自然也不会有好效果。
2025 年 8 月 23 日
回复了 faoisdjioga 创建的主题 macOS 苹果系统复制内容会失败嘛?
如果假设程序写得很好,那么最简单的解释是竞态条件。macOS 的 NSPasteboard 系列 API 表示剪贴板所有权改变时设置数据不会成功,说明 macOS 有所有权概念,但是我没找到具体说明所有权如何变更,这点于是可以参考 Windows 的逻辑,猜测清空剪贴板的程序获得所有权(因为 macOS 文档也表明清空剪贴板是设置数据的第一步)。

于是,当你按下 Cmd+C 后,程序 A 清空剪贴板并放置数据,但是 A 清空之后、放置数据成功之前,另一个程序 B 或许尝试清空剪贴板,于是 B 成为了所有者,这导致 A 无法放置数据。

现实世界的程序可能写得不好,但如果假设程序写得不烂,那么可以想象剪切的逻辑是把内容放入剪贴板,并且成功后才删除原来的内容。所以如果担心复制没有成功,可以选择、剪切、原地粘贴,然后再到目标位置粘贴。当然连按很多次 Cmd+C 也是可以的。
2025 年 8 月 22 日
回复了 callmesmc 创建的主题 问与答 求可靠的邮件客户端,快要被 Outlook 气死了
我的印象是 Ctrl+N 的时候在哪个邮箱里面,它默认的发件地址就是哪个邮箱。

Outlook 已知和 Gmail 不合,但我认为是 Gmail 的模型和 IMAP 不合的问题:有的时候在 Outlook 里 Shift+Delete 删除 Gmail 邮件,会让 Gmail 认为是删去邮件的所有标签( Gmail 把标签映射为 IMAP 文件夹,除了 Deleted 是特别处理的之外),从而变成存档状态,而非永久删除。
2025 年 8 月 17 日
回复了 sxszzhrrt 创建的主题 问与答 Windows server 服务器核心板怎么安装经典款 ui
不能,而且 msstyles 存在与否和是否安装桌面体验无关,毕竟 cmd/PowerShell 本身也需要显示在窗口里,和新版里面应该用的是 AeroLite (如果装了桌面体验应该也有 Aero ,大概就是楼主所谓的 Windows 10 UI )。

我已经很久没用过 Windows Server 了,如果默认主题不是 AeroLite 并且楼主想用这样一款,简单的做法是使用高对比度主题。

Windows 8 开始已经不支持经典( Windows 7 )主题引擎了,所有的 msstyles (Windows XP) 以来都无法跨大版本使用,并且所有的 explorer 也都不能。
1  2  3  4  5  6  7  8  9  10 ... 189  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2215 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 53ms · UTC 02:59 · PVG 10:59 · LAX 18:59 · JFK 21:59
♥ Do have faith in what you're doing.