为什么你总是会在微信里发错消息

最近,江苏常州的一个镇党委书记被免职。事件的起因是这位龚书记将私密消息错误发送到了微信工作群里。

龚书记

这已经不是第一起因为用户将私密消息错发到微信群里而酿成的惨案了。而此类惨案之所以层出不穷,完全是因为微信产品设计上的「坏」和「蠢」。

首先,在 iOS 平台上,点击微信的通知消息,在打开微信 APP 后,并不会进入通知消息所在的会话上下文,而是停留在之前的会话或会话列表。这并非操作系统的限制,而是微信产品故意为之,亦或者是它们根本不在乎。

……

Zone.Identifier 文件和 NTFS 数据流

使用 Windows 资源管理器,将 Windows 中的文件复制到 WSL 文件系统中时发现,目标路径下会多出一个 Zone.Identifier 后缀的文件:

foo.txt
foo.txt:Zone.Identifier

……

轻量级 IDE:Lite XL

Lite XL 是一款使用 C 和 Lua 开发的开源文本编辑器。它的官网简介为:

A simple, fast, feature-filled and extremely extensible text editor written in C and Lua, adapted from lite.

它的 Windows 安装包大小仅为 2MB。在不加载插件的情况下,启动后占用内存只有 20MB 多。和 VSCode 动则几百 MB 的内存使用量相比,的确算得上轻量。虽然官方的自我定位是一款文本编辑器,不过在安装插件后可以作为一个简单的 IDE 使用。其生态位和 Sublime 类似,可以作为主力 IDE 的备胎。

本文仅介绍 Lite XL 在 Windows 平台上的安装和使用。

……

如何判断一个窗口句柄是否为桌面顶层窗口

在微软官方文档中,并没有提供一个 API 用于判断一个窗口句柄是否为桌面的顶层窗口。通过类似 NULL == GetParent(hwnd) 或者 hwnd == GetAncestor(hWnd,GA_ROOT) 等简单代码都无法做出正确判断。经过测试,找到两种靠谱的解决方案。

……

Free Pascal 平台无关的原生数据类型

可能是历史原因,Free Pascal 编程环境中的数据类型数量浩瀚如繁星,其中又有很多类型是运行时定义的别名。为了去繁从简,本文整理了 Free Pascal 编译器支持的平台无关且和其他语言二进制兼容的原生数据类型。

……

Windows API 编程之调整菜单宽度

好多年没碰 Windows API 编程了,这次写 Traymond 才发现:堂堂 Windows 竟然没有一个 API 能够用来调整菜单的宽度。

通常,在程序中使用的静态菜单都是直接从资源中载入的,而这次需要动态增删菜单项目。这时我才发现一个问题:当用 InsertMenuItem() 函数插入一个菜单项时,Windows 会根据菜单项文本自动增加菜单宽度;但是当使用 DeleteMenu() 函数删除菜单项后,Windows 却无法根据剩余的菜单项文本自动缩小菜单宽度。搜遍全网,也只找到两种解决方法。

……

使用 Windows API 将图标转换成位图

在不依赖任何第三方库、仅使用 Windows API 的前提下,需要将窗口图标(HICON)转换成作为菜单图标的位图(HBITMAP)。

……

增强版 Traymond 让任意窗口最小化到系统托盘

本项目已更名为 Traynard,并使用 Lazarus 完全重构。新版本提供更多的功能和更加易用的操作界面。原增强版 Traymond 仅保留下载,不再更新。

详见:窗口托盘最小化工具从 Traymond 进化为 Traynard

Traymond 是一款 Windows 上的小工具,可以将任意窗口最小化为系统托盘图标,双击图标即可还原窗口。软件启动后会在后台运行,按下热键 Win + Shift + Z 后,当前窗口会最小化到系统托盘图标,双击图标可以恢复窗口。软件正常退出时会自动恢复期间最小化的窗口。另外,如果程序意外终止,重新启动程序,最小化窗口的都会恢复。

……

跨平台虚拟加密磁盘软件 VeraCrypt

VeraCrypt 是一个跨平台开源磁盘加密软件,支持 Windows、macOS 和 Linux。它是已经停止开发的加密软件 TrueCrypt 的继承者。和 Windows 的 BitLocker 相比,VeraCrypt 使用起来更加简单,数据迁移也更加方便。

VeraCrypt 的主要功能有:

……

午餐外卖神秘消失事件

这是一个秋高气爽的午后,当我从摸鱼中回过神来时,已经错过了午餐时间。我拿起手机,慵懒地倚靠在办公椅中,一边划动着屏幕,一边思考接下来午餐该吃什么……

错过用餐时间并不是失误,而是有意为之。错峰用餐的好处有很多——比如出餐时间会更快;骑手不赶时间,有时会将外卖送上楼而不是放在楼下取餐柜,免去下楼取餐的麻烦;另外午餐吃得晚,下午也不容易饿。

……