BrowserView has been deprecated since Electron 30 and is replaced by WebContentView. Thankfully, migrating is fairly painless.
BrowserView 自 Electron 30 起已被弃用,取而代之的是 WebContentView 。值得庆幸的是,迁移过程非常简单。

阅读全文 »

提取图标

import os
import ctypes
from ctypes import wintypes
import win32gui
from PIL import Image


def hbitmap_to_pillow(hbitmap):
"""
将 HBITMAP 转换为 Pillow Image(兼容新版 pywin32)
"""
# 确保 hbitmap 是 int 类型
hbitmap = int(hbitmap)

# 定义 BITMAP 结构
class BITMAP(ctypes.Structure):
_fields_ = [
("bmType", wintypes.LONG),
("bmWidth", wintypes.LONG),
("bmHeight", wintypes.LONG),
("bmWidthBytes", wintypes.LONG),
("bmPlanes", wintypes.WORD),
("bmBitsPixel", wintypes.WORD),
("bmBits", ctypes.c_void_p),
]

bmp = BITMAP()
ctypes.windll.gdi32.GetObjectW(hbitmap, ctypes.sizeof(bmp), ctypes.byref(bmp))

width, height = bmp.bmWidth, bmp.bmHeight
if width == 0 or height == 0:
raise ValueError("位图尺寸无效")

# 获取像素数据
total_bytes = width * height * 4
buffer = ctypes.create_string_buffer(total_bytes)
res = ctypes.windll.gdi32.GetBitmapBits(hbitmap, total_bytes, buffer)
if res == 0:
raise ctypes.WinError()

img = Image.frombuffer("RGBA", (width, height), buffer, "raw", "BGRA", 0, 1)
return img


def save_icon(hicon, filename):
"""
将 HICON 保存为 .ico 文件
"""
try:
icon_info = win32gui.GetIconInfo(hicon)
hbmColor = icon_info[4]

if not hbmColor:
raise ValueError("未获取到有效的 HBITMAP 颜色句柄")

img = hbitmap_to_pillow(hbmColor)
img.save(filename, format="ICO")

except Exception as e:
print(f"[!] 保存图标失败: {filename} - {e}")


def extract_icons(dll_path, output_dir):
"""
从 DLL 或 EXE 文件中提取所有图标
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)

total_icons = win32gui.ExtractIconEx(dll_path, -1)
print(f"[+] 检测到 {total_icons} 个图标")

for i in range(total_icons):
large, small = win32gui.ExtractIconEx(dll_path, i)
if large:
filename = os.path.join(output_dir, f"icon_{i}.ico")
save_icon(large[0], filename)
win32gui.DestroyIcon(large[0])
print(f"[+] 已保存: {filename}")
if small:
win32gui.DestroyIcon(small[0])

print("[✓] 图标提取完成!")


if __name__ == "__main__":
dll_path = r"C:\Windows\System32\shell32.dll"
output_dir = r".\extracted_icons"

extract_icons(dll_path, output_dir)

合并图标为一张图片

import os
from PIL import Image, ImageDraw, ImageFont


def generate_icon_preview(
input_dir, output_path, icons_per_row=10, icon_size=64, padding=20, font_size=16
):
"""
将目录中的所有 .ico 文件按行排列,并在右侧显示文件名,输出为一张 PNG 图片
"""
# 获取所有 ico 文件并按名称排序
files = sorted([f for f in os.listdir(input_dir) if f.lower().endswith(".ico")])
if not files:
print("[!] 未找到任何 .ico 文件")
return

# 尝试加载系统字体
try:
font = ImageFont.truetype("arial.ttf", font_size)
except:
font = ImageFont.load_default()

# 计算布局尺寸
rows = (len(files) + icons_per_row - 1) // icons_per_row
text_width = 150 # 右侧文字区宽度
cell_width = icon_size + text_width + padding
cell_height = icon_size + padding
img_width = icons_per_row * cell_width + padding
img_height = rows * cell_height + padding

# 创建空白背景
preview = Image.new("RGBA", (img_width, img_height), (255, 255, 255, 255))
draw = ImageDraw.Draw(preview)

for idx, filename in enumerate(files):
row = idx // icons_per_row
col = idx % icons_per_row

x = padding + col * cell_width
y = padding + row * cell_height

try:
icon_path = os.path.join(input_dir, filename)
icon_name = os.path.splitext(filename)[0]
icon = Image.open(icon_path).convert("RGBA")

# 统一缩放尺寸
icon = icon.resize((icon_size, icon_size), Image.LANCZOS)

# 绘制图标
preview.paste(icon, (x, y), icon)

# 绘制文字(文件名)
text_x = x + icon_size + 8
text_y = y + (icon_size - font_size) // 2
draw.text((text_x, text_y), icon_name, fill=(0, 0, 0), font=font)
except Exception as e:
print(f"[!] 无法加载 {filename}: {e}")

preview.save(output_path, "PNG")
print(f"[✓] 已生成图标预览图: {output_path}")


if __name__ == "__main__":
input_dir = r".\extracted_icons"
output_path = r".\icons_preview.png"

generate_icon_preview(input_dir, output_path)

原文地址:https://zhidao.baidu.com/question/1574420781713951380.html

这里也有人看《滴天髓》,比较难得啊。现代人学命理都急功近利,不看研读古书。

不过《滴》的用字还算比较白话了,况且有任铁樵的注解,亦算易读。 “似”就是“类似”的意思。可重点不在“似”字,其实无须强记“似什么”,它只不过说明旺者喜泄,旺极则从。 举个例子:木旺,喜用食伤(火)泄,是为木火通明。所以说木旺时,性质类似旺金。而当木旺极之时,用《滴》的话则是“可顺而不可逆”,必须从木。从木,则喜用水生,所以性质类似火。同理:火旺以土泄,从火用木;土旺以金泄,从土用火;金旺以水泄,从金用土;水旺以木泄,从木用水。 反之,太衰弱则从强(如从财、从官)。

但我觉得他的描述也太笼统:太弱则用官杀,而弱极则用食伤。然则它所举例子也只是一些特例,反而感到与从格吻合。下面也以它的例子为例子: 乙丑 甲申 甲申 辛未,书中判断“木太衰”,故此似水,用金。而你只要认真看一看,就发觉此造金当令而旺,因而火和木都属于犯旺,如《滴》讲“可顺而不可逆”,所以走南方运和东方运都是恶运。 又一造:己巳 己巳 乙酉 丙戌,书中判断“木衰极者似土也”。其实格局土旺而从土,故此火为用,见木克土则是犯旺破格。 从以上两例子,可见它说“太衰”是指官杀重而身弱,“衰极”则是财重而身轻,所以从官杀用官,从财用食伤。书下面的例子皆如此,而并没有找到“太衰”而官杀不重者,或“衰极”而财官不厚者。 又例如:辛巳 丁酉 丁酉 辛丑,书中认为“火太衰似木”,那么应该用水。而他后面说顺遂的大运,如巳运、辰运,都是合拱金(巳酉丑三合,辰酉合),虽然都透水,但水以金为根,秋天命造又宜金白水清,所以主要原因还是金成局。

由此可见,它说“似”什么并无太大意义,无论太旺用食伤、旺极用印、太衰用官杀、衰极用食伤,归结也是那一句话“可顺而不可逆”。当自身五行旺则以自身[生序]为用,而其他某一两个五行太旺则以自身[克序]为用,仅此而已。 当然,从格或顺逆判断之余,也可以考虑一些调候或者通关等因素。例如刚才火衰一例,用水则金可泄秀,亦为美格。又例如冬水旺极,局中有一点火,要不就以合火的[辛]或[壬]为用,要不则取木为用作通关之意。都应该灵活运用的,并非死记一些口诀。 尤其《滴》上部名“通神”,以介绍一些基本原则为主,这些原则也不是死道理,在后面“六亲论”里许多例子是很灵活的。就好似学物理有很多公式,需要学习什么时候用什么公式,因为公式是有适用范围,例如非电阻性用电器则不能使用安培定律计算功率。故此,不清楚各公式的适用范围,仅记背所有物理公式,则发现其实公式与公式之间也是矛盾的。因此,最重要还是一些旺衰、调候、顺逆的基本原则,从这些原则归纳出来的口诀我认为并不重要。况且死记口诀也太没效率了,正如它不解释为何木旺会似金,等于给你一条公式却不告诉你公式的推导过程,更没有公式的适用范围。亦好似古相书认为女子有鼻节克夫,然而不告诉你为何刑克。现代相学就解释有鼻节的人比较自我、上进、有侵略性,这种女人在古代自然不是良妇,但现代男女有各自事业也就灾忌化小,若再配一个无主见又迁就老婆的男人,更是绝配,故此不可妄论有鼻节克夫。所谓学而不思则惘,阅读时应该思考书本内容背后的道理,否则便迷茫。

以上都是我自己思考和(给人论命时)验证的结果,不敢说一定正确,只是让你有个参考,其实你自己也可以想想究竟它的道理在哪里。否则死读书就失却读书的乐趣了。