V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  geelaw  ›  全部回复第 1 页 / 共 190 页
回复总数  3785
1  2  3  4  5  6  7  8  9  10 ... 190  
❮ ❯
随便看了一眼,只能说非常业余而且模型可能选得也是一团糊。就拿 native_preview 里一些 COM 、WinRT 、快捷方式的处理来说吧:

GUI 线程的 COM 、WinRT 必须选择单线程套间,尤其是 CLSID_ShellLink 等 shell 相关的对象,它们仅支持 STA 。仓库代码使用的是 MTA ,这会有两种可能的结果,一是初始化为 MTA 的时候失败(因为线程已经处于 STA )并被静默忽略,二是初始化为 MTA 成功,然后建立 ShellLink 对象的时候自动建立新 STA 线程并封送之后每一个 COM 调用。

结果:比 Explorer 慢。

然后就是检查文件是否是快捷方式的代码,是查看扩展名是否为 lnk ,这当然是完全错误的,正确做法是使用文件关联查询 API 。
Ctrl+Shift+V 是 cooked input 粘贴,特点是程序在输入完一行后才会看到这一行的输入,程序看到了 n 次输入,每次一行,程序决定每行结束后做什么。例子:

PowerShell 里面 Ctrl+Shift+V 粘贴

write-host 1;
write-host 2;<# 此处没有换行 #>

会导致 PowerShell 执行第一行并停在第二行末尾。而 C+S+V 粘贴

&{write-host 1;
write-host 2;}<# 此处没有换行 #>

会导致停在第二行末尾。而粘贴

&{write-host 1;
write-host 2;}
write-host 3;<# 此处没有换行 #>

会导致 1 、2 运行,停在第三行末尾——即使第一行是一次性输入的,PowerShell 也不会执行,因为累积的输入不构成语句。

————

要诊断楼主的问题,可以从观察以下几点入手:文本是用 CR 还是 LF 还是 CR LF 换行?程序采用 raw input 的时候粘贴(通常这类程序会识别 Ctrl+V ),是什么效果?硬回车的位置是否有其他特征,例如字数、累积内容的语义? A 篇手敲进去的时候,是否在 1 、2 行末尾程序会继续等待输入,并在第 3 行末尾开始处理?
@geelaw #10 “滚动纹理” => “滚轮纹理”,滚轮的纹理见此图:

https://www.reddit.com/r/MouseReview/comments/qg80b9/looking_for_a_lightweight_mouse_with_leftright/
我认为正确的方向:

1. 触控拖动内容的时候,手向方向 n 移动导致 -n 方向的内容进入视野。(“拽纸”模型)
2. 触控拖动滚动条、滚动条指示器的时候,手的移动导致滚动位置的移动,向 n 方向移动导致 n 方向的内容进入视野。(“拽指示器”模型)
3. 万向滚轮,滚轮的移动方向是滚动条、滚动条指示器的移动方向。(“转动眼球”模型)
4. 滑动滚轮,滚轮向远离人的方向旋转,则滚动条向 **阅读开始的方向** 移动。(在上下滚动的内容里,同于“拽指示器”模型)

请注意第 4 条的含义:

- 对于纵向滚动内容,向远离自己的方向旋转滚轮时,更上方的内容进入视野;
- 对于横向滚动的内容,远离自己的方向可以代表左或者右,取决于内容是 LTR 还是 RTL 。

目前已知的是 Windows 在 LTR 模式下符合这四条规则,我没有测试过 RTL 。另外 iOS 的触控符合前两条。

至于为什么第 4 个是正确的,实际上你可以发现传统 UI 里面“滚动条指示器”的样式是矩形 + 中间有条纹装饰,见

https://www.reddit.com/r/coolguides/comments/joszyg/evolution_of_a_scroll_bar/

例如 System 7, Mac OS 8, Windows XP/Vista (在 NeXTSTEP 里面则是中间有个点),这里面的“条纹装饰”实际上是滚动纹理的拟物表现,说明滚动条指示器指示的是滚轮的位置。如果把滚轮想象成“平铺”的状态,那么向远离自己的方向滚动,会导致手挪动到更前面,因此应当对应指示器靠上的位置。
7 天前
回复了 gokoulee 创建的主题 › 问与答 › onIine.com 域名, 适合拿来做什么?
能把 L 的小写误打成 i 的大写我只见过两个地方……

一是百度贴吧数学吧里有些帖子把 ln (自然对数) 写成 In ,这是至少 10 年前看见过的。

二是有人把 lgbt 打成 Igbt ,这是今天在 Twitter 上看见的。
你看到的第二个工具叫做“资源监视器”,“资源管理器”是指 explorer.exe 的窗口 UI 。

资源监视器:
正在使用 = 工作集(进程经常访问的内存,存在于实体内存中,“完全”占用)
已修改 = 脏冷页面(距离上次进程访问已经很久,但自从上次写入页面文件后修改过,因此必须先重新写入才能挪作他用,算“半占用半不占用”实体内存)

任务管理器:
使用中 = 工作集 + 脏冷页面

至于为什么要这么设计,这得问微软,但我的想法是任务管理器是初级工具,资源监视器是高级工具,因此前者没有那么细分。
对 .lnk 的解析错误,其图标和指向的文件没有任何关系,正确的做法是 IShellLink(A/W)::GetIconLocation 。此外 .lnk 当然不一定指向文件,比如上传“控制面板”的快捷方式会提示无法解析绝对路径。有趣的是,即使上传的是“命令提示符”的快捷方式,也会出现无法解析,怀疑可能是不支持环境变量展开。
@Need4more #9 任何以 Win32 为受支持目标的应该都可以,试了一下 mingw-w64 gcc 15.2.0 (Compiler Explorer / Godbolt) 的 SDK 比较旧,把 EVENT_OBJECT_UNCLOAKED 替换为 0x8018 之后是可以的编译成功的。
@loading #6 “不是直角”的原因单纯是 AI 写出来的是乱七八糟的:

- EVENT_OBJECT_SHOW 是 0x8002 ,而 0x8003 是 _HIDE
- EVENT_OBJECT_UNCLOAKED 是 0x8018
- DWMWCP_DONOTROUND 是 1 ,而 3 是 DWMWCP_ROUNDSMALL
- DWMWCP_ROUNDDEFAULT 不存在,正确的名字是 DWMWCP_DEFAULT ,这个数是 0
- 处理所有当前窗口的回调里面过滤莫名其妙,尤其是取消设置的时候,无论窗口是否最小化都应该重设
- if not hooks 语义错误,因为 hooks 是列表,只要安装了一个就会认为成功
- 取消设置的逻辑错误,一般地,没有办法取消,因为每个进程自己也可能调用 DSWA 来控制自己的窗口要怎么圆角
@loading #1 是不会注入其他进程的钩子,而且只监听很少的事件、反应很快,测试没有发现性能问题。

@chutsetien #2 我知道那个方案的存在,但是那个方案需要管理员权限且会修改系统文件,这很可能导致自动更新挂掉,然后你会发现 DWM 起不来可能导致超时后蓝屏等等一系列问题……
8 月 8 日
回复了 hez2010 创建的主题 › C# › .NET 11 的 async 性能改进过于逆天
很强,但是看了截图的表格数据之后:是快了 18.6 、11 、6 、2.2 、6.4 倍,或者速度变成原来的……倍,这些数还没大到 -1 可以忽略,表头的 speedup 也是误导性的陈述。
管理程序的跳转列表是每个程序自己的责任,因此最简单的假设是它们没有为自己添加这项功能。

如果你想要自己诊断,可以写一段使用 ICustomDestinationList 的代码,参考 https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-icustomdestinationlist 如果你不想自己诊断,简单的方法是请 Cent Browser 或 360 安全浏览器的客服解答,毕竟这两个软件都非开源。(当然,我觉得他们最简单的回答是请你重装 Windows 并从干净的状态安装这些软件。)
@lujiaosama #1 有 Git 也不安全,显然 AI agent 可以选择删除 .git 目录。

这本来只是我自己的担心,所以搜索了一下,确实有这种(愚蠢的)案例 https://news.ycombinator.com/item?id=48509874
有没有可能,普通的电脑有一个不但能显示歌词,还能显示任意程序的任意 UI 的灵动岛,而且它还不需要必须灵动?
@xue777hua #2 如果一个人在分析被瞎改过变量名的代码,显然会自动克制望文生义的冲动。
取决于如何定义“理解”“意图”。这种操作没有密码学意义下的混淆能力。

应该注意的是在“标识符替换为 a b c 等”之后,“把标识符替换成带有语义的词”是无意义的操作,因为后者可以轻松撤销。
那为什么就非要是英语呢?我查了一下旧的账单,法国商户的名称是法语的。

>商户名称其实银行那边能看到,明明白白写着大使馆和航司
>如果这样的商户都被视作风险,路边小超市小餐馆还能刷吗,岂不是刷一次封一次

银行担心的不是大使馆和航司乱收钱,而是担心有人用你的卡/卡信息在这些商户消费。

应该批评的点是:(1) 已经告诉银行要出游,风控依然不允许; (2) 没有或者没有提供强行覆盖风控算法的渠道。

>既然如此,又何必排斥在地域上更高一层的国际语言呢

推荐的做法是发扬汉语。
可能是因为收礼人栓 q 、送礼人也“真的栓 q”吧( bushi
2 月 11 日
回复了 shanghai1943 创建的主题 › 问与答 › 如何让五年级学生更好的理解这道题
@coderluan #3 是“算术方法”,算术方法当然是数学的一部分,虽然它已经被方程碾压了。至于

>不适合小孩子考试。

是非常令人惊讶的结论。有些考试题目会要求必须用算术方法求解(考察算术方法思维的掌握)。

————

回到楼主的提问,这个问题的本质是六年级数学中的语文,关键词是“单位一”。

> A 比 B 多/少 C 。

其中 A 和 B 是两个有量纲、同量纲的量,且 C 是一个无量纲数( C 通常表达为 几倍、几分之几、百分之几 等),这句话的意思是

> A 比 B 多/少 B 的 C 。

理解这一点便再无疑问。
2 月 7 日
回复了 clow 创建的主题 › Windows › rmx:给 Windows 换一个能用的删除
> 文件占用这块更直接:加一个 --kill-processes 参数,rmx 通过 Windows Restart Manager API 自动识别锁住文件的进程,干掉它,再删。

看了一眼实现,好疯狂。你已经知道 Restart Manager 了,为什么还要暴力结束禁止,而不是用 RM API 要求程序停止并重启呢?

> 它绕过了 Windows 的高层文件 API ,直接调用底层的 CreateFileW + SetFileInformationByHandle

这就是高层 API 吧,除非你想说 WinRT 或者 shell 对象操作。

> 日常使用方式完全不变——还是右键、点删除

大多数人用的是 Delete 和 Shift+Delete ,而且这个程序的删除和用户通常的删除意思很不同(后者是移动到回收站)。

另外看了一眼 shell extension 的注册代码,也相当暴力。楼主是否知道 shell extension 可以被任意具有“打开”文件对话框的程序加载?是否知道用户的 shell 不一定是 explorer.exe ?强行关闭其他进程的句柄相当于让整个 session (非管理员) / boot (管理员) 都出于非一致状态,惟一恢复的方法是重启系统。

而且这整个注册过程也是 over-complication ,你注册了 IContextMenu ,但是没有使用任何 IContextMenu 的高级特性,而且你的 shell extension 只能在相合的 bitness 进程里加载。推荐的做法是注册 IDropTarget ,并且用 exe 实现 IDropTarget ,这样的优势:

- IDropTarget 的实现比 IContextMenu 简单很多
- 任何 bitness 的进程都可以访问你的 IDropTarget
- 取消注册的时候,可以直接 kill 你的 IDropTarget 进程,进程隔离确保任何不受你控制的进程不会被破坏
1  2  3  4  5  6  7  8  9  10 ... 190  
❮ ❯
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5557 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 49ms · UTC 01:34 · PVG 09:34 · LAX 18:34 · JFK 21:34
♥ Do have faith in what you're doing.