kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

window 内存分析工具RAMMap

https://learn.microsoft.com/zh-hk/sysinternals/downloads/rammap

RAMMap 是微软 Sysinternals 团队开发的高级物理内存分析工具,可通过 微软官方下载页面 免费获取 。

核心功能与用途

内存深度可视化分析:将物理内存按 13 种使用类型(如进程私有内存、映射文件、内核池等)和 8 种内存状态(活跃、备用、已修改等)进行交叉分析,清晰展示每 MB 内存的占用情况 。

内存问题诊断:帮助识别系统文件缓存占用过高、应用程序内存泄漏、内核驱动内存占用等性能问题,Windows 内核团队和系统管理员常用此工具进行内存调优 。

内存清理功能:支持手动释放备用内存和已修改内存,在内存紧张时紧急腾出空间 。

Python三种标准输出重定向方法

https://developer.aliyun.com/article/1541306

Python 提供了标准库中的 sys.stdout 对象来代表标准输出。如果我们想将输出重定向到其他位置,例如内存、文件或自定义类,我们可以通过一些技巧来实现。

1. 重定向到内存

要将输出重定向到内存,我们可以使用 StringIO 模块。下面是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
from io import StringIO
# 创建一个字符串缓冲区来替代默认的标准输出
buffer = StringIO()
sys.stdout = buffer
# 在这里执行需要输出的代码
print("Hello, World!")
print("This is a test.")
# 获取重定向后的内容
output = buffer.getvalue()
# 还原标准输出
sys.stdout = sys.__stdout__
# 打印重定向后的结果
print(output)

在上面的示例中,我们首先创建了一个 StringIO 对象 buffer,然后将 sys.stdout 重定向到该对象。接着,我们执行一些输出操作,并使用 getvalue() 方法获取重定向后的内容。最后,我们还原标准输出,并打印出重定向后的结果。

2. 重定向到文件

如果我们想将输出重定向到文件,可以使用 sys.stdout 对象和文件操作符。下面是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
import sys
# 打开一个文件以写入输出
with open("output.txt", "w") as f:
	# 保存原来的标准输出
	original_stdout = sys.stdout
	# 重定向标准输出到文件
	sys.stdout = f
	# 在这里执行需要输出的代码
	print("Hello, World!")
	print("This is a test.")
	# 还原标准输出
	sys.stdout = original_stdout

在上面的示例中,我们首先打开一个文件,在 “w” 模式下用于写入输出内容。接着,我们保存了原来的标准输出对象 sys.stdout,并将其重定向到文件 f。然后,我们执行一些输出操作,并还原标准输出。

3. 重定向到自定义类

如果我们想将输出重定向到自定义的类中,可以创建一个类,并覆盖该类的 write() 方法,使其接收要输出的内容。下面是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
import io
class CustomWriter(io.TextIOBase):
	def __init__(self):
		self.content = ""
	def write(self, text):
		self.content += text
# 创建一个自定义的输出写入器
custom_writer = CustomWriter()
# 保存原来的标准输出
original_stdout = sys.stdout
# 重定向标准输出到自定义的写入器
sys.stdout = custom_writer
# 在这里执行需要输出的代码
print("Hello, World!")
print("This is a test.")
# 还原标准输出
sys.stdout = original_stdout
# 打印重定向后的结果
print(custom_writer.content)

在上面的示例中,我们首先创建了一个自定义类 CustomWriter,需要继承io.TextIOBase。该类具有一个 write() 方法用于接收输出内容。接着,我们创建一个自定义的输出写入器 custom_writer,并将其赋值给 sys.stdout,以将输出重定向到该写入器。然后,我们执行一些输出操作,并最后还原标准输出。

python用winreg读取注册表

https://cloud.tencent.com/developer/article/1910137

https://docs.python.org/zh-cn/3.14/library/winreg.html

注册表中常用的数据类型有:

1
2
3
4
REG_SZ:字符串数据的主要类型,用于存储固定长度的字符串或其他短文本值。我们在实际程序中常用这种数据类型,如果要保存布尔值时,将它表示成0或1。
REG_BINARY:用于存储二进制数据。
REGEXPANDSZ:可扩展的字符串值,可以保存在运行时才解析的系统变量。
REGMULTISZ:以数组的格式保存多个文本字符串,每个字符串"元素"都以null字符结束。

检索键值操作

1
2
3
4
5
6
7
8
winreg.QueryInfoKey(key) 
以元组形式返回键的信息

winreg.QueryValue(key, sub_key) 
以字符串形式检索键的未命名值

winreg.QueryValueEx(key, value_name) 
检索与打开注册表项关联的指定值名称的类型和数据

其他操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
winreg.EnumKey(key, index) 
枚举打开注册表的键

winreg.EnumValue(key, index) 
枚举打开注册表项的值

winreg.OpenKey(key, subkey,sam=KEYREAD) 
打开指定键

winreg.FlushKey(key) 
刷新注册表

winreg.LoadKey(key, subkey, filename) 
在指定键下创建一个子键,并将注册信息从指定文件存储到该子键中

样例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import winreg
import json
import datetime
import sys
import http.client
import requests
import os
import socket
import platform

def listreg(dd, ddd, parr = []):
	js = dict();
	print(ddd)
	try:
		key = winreg.OpenKey(dd, ddd)
		# print(key)

	
		v1, v2, v3 = winreg.QueryInfoKey(key)
		print(v1, v2, v3)
		js['k'] = v1
		js['v'] = v2
		js['t'] = v3

		k = 0
		kr = dict()
		while k < v1:
			w1 = winreg.EnumKey(key, k)
			print(w1)
			kr[k] = w1
			k = k + 1
		js['kv'] = kr

		k = 0
		kr = dict()
		while k < v2:
			w1, w2, w3 = winreg.EnumValue(key, k)
			if len(parr) != 0 and w1 not in parr:
				k = k + 1
				continue
			if 'BITMAP' in w1:
				k = k + 1
				continue
			if w3 == 3:  # REG_BINARY
				pp = ""
				for cc in w2:
					# print(hex(cc), end=" ")
					pp = pp + str(hex(cc)) + " "
				w2 = pp
				# print("")
			print(w1, "\t", w2, "\t", w3)
			kr[k] = [w1, w2, w3]
			k = k + 1
		js['vv'] = kr 
		print("")
		return js
	except:
		js['t'] = 'except'
		return js

tk = r'SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient'
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, tk, 0, winreg.KEY_WRITE)
r = winreg.SetValueEx(key, 'SpecialPollInterval', 0, winreg.REG_DWORD, 3600)

#os.system('net stop w32time > nul')
os.system('net start w32time > nul')
os.system('w32tm /resync /force > nul')

tk = r'SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient'
js1[tk] = listreg(winreg.HKEY_LOCAL_MACHINE, tk, ['Enabled', 'SpecialPollInterval'])
tk = r'SYSTEM\CurrentControlSet\Services\W32Time\Parameters'
js1[tk] = listreg(winreg.HKEY_LOCAL_MACHINE, tk, ['NtpServer'])

用户

HKEY_CURRENT_USER 只能获取当前用户信息

HKEY_USERS 要获取其他用户信息得读取,要先从 SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 读取用户信息

HKEY_LOCAL_MACHINE 设备信息

pdf的默认打开方式

1
2
3
HKEY_CURRENT_USER

Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\OpenWithList

默认打印机

1
2
3
4
HKEY_CURRENT_USER

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
中Devide

python如何读取安装的软件

https://www.cnblogs.com/warrior-tian/p/12688241.html

1
2
3
HKEY_LOCAL_MACHINE

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

注册表 usb设备列表

1
2
3
4
5
在注册表里查看USB设备列表,主要看这几个路径:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR(存储类设备)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB(所有USB设备)。