mirror of
https://github.com/ayflying/p2p.git
synced 2026-03-04 17:29:22 +00:00
增加dht的去中心化储存
This commit is contained in:
79
build/anjian/main.go
Normal file
79
build/anjian/main.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"time"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// 定义Windows API所需的结构体和常量(对应SendInput函数参数)
|
||||
const (
|
||||
INPUT_MOUSE = 0x0000 // 输入类型:鼠标
|
||||
MOUSEEVENTF_LEFTDOWN = 0x0002 // 左键按下
|
||||
MOUSEEVENTF_LEFTUP = 0x0004 // 左键释放
|
||||
)
|
||||
|
||||
// INPUT结构体:SendInput的输入参数
|
||||
type INPUT struct {
|
||||
Type uint32
|
||||
Mi MOUSEINPUT
|
||||
}
|
||||
|
||||
// MOUSEINPUT结构体:鼠标输入详情
|
||||
type MOUSEINPUT struct {
|
||||
Dx int32
|
||||
Dy int32
|
||||
MouseData uint32
|
||||
DwFlags uint32
|
||||
Time uint32
|
||||
DwExtraInfo uintptr
|
||||
}
|
||||
|
||||
func main() {
|
||||
// 加载user32.dll并获取SendInput函数地址
|
||||
user32, err := syscall.LoadLibrary("user32.dll")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer syscall.FreeLibrary(user32)
|
||||
|
||||
sendInputProc, err := syscall.GetProcAddress(user32, "SendInput")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// 定义一次完整点击的输入(按下+释放)
|
||||
inputs := []INPUT{
|
||||
{
|
||||
Type: INPUT_MOUSE,
|
||||
Mi: MOUSEINPUT{
|
||||
DwFlags: MOUSEEVENTF_LEFTDOWN, // 左键按下
|
||||
},
|
||||
},
|
||||
{
|
||||
Type: INPUT_MOUSE,
|
||||
Mi: MOUSEINPUT{
|
||||
DwFlags: MOUSEEVENTF_LEFTUP, // 左键释放
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// 循环执行1000次点击,间隔10毫秒
|
||||
for i := 0; i < 1000; i++ {
|
||||
// 调用SendInput发送鼠标事件(参数:输入数量、输入数组指针、单个输入大小)
|
||||
var args []uintptr
|
||||
args = append(args, uintptr(len(inputs)))
|
||||
args = append(args, uintptr(unsafe.Pointer(&inputs[0])))
|
||||
args = append(args, uintptr(unsafe.Sizeof(INPUT{})))
|
||||
|
||||
ret, _, _ := syscall.SyscallN(sendInputProc, args...)
|
||||
if ret == 0 {
|
||||
panic("发送鼠标事件失败")
|
||||
}
|
||||
|
||||
// 间隔10毫秒
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
|
||||
println("已完成1000次鼠标点击")
|
||||
}
|
||||
50
build/ico/main.go
Normal file
50
build/ico/main.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"image"
|
||||
"os"
|
||||
|
||||
"github.com/icza/icox" // 替换为icox库
|
||||
"github.com/nfnt/resize"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 1. 读取PNG文件
|
||||
inputPath := "manifest/images/logo.png" // 输入PNG路径
|
||||
outputPath := "manifest/images/favicon.ico" // 输出ICO路径
|
||||
|
||||
pngFile, err := os.Open(inputPath)
|
||||
if err != nil {
|
||||
panic("无法打开PNG文件: " + err.Error())
|
||||
}
|
||||
defer pngFile.Close()
|
||||
|
||||
// 2. 解码PNG为image.Image对象
|
||||
img, _, err := image.Decode(pngFile)
|
||||
if err != nil {
|
||||
panic("PNG解码失败: " + err.Error())
|
||||
}
|
||||
|
||||
// 3. 定义ICO需要包含的尺寸(常见尺寸)
|
||||
sizes := []uint{16, 32, 64, 128} // 可根据需求添加更多尺寸
|
||||
var icoImages []image.Image
|
||||
|
||||
// 4. 缩放图像到每个目标尺寸并收集
|
||||
for _, size := range sizes {
|
||||
// 使用Lanczos3算法缩放(高质量)
|
||||
resized := resize.Resize(size, size, img, resize.Lanczos3)
|
||||
icoImages = append(icoImages, resized)
|
||||
}
|
||||
|
||||
// 5. 编码为ICO并写入文件(关键修改:使用icox.Encode)
|
||||
icoFile, err := os.Create(outputPath)
|
||||
if err != nil {
|
||||
panic("无法创建ICO文件: " + err.Error())
|
||||
}
|
||||
defer icoFile.Close()
|
||||
|
||||
// icox.Encode直接支持多尺寸切片[]image.Image
|
||||
if err := icox.Encode(icoFile, icoImages); err != nil {
|
||||
panic("ICO编码失败: " + err.Error())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user