Win11 安装过程中跳过 Microsoft 微软账户登录
安装完 Windows 11 家庭版后,首次登录时系统会强制用户联网,并使用 Microsoft 微软账户进行登录,本篇文章介绍了如何跳过这个环节,使用本地账户进行登录。 操作步骤 1、进入 Windows 11 引导页面,根据系统提示来到连接 Internet 的步骤,此时如果不连接到互联网,右下…
安装完 Windows 11 家庭版后,首次登录时系统会强制用户联网,并使用 Microsoft 微软账户进行登录,本篇文章介绍了如何跳过这个环节,使用本地账户进行登录。 操作步骤 1、进入 Windows 11 引导页面,根据系统提示来到连接 Internet 的步骤,此时如果不连接到互联网,右下…
客户提了个需求:因为他们的显示器(32吋)大,所以经常把缩放比设成125%或者150%,希望我们的APP在这两个缩放比下能够正常显示。
但是我们干活用的只是普通的24吋,设成150%之后高度就出溢出屏幕了,这就需要加滚动条。而工作这个东西,到了二鬼子领导那里就会加码,变成100%-225%都得能正常运行,并且因为增加的高度与原来的高度相比没多太多,所以要大滑块,不要分的细碎的小滑块。
这个功能本身不难。通常的做法是取屏幕放大后的窗口新高度,然后减去桌面有效视窗高度,得到的差值除以一个系数,然后用SetScrollRange的第三个数给传进去。然后重写OnVScroll方法,从系数反推滑块位置。
但是,这样得到的是小滑块,而且最后一屏的空白部分也不准确,往往会出现大片空白。
研究了好几天,终于找到了还算不错的方案。在此分享一下。
注意,我只写了垂直滚动条,因为我们的窗体就是瘦长型,即使增加到225%也没超出屏幕宽。给公家干活的一个要务就是不干多余的事,所以要添加水平滚动条的自己酌情修改,我这里就不提供了。
开始。
如需要增加则对垂直滚动条进行初始化。初始化时,不使用简化版的SetScrollRange(),而改用SetScrollInfo()。利用结构体SCROLLINFO的nPage和nMax配合实现大滑块。这里的逻辑是:nPage与nMax的比值也就是滑块占总高度的比值,比值越接近一,滑块越大。nPage和nMax都是相对值,只要二者单位统一即可。方便起见直接使用真实值。
一个很坑的点是nMax不能用窗口Rect的高,而要取最下边控件的下沿,原因未知。
下面是代码:
BOOL CMFCAppDemoDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
//取窗口位置
CRect rcThis;
GetWindowRect(&rcThis);
//取最下面控件的位置,如果有动态创建的控件,可以遍历取得。
CRect rcLastButton;
GetDlgItem(IDCANCEL)->GetWindowRect(rcLastButton);
//取放大倍数,96.0是100%时候的DPI
float fScale = static_cast<float>(GetDpiForWindow(m_hWnd)) / 96.0;
//取桌面工作区大小
CRect rcScreen;
::SystemParametersInfo(SPI_GETWORKAREA, 0, &rcScreen, 0);
//对话框的工作区域理想高度:比最后一个控件多一丢丢。
int nHeightImage = rcLastButton.bottom + rcLastButton.Height() * fScale;
//如果想象高度比工作区域高,那么将窗口高度设为与工作区等高。
if (nHeightImage > rcScreen.Height())
{
m_blHasVScrollBar = true; //成员变量,用于标记是否有滚动条
rcThis.bottom = rcThis.top + rcScreen.Height();
this->MoveWindow(&rcThis, TRUE); //修改Dialog自身高度
SCROLLINFO si{};
si.cbSize = sizeof SCROLLINFO;
si.fMask = SIF_RANGE | SIF_PAGE | SIF_PAGE;
si.nPage = rcScreen.Height(); //Windows桌面可利用高度作为Page高
si.nMax = nHeightImage; //窗口高度最大值。
SetScrollInfo(SB_VERT, &si, TRUE); //激活滚动条
}
//否则没用滚动条
else
{
SetScrollRange(SB_VERT, 0, 0, FALSE);
}
return TRUE;
}
没有难点。只要每个消息处理时,nPage与nMax的比例关系一致即可。
BEGIN_MESSAGE_MAP(CMFCAppDemoDlg, CDialogEx)
ON_WM_VSCROLL()
END_MESSAGE_MAP()
void CMFCAppDemoDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
//取之前的滚动条信息
SCROLLINFO si{};
GetScrollInfo(SB_VERT, &si, SIF_ALL);
//滚动条上一次的位置
int nCurPos = si.nPos;
const int FACTOR(100);
switch (nSBCode)
{
case SB_LINEUP: //Scroll one line up
nCurPos -= (si.nPage / 50); //点击一次箭头,或者按一次↑,移动页面的1/50,注意方向
break;
case SB_LINEDOWN: //Scroll one line down
nCurPos += (si.nPage / 50); //注意方向
break;
case SB_PAGEUP: //Scroll one page up
nCurPos -= (si.nPage / 50* 20); //PgUp键的处理。所有的响应要统一单位标准即可。注意方向
break;
case SB_PAGEDOWN: //Scroll one page down
nCurPos += (si.nPage / 50* 20); //注意方向
break;
case SB_THUMBPOSITION: //Scroll to the absolute position. The current position is provided in nPos
nCurPos = nPos; //从缩略图直接确认位置
break;
case SB_THUMBTRACK: //Drag scroll box to specified position. The current position is provided in nPos
nCurPos = nPos; //从滚动条直接确认位置
break;
case SB_ENDSCROLL:
break;
default:
break;
}
//确认没有超出最小值和最大值范围。最小值一般是0,最大值是nMax - nPage。
nCurPos = max(si.nMin, min(nCurPos, si.nMax - static_cast<int>(si.nPage)));
//当位置移动时,滚动窗口内容
if (nCurPos != si.nPos)
{
int nDelta = si.nPos - nCurPos; //注意方向,原始值减目标值
si.nPos = nCurPos;
si.fMask = SIF_POS;
SetScrollInfo(SB_VERT, &si, TRUE); //设滚动条
ScrollWindow(0, nDelta); //滚动窗口
UpdateWindow();
}
}
同样没有难点,只是鼠标滚动一下会转化成多次向上或向下的消息。
BEGIN_MESSAGE_MAP(CMFCAppDemoDlg, CDialogEx)
ON_WM_MOUSEWHEEL()
END_MESSAGE_MAP()
BOOL CMFCAppDemoDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
//确认滚动条有效
if (!m_blHasVScrollBar) {
return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
}
CONST INT WHEEL_SCROLL_LINES(3);
UINT8 ucDirection(SB_LINEUP);
//根据zDelta方向确定消息重量
if (zDelta < 0) {
ucDirection = SB_LINEDOWN;
}
//把鼠标滚动值换算成N个箭头消息并发送。次数是没有方向的。
UINT unLines = (abs(zDelta) * WHEEL_SCROLL_LINES) / WHEEL_DELTA;
while (unLines--)
{
SendMessage(WM_VSCROLL, MAKEWPARAM(ucDirection, 0), 0);
}
return TRUE;
}
总之,最难的其实还是开头。nPage与nMax虽然设什么数都可以,但只有用真实值才是最符合拖动规律的。
“用树莓派打造家庭 2TB 网络硬盘” “树莓派 + WD 硬盘:轻松为孩子的 Mac 提供共享存储” “家庭文件共享不再难:自制树莓派网络硬盘” “让树莓派变身 2TB 家庭共享硬盘” “为孩子的 Mac 节省空间:树莓派网络硬盘实战”前两年,我给两个孩子各买了一台 MacBook Pro。弟弟的那台当时大概六百多买的,SSD 只有 256GB,所以经常硬盘爆满,只能不断删除下载的文件、dmg 安装包之类的。用了一段时间后,MBP 的 ~/Caches 目录也会变得很大,虽然可以临时清理,但这只是治标不治本。 我就跟孩子说,你可以把一些文件放到云盘上,比如 OneDrive、Google Drive,或者我给你接个 USB 硬盘挂到电脑上。OneDrive 有“本地不占空间、数据存到云端”的模式,很省地方,但免费空间只有 5GB。Google Drive 免费空间是 15GB,可用于邮件、照片和 Drive 共享。 孩子不太喜欢用 USB 硬盘,一方面得接电源,另一方面得用 Type-C 转 USB 接口,很麻烦,也不想总插着。 我想到家里有树莓派,可以接一个移动硬盘,通过文件共享,把家里几台电脑都挂接成网络硬盘(Map Network Drive)。于是,我找了几个抽屉,找到一个 2TB 的西部数据(WD)硬盘,3.5 寸的,需要外接硬盘盒,正好前几个月折腾数据时买了一个。 之前挂在HPZ800服务器的D盘。 [caption id="attachment_70022" align="alignnone" width="753"]
mkdir /mnt/usb
mount -t ntfs-3g /dev/sdb1 /mnt/usb
其中 /mnt/usb 是挂载目标目录,需要先创建。
如果想开机自动挂载,只需在 /etc/fstab 添加一行:
UUID=<ID> /mnt/usb ntfs-3g defaults,uid=1000,gid=1000,umask=0000,nofail,x-systemd.device-timeout=10 0 0
<ID> 是硬盘的 UUID,可以通过 lsblk -f 查到。
sudo apt install -y samba
安装完成后,编辑 /etc/samba/smb.conf 添加以下内容:
[usb2share]
path = /mnt/usb
browseable = yes
writable = yes
guest ok = no
create mask = 0777
directory mask = 0777
valid users = pi
valid users 可以写多个用户,用空格分隔,也可以用 @ 表示群组。用户必须是 Linux 本身存在的账号。
设置 SMB 密码:
sudo smbpasswd -a pi
重启服务:
sudo systemctl restart smbd
\\192.168.IP地址\usb2share
输入用户名和密码,勾选“记住密码”即可添加网络硬盘,用起来跟本地硬盘差不多。
在 Mac 上,可以在 Finder 按 Command + K 添加服务器,同样输入 树莓派的IP地址、用户名和密码即可。
我给两个孩子和老婆各建了一个目录,让他们把数据放到自己的目录下,2TB 够用一段时间了。
有了这个网络硬盘,分享数据也方便多了(电影、照片等),再也不用通过 WeChat、Whatsapp 或 Google Drive 分享——这些方式要么不方便查找历史文件,要么照片会被压缩。
真好,一下子又让树莓派多了一个用途,不再是积灰的机器了。
[caption id="attachment_70020" align="alignnone" width="864"]本文介绍一例Windows下无法通过局域网正常访问华为Pad的故障,并记录阿猪排查与解决问题的过程。
你是否遇到过 PikPak 网盘从国内直接访问不稳定甚至无法访问的问题,除了部分地区是因为被墙外,还有一些地区是因为DNS默认解析的 IP 响应速度不理想,之前 Shimily 大佬写过一个小程序,可用来检测目前PikPak接口的最快的IP地址,然后绑定对应的Hosts即可提升访问速度,但是这个2年前的程序有点年久失修了,并且实际测试中有个小bug,不过好在大佬开源了代码,所以我简单修了一下,重新打包了exe文件。
![]()
一般来说全国这个 IP 都是最快的,直接 hosts 设置这个 IP 就行。
打开本地hosts文件,添加以下到hosts中进行保存即可
8.210.96.68 api-drive.mypikpak.com
8.210.96.68 user.mypikpak.com
注意:该 hosts 只会加速你网页/客户端内的浏览响应速度,并不会对下载生效,如果想加速下载请对下载工具设置代理工具解决,或尝试白嫖方案。
如果你遇到的是 pikpak 网页或 APP 显示「对不起,pikpak 在当前地区不可用」,说明你的区域没被墙,只是你 IP 是国内的,被 pikpak 官方限制了,这个可以通过 hosts 屏蔽检测域名解决
打开本地hosts文件,添加以下到hosts中进行保存即可
0.0.0.0 access.mypikpak.com
0.0.0.0 access.mypikpak.net
0.0.0.0 access.pikpak.me
0.0.0.0 access.pikpakdrive.com
就只写windows系统方案了
notepad,按回车,就会出现记事本的界面。C:WindowsSystem32driversetc,点击右下角「文本文档」,选择「所有文件」,点击出现的hosts文件,然后点右下角的「打开」,就会弹出hosts文件的编辑页面。8.210.96.68 api-drive.mypikpak.com
8.210.96.68 user.mypikpak.com
步骤1和2其实是为了打开一个管理员权限的记事本程序,也可以替换为:
基于 shimily 的程序修改而来,程序没处理好 IP 无效后的报错,现在在部分地区已经无法正常使用了。我主要是改了一下这部分的逻辑,并加了几个新的可用 IP 重新打包
软件下载:https://tjsky.lanzouq.com/irpcw3bqpbxa 密码:2var
软件截图:
![]()
软件代码:
import typer
import platform
import subprocess
import statistics
pikpak_hosts = [
"8.222.208.40",
"8.210.96.68",
"8.209.208.12",
"8.209.248.151",
"149.129.129.1",
"149.129.132.58",
"198.11.172.147",
"47.88.28.176",
"43.160.170.231",
"43.156.21.88",
"43.160.168.77",
"43.159.52.123"
]
def main():
confirm = typer.confirm("请确认是否开始检测pikpak域名延迟?", abort=True)
if confirm:
host_pings = []
for host in pikpak_hosts:
typer.echo(f"正在检测IP {host} 延迟...")
try:
if platform.system() == "Windows":
output = subprocess.check_output(
["ping", "-n", "5", host],
stderr=subprocess.STDOUT,
universal_newlines=True
)
else:
output = subprocess.check_output(
["ping", "-c", "5", host],
stderr=subprocess.STDOUT,
universal_newlines=True
)
except subprocess.CalledProcessError as e:
typer.echo(f"IP:{host} 无法连接!n")
continue
pings = []
for line in output.splitlines():
if platform.system() == "Windows":
if "时间=" in line:
ping = float(line.split("时间=")[1].split("ms")[0])
pings.append(ping)
else:
if "time=" in line:
ping = float(line.split("time=")[1].split("ms")[0].strip())
pings.append(ping)
if len(pings) == 0:
typer.echo(f"IP:{host} 无法连接!n")
continue
else:
avg_ping = statistics.mean(pings)
#取avg_ping小数点后两位
avg_ping = round(avg_ping, 2)
typer.echo(f"IP:{host} 平均延迟为:{avg_ping}msn")
host_pings.append((host, avg_ping))
fastest = min(host_pings, key=lambda x: x[1])
typer.echo(f"检测完成:nIP:{fastest[0]} 延迟最低, 平均值:{fastest[1]}ms")
typer.echo("n按回车键退出程序...")
input()
if __name__ == "__main__":
typer.run(main)
The post PikPak 无法访问或访问卡顿问题解决–自动检测 PikPak 延迟最低 IP 工具 appeared first on 秋风于渭水.
为了解决快速查看浏览器扩展兼容情况,我开发了《Chrome升级小助手》帮你快速检测你的浏览器扩展是否都已兼容 Chrome 的 Manifest V3 标准。下载Python脚本或EXE版,即可一键生成详细兼容性报告,避免升级后扩展失效的窘境。
![]()
总所周知,最近Chrome浏览器又双叒叕升级了,目前正式版已经更新到 142 版。说实话,每次看到Chrome更新我都又爱又恨:爱的是新功能确实香,恨的是 Manifest V2 扩展的日子也基本到头了。
随着Google对Manifest V2扩展的限制越来越严格,大部分主流扩展也都陆续发布了基于Manifest V3的版本。于是我决定把我的Chrome升级到最新的142版本。但是呢,我遇到了一个“小问题”:我装了几十个扩展(PS:当然我不会全启用,那要卡死个人了),怎么快速知道哪些扩展还没升级到Manifest V3呢?
最开始我偷了个懒,直接去问AI:“怎么批量检查 Chrome 扩展的 Manifest 版本?”
AI很热情地告诉我:“亲,可以在Chrome的扩展管理页面(chrome://extensions/)打开开发者模式,然后在控制台运行这段JS脚本就好了哦!”
我试了试,结果……根本检测不到。我和 AI 拉锯讨论了半天后,我意识到这方法不行——扩展管理页面的权限限制让脚本无法获取准确数据。
正好最近我自己也在写 Chrome 扩展,突然想到:每个扩展的安装目录里不都有个 manifest.json 文件嘛!这里面记录了扩展的所有元数据,包括扩展使用的 Manifest 版本,这数据肯定是最准确的。
于是,我决定写一个Python脚本来解决这个问题。思路很简单:
最开始的脚本非常简陋,就是遍历检查,然后把还在用 Manifest V2 的扩展名字写到一个 txt 文件里。
很快我发现,这样不行,因为有些上古扩展的 manifest.json 写的不是很规范,导致获取不到扩展的名字,如果脚本想适配他们的一些奇怪写法,又需要增加很多额外的代码量。而且我发现有我有十几个扩展是MV2的,需要手动去扩展页面根据名字慢慢找到底是哪个扩展,太费劲了。
于是我决定改为生成一个 html 文件,反正扩展 ID 都有了,可以写一个超链接方便点击里面的链接跳转到扩展详情页不好吗。
然后发现,点击 html 文件中的「打开扩展详情页」连接,点击并不会打开扩展详情页(虽然链接是正确的)。
经过一番查找,原来是因为Chrome的安全限制,本地HTML文件中的chrome://链接无法直接点击打开(浏览器会阻止)。好吧,继续改。
既然不让我直接点,那我就改为点击按钮,复制这个扩展详情页链接呗。这种本地JS还是让我用的嘛
同时我还发现之前脚本的一个小瑕疵:没有区分是扩展还是主题。Chrome 对主题的 Manifest 版本要求和扩展不同,主题停留在 Manifest V2 一般都没事,所以脚本需要将主题单列出来。
V3版脚本写好,我自己测试没问题,发到群里小范围试用了一下,大家纷纷表示挺好用的,不过很快有群友提出来一个问题:“我现在知道了我的扩展如果升级到 Chrome 142 会不能用,但我怎么知道替代扩展在哪里呢”,很快就有人回道:“扩展的详情页会显示一个本扩展将停用的「相关扩展推荐」按钮,点那个就行了”。本来这事就结束了,但我试了一下我自己的141版的浏览器:扩展详情页居然没这个按钮,然后我反应过来了,没按钮就对了。教程里教大家怎么用 MV2 扩展的步骤里,不是把这个警告关了嘛,自己写的文章怎么快就差点忘了。
于是乎,Chrome升级小助手再次进化,增加「相关扩展推荐」按钮,利用Google应用商店自有的功能(https://chromewebstore.google.com/detail/{扩展ID}/related-recommendations)帮助大家找到可替代的扩展。(不一定都能找到,但总比一个一个手动找强一点)
V5版 脚本写好后,我在 TG 大群里分享了一下,群友们纷纷表示“好用!”“终于不用一个个手动检查了”。但也有群友吐槽:“我没 Python 啊,怎么装?”,“Python这么大的?”
也是,又不是每个人都是技术宅。于是我又把Python脚本打包成了《Chrome升级小助手.exe》,这样即使没有Python环境的用户也能直接使用啦!
按说这脚本没外部依赖,都是基本库,直接pyinstaller --onefile --clean --console --noconfirm Chrome升级小助手_V5.py一把梭哈就行。
结果这么个只有25K的小脚本,居然打包出来的exe体积有20多MB,这能忍?继续改进吧
那就没办法了,虽然也不指望把exe压缩到只有2、3M的体积,但起码要是个位数吧,这么个小东西整20多M就有点恶心了。
那怎么快速减少打包体积呢?
1. 使用虚拟环境打包 ,以免引入不必要的东西进来
2. 使用UPX压缩可执行文件
3. 删除一切不需要的库,比如PIL(我又不处理图像)、tkinter(我又没GUI界面)、matplotlib(我又不画图)等等吧,诸如scipy、numpy、pandas全都干掉。
最终成果:5.7MB,还行吧,算不上极致压缩,如果再精细一点调整或者重新编译,我估计到3~4MB也是可以的,但这个精力就需要很多了,没必要。PyInstaller + UPX + 新虚拟环境 + 删除肯定没用到的库,算是一个比较平衡的打包方案。
![]()
如果你电脑有 Python 环境(建议3.10+,不过我估计3.6+应该就能用),可以直接下载 Python脚本版,这样体积更小。
python Chrome升级小助手.py报告会按Manifest版本分类显示所有扩展:
1. 红色标注的V2扩展:这些在Chrome升级后将无法使用,需要尽快寻找替代或更新。
2. 绿色标注的V3扩展:这些兼容新版本,可以放心使用
3. 主题扩展:即使是V2版也通常不受影响,但列出来,以防万一有问题。
报告中还提供了每个扩展的详情页链接和Chrome应用商店的推荐链接,方便你快速操作。
如果你没有Python环境,或者就想“开箱即用”,可以直接下载《Chrome升级小助手.exe》
如果有任何问题或建议,欢迎在评论区留言,希望这个工具能帮到你!
The post Chrome升级小助手——快速检查你的浏览器扩展是否已支持新版Chrome appeared first on 秋风于渭水.
今天是 2025年10月14日,微软正式宣布对 Windows 10 停止支持。这一刻,我坐在电脑前,看着屏幕里熟悉的界面,心中涌起一阵难以言喻的复杂情绪。
回顾这十年的相伴时光,从令人抓狂的“强制更新”到带来惊喜的WSL,再到ESU计划的滑稽定价……这不仅是一个系统的落幕,更是我们一段数字生活的印记。谨以此文,告别这位坚韧的老朋友。
![]()
2015年7月29日,Windows 10 正式登台亮相。那时的我,还沉浸在 Windows 7 的经典与流畅中,微软当年曾宣称这是“最后一个Windows版本”,它将持续更新,不断进化。(然后 Windows 11 它来了,不过从内部版本号号上来说 Windows 11 确实还能算是 Windows 10)作为喜欢尝试的我,很快就在 8 月初想办法直接往实体机里安装了 Windows 10 不过幸好到也没遇到什么大的问题,当年的自己可真有点莽,毕竟这那可是工作用机。
windows 10 带来的新特性中,估计大家最讨厌的就是:强制更新 与 越来越多的广告
我永远忘不了那次我正要送标书赶火车急着关闭电脑时,屏幕上却赫然出现:“正在安装更新,请不要关闭电源。”,那一刻的绝望,那个心情,简直冰冰凉,透心凉。
还有一次,在工作站上昨晚开始的某单体的三维模拟施工视频渲染导出工作,在第二天早上上班时发现这个逗比 windows 10 在接近完成时,TMD自动给我重启了,于是不得不重新导出,浪费了足足1天的时间,导致后续其他单体的渲染导出差点拖期,偏偏那个甲方(某互联网大厂)很不好伺候,最后那两天只能定闹铃,在大半夜起床远程过去,继续进行下一个单体的导出。
从开始菜单的“建议应用”、到锁屏界面突兀的“游戏推广”,还有通知中心弹出的“使用技巧”——这些内容被包装成贴心建议,实则推销微软自家的产品和服务。尤其是微软对Edge浏览器的推广,那真是无孔不入,锲而不舍。系统不停的在弹窗、条幅、提示中劝说用户切换默认浏览器到Edge,好像在不断质疑我没有选择Edge的行为。和推广Edge比起来,其他什么新闻的里的热门资讯啊,天气应用的广告啊,资源管理器里的OneDrive广告啊,貌似也没那么不可接受了呢。(并不)
说实话,这是我唯一满意的创新,真正打破操作系统的界限。
WSL 让我无需虚拟机即可在 Windows 环境下运行原生 Linux 应用程序和工具,而且还实现了文件系统和命令行共享。
WSA 则允许我在 Windows 10 上运行 Android 应用程序(windows 10上必须自己想办法才能装进去),最棒的是 WSA 可以同时启动多个APP在不同窗口中,而且 windows 应用和 WSA 应用可以同时处于焦点。不过最终 WSA 因为毫无利益被微软弃坑了,被腾讯应用宝接盘,但应用宝更倾向于实现在 windows 里玩 Android 游戏的目的。
微软最骚的是,推出了扩展安全更新计划(ESU),允许用户付费延长安全更新服务至2026年10月13日。这玩意槽点太多了。首先,ESU计划必须绑定 Microsoft 账户,这对坚持使用本地账户的用户而言无疑是一种威逼利诱。其次,是他的定价:30美元。
微软呢还允许你用 Microsoft Rewards 积分兑换 ESU,只需要 1000 积分,要知道根据 Microsoft Rewards 的兑换价格 1000积分 ≈ 6.6 个原神国际服原石 = 一年ESU服务 这种等价关系让ESU的定价显得格外滑稽。1000 积分难度适中,但等价关系太诡异了,30000 积分虽然符合实际价值了,却显得微软完全没有诚意。
最最重要的是:这玩意其实是不要钱的啊!只要你是Home 版、Professional 版、Pro Education 版或 Workstations 版(反正不是企业版就行)用 Microsoft 帐户登录(管理员账户)直接在设置 > 更新页面下就出现注册ESU的提示了,注册完全免费。
根据查到的说法,“随着 Windows 10 支持的结束,约 4 亿台无法升级到 Windows 11 的电脑将面临“裸奔”的风险。” 这一手和最近谷歌自己一个人强推 MV3 扩展有异曲同工之“妙”。技术的进步(企业的盈利)搞的一定要以牺牲部分用户为代价。Windows 10 升级 Windows 11 是免费,但是很多老设备达不到TPM 2.0等硬件要求就被挡在门外,必须要重新购买硬件才能用新系统,不然就只能放任系统“裸奔”,说严重点这关乎“数字公平”。
再见,Windows 10!感谢十年相伴。你没有Windows XP时代的纯真,也没有Windows 7时代的优雅,但历经10年后,你有了一种被磨砺出的坚韧和可靠。
你的落幕不是终点,而是化为数字化旅程中一个深深的印记。在未来的日子里,无论是选择升级到Windows 11,还是继续与“裸奔”的Windows 10为伴,亦或转向其他平台,这段记忆都将珍藏在我们的数字生活史中。
如今回望,Windows 10承载了太多记忆。见证了我的电脑从机械硬盘到固态硬盘的飞跃,从IE浏览器到Edge的升级,更新历史中的每一个版本号都像时代的记忆。见证了我生活中的点滴变化,单身、恋爱、结婚、生子。
作为承载了我无数个深夜加班的记忆,成为了我学习、工作和娱乐的忠实伙伴。最后,我想对这位老朋友说声:谢谢有你陪伴。
今天是2025年10月20日,就在发完此文后一周,虚拟机的windows 10 就坏了。好吧,其实不是系统坏了,而是虚拟机软件坏了,那就正好更新一下系统吧,虚拟机里的这个 Windows 10 系统还是 21H2 ,既然彻底炸了,就顺手把虚拟机软件和系统都更新到最新吧。
The post Windows 10 停止支持:十年陪伴,终有一别,再见Windows 10 appeared first on 秋风于渭水.
Chrome 于 2024 年 6 月开始禁用 Manifest V2 扩展程序,强制开发者使用 Manifest V3 ,在127以上版本的 Chrome 中开始出现升级提示,在 138 版本开始默认禁用了 uBlock Origin 、暴力猴等 MV2 扩展,在139版本移除了延长MV2扩展支持的企业策略,在 140 又移除了多个实验性选项导致以前想要启用该扩展程序的方法基本都已经失效。不过没关系,目前起码直到 141 版本都还有两个方式可以安装或启用 uBlock Origin 广告拦截等 MV2 版扩展程序。
![]()
在 Chrome 快捷方式的属性目标中追加以下内容(注意--的前边有个空格),并确定。
--disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled
好了,只要你的chrome是通过这个快捷方式启动的,就可以启用 uBlock Origin 等 Manifest V2 扩展。
安装可以通过在扩展程序页面,开启右上方的「开发者模式」然后将下载的CRX格式的扩展拖入浏览器窗口安装。
(很多网站提供chrome扩展离线安装包下载,比如:这个网站))
不过如果只是这样做的话,你每次开机后都要手动先开一个 chrome 还记得不要关了,你通过点其他地方链接拉起的chrome 并不会被加载这个参数,所以就导致扩展无法启用。
![]()
regedit 打开 注册表编辑器计算机\HKEY_CLASSES_ROOT\路径,你应该能看到两个写着「ChromeHTML.这里可能会是一堆字母或者也可能没有」的项目,打开他,继续往下依次展开到计算机\HKEY_CLASSES_ROOT\ChromeHTMLXXXXXX\shell\open\command"C:\Program Files\Google\Chrome\Application\chrome.exe" --single-argument %1"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled --single-argument %1访问chrome://flags/#temporary-unexpire-flags-m138与chrome://flags/#temporary-unexpire-flags-m139,将他俩最后参数改为「Enabled」(如果你是141版本的话,这两个参数最后应该是m139和m140)
![]()
重启 Chrome 浏览器(注意:要彻底重启,不要残留后台进程,不然你是看不到后面这些东西的,你修改配置后,浏览器应该会在最下边出现一个重启按钮,用这个重启。)
访问chrome://flags/#allow-legacy-mv2-extensions,将最后参数改为「Enabled」
再次重启浏览器
下载你的扩展的 crx 安装文件(很多网站提供chrome扩展离线安装包下载,比如:这个),后缀名从.crx改成.zip,将扩展解压成一个文件夹
访问chrome://extensions/ 打开右上角的“开发者模式”,选择“加载未打包的扩展程序”,找到你刚才扩展解压出来的文件夹,确定。
The post Chrome 140/141 版本如何解决“此扩展程序不再受支持,因此已停用” ,安装/启用 uBlock Origin 广告拦截等 MV2 版扩展程序 appeared first on 秋风于渭水.
作为一个常年游走在代码和文档之间的打工人,输入法状态不对导致的尴尬场景我经历太多了:写代码时冒出一串中文标点,跟同事沟通时大小写不分,最崩溃的是在全屏游戏里切不出中文。Windows 右下角那个小得可怜的"中/英"提示,对我来说基本等于不存在。
直到我发现了这类输入法状态提示工具,才算真正治好了我的"输入焦虑症"。今天就跟你分享几款我深度用过的输入法切换提示小工具,完全免费,体积轻巧,关键是真能解决问题。

| 软件名称 | 适用操作系统 |
|---|---|
| Input Source Pro | MacOS |
| InputTip | Windows |
| Smart Input Pro | Windows |
| ImTip 智能桌面助手 | Windows |
| RedDot | Windows |
| language-indicator | Windows |
| KBLAutoSwitch | Windows |
| TSFTool | Windows |
Input Source Pro 一款能够自动切换输入法并适时提示的工具,旨在让用户在输入文字时更加轻松自如。
InputTip 是一个输入法状态管理工具,主要功能包括实时提示输入法状态(鼠标方案/符号方案)以及状态切换(窗口触发/热键触发)。
Smart Input Pro:一款帮助程序员提升编码效率的工具。
ImTip 是一款免费开源的智能桌面助手,体积仅 860 KB,具备输入跟踪提示、超级热键、AI 助手等功能,可将各种桌面应用快速接入 AI 大模型。
输入跟踪提示
ImTip.exe 或外观设置窗口快速导入,也可通过剪贴板复制粘贴配置方案代码。AI 助手
RedDot 在你的光标处显示中英文状态
language-indicator Per-language text caret and mouse cursor styling, aka language indicator(按语言对文本光标和鼠标光标进行样式设置,也称为语言指示器)。
KBLAutoSwitch 一个基于 AutoHotkey (AHK) 的工具,用于自动切换中英文输入法。
TSFTool V0.9.3.2(官网地址) 用于设置输入法的工具,支持 Windows 10-11 和 Windows Server 2019-2025 操作系统,支持新的 TSF 输入法框架,并部分兼容旧的 IMM 输入法框架。
这篇文章介绍了作者在更换新硬盘并重装系统后遇到开机约1分30秒必定死机的问题。经过测试发现高负载下不会死机,怀疑是CPU与主板兼容性相关。作者进入BIOS关闭C-States无效,但关闭SpeedStep后问题解决。由于12代Intel已不依赖SpeedStep,该设置对性能影响不大。文章总结,当遇到clock watchdog timeout蓝屏或低负载死机时,可以依次尝试关闭C-States、Intel Speed Shift Technology和Enhanced Intel SpeedStep来排查。

本文为大一新生提供全面的计算机基础知识指南,涵盖硬件组成、操作系统使用、常用软件安装与配置、网络基础、安全防护等实用内容,帮助新生快速上手计算机,提升学习和生活效率。
由于微软雅黑的设计太过老旧,所以很多网站在设置font-family字体家族时,都会首先引入苹果的苹方字体(PingFang SC)。一来为了照顾 MAC,二来可以改善 Windows 上显示效果(已安装苹方字体的前提)。现在,一些厂商会在官网上引入自己研发的字体。感谢各大厂商没有禁止 woff 字体文件跨域使用,可以让我们白嫖,因为你们的字体是真的漂亮,并且以下字体可以个人免费使用。
20240915 更新说明
1. 去除失效链接
2. 增加 MiSans 可变字体链接
3. 增加快看世界体
20230606 更新说明
1. 增加了阿里妈妈系列三款字体:方圆体/灵动体/刀隶体 web 引用链接
20230405 更新说明
1. 增加了钉钉进步体、阿里妈妈东方大楷 web 引用链接
20230312 更新说明
1. 增加了钉钉进步体和斗鱼追光体文件下载链接,但暂未有 web 引用链接
2. 标注华康金刚黑授权性质,请谨慎使用
3. 优化排版
20230306 更新说明
1. 增加了阿里妈妈数黑体 cdn 链接
2. 标注 CDN 公开性质
3. 优化部分说明文案
4. 优化排版
20221123 更新说明
1. 2022 年 11 月 17 日发现 OPPO 字体 – MasterGo 网站已关闭跨域请求,链接仅供下载使用了。
2. 增加了 unicode-range 优化说明
| 字体名称 | 服务商 | 字重 | 链接 |
|---|---|---|---|
| Noto Sans | 可变 | https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100..900&display=swap | |
| Mi Sans | 小米 | 多种 | https://font.sec.miui.com/font/css?family=MiSans:0:Chinese_Simplify,Latin&display=swap |
| 可变 | https://cdn-font.hyperos.mi.com/font/css?family=MiSans_VF:VF:Chinese_Simplify,Latin&display=swap | ||
| HarmonyOS Sans | B 站 | 400 | https://s1.hdslb.com/bfs/static/jinkela/long/font/regular.css |
| 500 | https://s1.hdslb.com/bfs/static/jinkela/long/font/medium.css | ||
| OPPO Sans#1 | OPPO | 400 | https://code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Regular.woff2 |
| 500 | https://code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Medium.woff2 | ||
| 华康金刚黑#2 | 字节跳动 | 400 | https://fonts.bytedance.com/dfd/api/v1/css?family=DFPKingGothicGB-Regular&display=swap |
| 500 | https://fonts.bytedance.com/dfd/api/v1/css?family=DFPKingGothicGB-medium&display=swap |
上述字体列表链接中,若是 css 链接可直接引用,若是 woff 字体链接需在你的 css 文件中引入。具体方式见下:
方式 1 在 html 中直接引入:<link rel='stylesheet' href='链接.css'>
方式 2 在 css 中引入:@import url('链接.css');
在 css 中引入
@font-face {
font-family: OPPOSans; //定义字体名称
font-weight: 400; //定义字重
font-display: swap;
src:url('链接.woff2') format('woff2'); //字体链接
}
完成上述引入字体文件后,那么在需要使用的元素处设定 css 属性 font-family 中输入字体名称即可,注意:字体名称要和引用的字体名称相同。
浏览器默认字重 400,假如对标题想要使用粗体该如何操作呢?在设定字体字重时会有两种不同的呈现效果方式。
例如下述两个不同字重文件都使用 OPPO-Sans 名称,但在引入字体时设置了不同的字重和链接:
@font-face {
font-family: OPPO-Sans;
font-weight: 400;
font-display: swap;
src: url(//code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Regular.woff2) format('woff2');
}
@font-face {
font-family: OPPO-Sans;
font-weight: 500;
font-display: swap;
src: url(//code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Medium.woff2) format('woff2');
}
那么在对 h1 这个部分引用时,如何使用字重 500 的字体呢?只需要在实用的元素设定 CSS 属性 font-weight 为 500 即可。即下述:
div { font-weight: 400; } // 普通元素在引入 400 字重时
h1 { font-weight: 500; } // 标题元素在引入 500 字重时
例如下述两个不同字重文件使用不同字体名称,在引入字体时也设置了不同的字重和链接:
@font-face {
font-family: OPPO-Sans-Regular;
font-weight: 400;
font-display: swap;
src: url(//code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Regular.woff2) format('woff2');
}
@font-face {
font-family: OPPO-Sans-Medium;
font-weight: 500;
font-display: swap;
src: url(//code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Medium.woff2) format('woff2');
}
那么在使用不同字重时,只能使用当初设定该字重的字体名称。即下述:
div { font-family: OPPO-Sans-Regular; } // 普通元素在引入 400 字重时
h1 { font-family: OPPO-Sans-Medium; } // 标题元素在引入 500 字重时
你会发现,无论是否使用相同名称,font-weight 的值都必须要与实际的字体字重文件匹配。若使用不同的字体名称,一方面增加代码工作量,另一方面还不易解读。因此,通过两个字重的使用方式,如果从便于管理的角度来看,情况一更为方便。
你会发现很多引入字体的文件都会标注这个属性,它的作用是在没有加载出字体前,优先加载本地字体进行渲染,避免网页出现空屏。若您想了解关于该部分的研究资料及加载字体所带来的影响,推荐您查看该文章《知乎:一种减少字体加载影响的新方法:CSS 字体描述符(译)》
当你引入官方的 css 字体链接后,有些文件里的一个 unicode-range 属性引起了你的注意,这个属性的作用是规定不同的字符加载不同字符集文件。通俗讲我们会把一个字体分成多个字符集,然后按需加载。例如一个页面只有 500 个字,但是这 500 个字恰好都在一个字符集里面,那么其他的字符集就不需要加载,换句话说就不需要加载整个字体文件,因此节省了流量和优化了加载速度。
使用该优化方式的上述链接中有:思源黑体(谷歌)、小米字体(小米)、鸿蒙字体(B 站)、华康金刚黑(字节跳动)
本文一律使用 woff2 字体格式,在如今浏览器趋于 Chromium 内核的潮流下,作为个人站点可以不需要考虑旧版本浏览器的兼容性。若您想了解其他字体格式,推荐您查看《知乎:关于字体格式》
就 windows 上的清晰效果而言,无论你使用何种字体,都没有在 windows 经过特殊优化的微软雅黑更好。如今当你在 windows 安装苹方字体后,你会发现苹方字体的显示效果也十分漂亮,这是因为科技的进步使得显示器分辨率越来越清晰。所以就算使用没有在 Windows 经过特殊优化的字体,也会在 Windows 上大放异彩。