mirror of
https://github.com/zs-yg/kortapp-z.git
synced 2025-12-06 16:10:42 +08:00
Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70534c06db | ||
|
|
9e11e66e03 | ||
|
|
4b8283574a | ||
|
|
de48557786 | ||
|
|
aa739e8d9e | ||
|
|
924684918c | ||
|
|
76bb4d1b50 | ||
|
|
94fafdb3ed | ||
|
|
b09175550e | ||
|
|
c3b5e3fe66 | ||
|
|
1cad6573e2 | ||
|
|
d01b7a4b5a | ||
|
|
7d393aa817 | ||
|
|
f28ec55eaf | ||
|
|
cbf4a2bc2d | ||
|
|
9269032315 | ||
|
|
3c6117933c | ||
|
|
59c6ae623e | ||
|
|
6ff1506bc2 | ||
|
|
b8b8b03713 | ||
|
|
104aba01da | ||
|
|
a93e4d67f4 | ||
|
|
d1c62f4488 | ||
|
|
f4f4d86faa | ||
|
|
4c13fe0008 | ||
|
|
6a931e9a85 | ||
|
|
916c944a90 | ||
|
|
996d73f9fe |
@@ -51,7 +51,7 @@ namespace AppStore
|
|||||||
|
|
||||||
// 初始化并添加应用信息
|
// 初始化并添加应用信息
|
||||||
infoLabel = new Label();
|
infoLabel = new Label();
|
||||||
infoLabel.Text = "kortapp-z\n版本: 1.3.3\n作者: zs-yg\n一个简单、开源的应用商店\nkortapp-z是完全免费\n基于.NET8和C/C++的软件";
|
infoLabel.Text = "kortapp-z\n版本: 1.3.7\n作者: zs-yg\n一个简单、开源的应用商店\nkortapp-z是完全免费\n基于.NET8和C/C++的软件";
|
||||||
infoLabel.Font = new Font("Microsoft YaHei", 12);
|
infoLabel.Font = new Font("Microsoft YaHei", 12);
|
||||||
infoLabel.AutoSize = false;
|
infoLabel.AutoSize = false;
|
||||||
infoLabel.Width = 300;
|
infoLabel.Width = 300;
|
||||||
@@ -125,7 +125,7 @@ namespace AppStore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保留原AboutForm作为容器(可选)
|
// 保留原AboutForm作为容器
|
||||||
public class AboutForm : Form
|
public class AboutForm : Form
|
||||||
{
|
{
|
||||||
public AboutForm()
|
public AboutForm()
|
||||||
|
|||||||
17
AppCard.cs
17
AppCard.cs
@@ -15,6 +15,7 @@ namespace AppStore
|
|||||||
private Label nameLabel;
|
private Label nameLabel;
|
||||||
private Panel namePanel;
|
private Panel namePanel;
|
||||||
private Button downloadBtn;
|
private Button downloadBtn;
|
||||||
|
private ToolTip? toolTip;
|
||||||
private Color borderColor = SystemColors.ControlDark;
|
private Color borderColor = SystemColors.ControlDark;
|
||||||
private static readonly ConcurrentDictionary<string, System.Drawing.Drawing2D.GraphicsPath> PathCache =
|
private static readonly ConcurrentDictionary<string, System.Drawing.Drawing2D.GraphicsPath> PathCache =
|
||||||
new ConcurrentDictionary<string, System.Drawing.Drawing2D.GraphicsPath>();
|
new ConcurrentDictionary<string, System.Drawing.Drawing2D.GraphicsPath>();
|
||||||
@@ -22,6 +23,7 @@ namespace AppStore
|
|||||||
public string AppName { get; set; } = string.Empty;
|
public string AppName { get; set; } = string.Empty;
|
||||||
public Image AppIcon { get; set; } = SystemIcons.Application.ToBitmap();
|
public Image AppIcon { get; set; } = SystemIcons.Application.ToBitmap();
|
||||||
public string DownloadUrl { get; set; } = string.Empty;
|
public string DownloadUrl { get; set; } = string.Empty;
|
||||||
|
public string Description { get; set; } = string.Empty;
|
||||||
public bool ShowDownloadButton { get; set; } = true;
|
public bool ShowDownloadButton { get; set; } = true;
|
||||||
|
|
||||||
public AppCard()
|
public AppCard()
|
||||||
@@ -126,6 +128,13 @@ namespace AppStore
|
|||||||
this.Controls.Add(namePanel);
|
this.Controls.Add(namePanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 初始化ToolTip控件
|
||||||
|
toolTip = new ToolTip();
|
||||||
|
toolTip.AutoPopDelay = 5000;
|
||||||
|
toolTip.InitialDelay = 500;
|
||||||
|
toolTip.ReshowDelay = 500;
|
||||||
|
toolTip.ShowAlways = true;
|
||||||
|
|
||||||
// 下载按钮 - 添加null检查
|
// 下载按钮 - 添加null检查
|
||||||
if (downloadBtn != null)
|
if (downloadBtn != null)
|
||||||
{
|
{
|
||||||
@@ -144,6 +153,10 @@ namespace AppStore
|
|||||||
if (downloadBtn != null)
|
if (downloadBtn != null)
|
||||||
{
|
{
|
||||||
downloadBtn.BackColor = Color.FromArgb(0, 150, 255);
|
downloadBtn.BackColor = Color.FromArgb(0, 150, 255);
|
||||||
|
if (!string.IsNullOrEmpty(Description))
|
||||||
|
{
|
||||||
|
toolTip.SetToolTip(downloadBtn, Description);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -373,7 +386,7 @@ namespace AppStore
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var safePath = path ?? CalculatePathFallback(Width, Height, 10);
|
var safePath = path ?? CalculatePathFallback(Width, Height, 10);
|
||||||
// 更严格的null检查,包括路径和控件状态
|
// 更严格的null检查,包括路径和控件状态
|
||||||
if (safePath != null &&
|
if (safePath != null &&
|
||||||
safePath.PointCount > 0 &&
|
safePath.PointCount > 0 &&
|
||||||
this.IsHandleCreated &&
|
this.IsHandleCreated &&
|
||||||
@@ -450,7 +463,7 @@ namespace AppStore
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 更严格的null检查
|
// 更严格的null检查
|
||||||
// 更严格的null检查,包括DownloadManager.Instance和其方法
|
// 更严格的null检查,包括DownloadManager.Instance和其方法
|
||||||
// 全面的null和状态检查
|
// 全面的null和状态检查
|
||||||
var downloadManager = DownloadManager.Instance;
|
var downloadManager = DownloadManager.Instance;
|
||||||
if (sender == null || e == null ||
|
if (sender == null || e == null ||
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
@@ -14,6 +15,7 @@ namespace AppStore
|
|||||||
public string FileName { get; set; } = string.Empty;
|
public string FileName { get; set; } = string.Empty;
|
||||||
public int Progress { get; set; }
|
public int Progress { get; set; }
|
||||||
public string Status { get; set; } = string.Empty;
|
public string Status { get; set; } = string.Empty;
|
||||||
|
public Process? DownloadProcess { get; set; }
|
||||||
|
|
||||||
public DownloadItem()
|
public DownloadItem()
|
||||||
{
|
{
|
||||||
@@ -123,9 +125,26 @@ namespace AppStore
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// 1. 先取消下载
|
||||||
DownloadManager.Instance.CancelDownload(this);
|
DownloadManager.Instance.CancelDownload(this);
|
||||||
|
|
||||||
|
// 2. 更新状态为已取消
|
||||||
Status = "已取消";
|
Status = "已取消";
|
||||||
UpdateDisplay();
|
UpdateDisplay();
|
||||||
|
|
||||||
|
// 3. 延迟100ms后移除控件,确保UI更新完成
|
||||||
|
var timer = new System.Windows.Forms.Timer { Interval = 100 };
|
||||||
|
timer.Tick += (s, args) =>
|
||||||
|
{
|
||||||
|
timer.Stop();
|
||||||
|
timer.Dispose();
|
||||||
|
if (this.Parent != null)
|
||||||
|
{
|
||||||
|
this.Parent.Controls.Remove(this);
|
||||||
|
this.Dispose();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
timer.Start();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
1012
DownloadManager.cs
1012
DownloadManager.cs
File diff suppressed because it is too large
Load Diff
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2025 zsyg
|
Copyright (c) 2025 zs-yg
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
3705
MainForm.cs
3705
MainForm.cs
File diff suppressed because it is too large
Load Diff
230
README.md
230
README.md
@@ -1,114 +1,116 @@
|
|||||||
# Kortapp-z - Windows应用商店 --主张软件开源、免费,拒绝广告
|
# Kortapp-z - Windows应用商店 --主张软件开源、免费,拒绝广告
|
||||||
|
|
||||||
小立一个flag:从不接受广告,不停更新
|
小立一个flag:从不接受广告,不停更新
|
||||||
|
|
||||||
## 项目开源行为
|
## 项目开源行为
|
||||||
|
|
||||||
1. 项目代码开源,允许任何人使用、修改、分发、商用,但必须注明原作者。
|
1. 项目代码开源,允许任何人使用、修改、分发、商用,但必须注明原作者。
|
||||||
2. 项目图标、截图等资源开源,允许任何人使用、修改、分发、商用,但必须注明原作者。
|
2. 项目图标、截图等资源开源,允许任何人使用、修改、分发、商用,但必须注明原作者。
|
||||||
3. 项目的任何衍生品(包括但不限于网站、APP、插件等)必须遵循以上开源协议。
|
3. 项目的任何衍生品(包括但不限于网站、APP、插件等)必须遵循以上开源协议。
|
||||||
4. 项目不接受任何形式的广告,不得在任何地方投放广告。
|
4. 项目不接受任何形式的广告,不得在任何地方投放广告。
|
||||||
5. 项目不接受任何形式的捐赠、赞助
|
5. 项目不接受任何形式的捐赠、赞助
|
||||||
6. 项目可以进行PR,欢迎任何形式的PR,不提交issue也可以
|
6. 项目可以进行PR,欢迎任何形式的PR,不提交issue也可以
|
||||||
7. 本项目可以PR一些你自己的项目,如果star数量不到1k,都会被删除
|
7. 本项目可以PR一些你自己的项目,如果star数量不到1k,都会被删除
|
||||||
|
|
||||||
## 项目简介
|
## 项目简介
|
||||||
|
|
||||||
一个简单的Windows应用商店应用,提供软件下载和管理功能。
|
一个简单的Windows应用商店应用,提供软件下载和管理功能。
|
||||||
提供软件管理、下载管理、内置工具使用等功能
|
提供软件管理、下载管理、内置工具使用等功能
|
||||||
|
|
||||||
## 功能特点
|
## 功能特点
|
||||||
|
|
||||||
- 简洁的软件下载界面
|
- 简洁的软件下载界面
|
||||||
- 下载进度管理
|
- 下载进度管理
|
||||||
- 支持后台下载
|
- 支持后台下载
|
||||||
- 美观的应用卡片展示
|
- 美观的应用卡片展示
|
||||||
- 功能化、结构化的代码处理
|
- 功能化、结构化的代码处理
|
||||||
|
|
||||||
## 构建与打包
|
## 构建与打包
|
||||||
|
|
||||||
### 系统要求
|
### 系统要求
|
||||||
- .NET 8.0 SDK
|
- .NET 8.0 SDK
|
||||||
- Windows 10/11
|
- Windows 10/11
|
||||||
|
|
||||||
### 打包指令
|
### 打包指令
|
||||||
|
|
||||||
|
|
||||||
#### 32位版本
|
#### 32位版本
|
||||||
```bash
|
```bash
|
||||||
dotnet publish AppStore.csproj -c Release -r win-x86 --self-contained false /p:Optimize=true /p:DebugType=None
|
dotnet publish AppStore.csproj -c Release -r win-x86 --self-contained false /p:Optimize=true /p:DebugType=None
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 64位版本
|
#### 64位版本
|
||||||
```bash
|
```bash
|
||||||
dotnet publish AppStore.csproj -c Release -r win-x64 --self-contained false /p:Optimize=true /p:DebugType=None
|
dotnet publish AppStore.csproj -c Release -r win-x64 --self-contained false /p:Optimize=true /p:DebugType=None
|
||||||
```
|
```
|
||||||
|
|
||||||
打包后的可执行文件将包含指定的应用程序图标,输出路径为:
|
打包后的可执行文件将包含指定的应用程序图标,输出路径为:
|
||||||
```
|
```
|
||||||
bin\Release\net8.0-windows\[platform]\publish
|
bin\Release\net8.0-windows\[platform]\publish
|
||||||
```
|
```
|
||||||
|
|
||||||
### 高级选项
|
### 高级选项
|
||||||
- 使用`--self-contained false`生成框架依赖包(默认)
|
- 使用`--self-contained false`生成框架依赖包(默认)
|
||||||
- 使用`/p:Optimize=true`启用代码优化(默认)
|
- 使用`/p:Optimize=true`启用代码优化(默认)
|
||||||
- 使用`/p:DebugType=None`禁用调试符号生成(默认)
|
- 使用`/p:DebugType=None`禁用调试符号生成(默认)
|
||||||
- 添加`-p:PublishTrimmed=true`可减小包体积(实验性)
|
- 添加`-p:PublishTrimmed=true`可减小包体积(实验性)
|
||||||
|
|
||||||
## 项目结构
|
## 项目结构
|
||||||
|
|
||||||
```
|
```
|
||||||
kortapp-z/
|
kortapp-z/
|
||||||
├── MainForm.cs # 主窗体逻辑
|
├── MainForm.cs # 主窗体逻辑
|
||||||
├── DownloadManager.cs # 下载管理
|
├── DownloadManager.cs # 下载管理
|
||||||
├── AppCard.cs # 应用卡片控件
|
├── AppCard.cs # 应用卡片控件
|
||||||
├── DownloadItem.cs # 下载项控件
|
├── DownloadItem.cs # 下载项控件
|
||||||
├── img/ # 图片资源
|
├── img/ # 图片资源
|
||||||
│ ├── ico/ # 图标文件
|
│ ├── ico/ # 图标文件
|
||||||
│ └── png/ # 应用截图
|
│ └── png/ # 应用截图
|
||||||
└── resource/ # 资源文件
|
└── resource/ # 资源文件
|
||||||
└── aria2c.exe # 下载工具
|
└── aria2c.exe # 下载工具
|
||||||
```
|
```
|
||||||
|
|
||||||
## 运行要求
|
## 运行要求
|
||||||
|
|
||||||
- .NET 8.0运行时(如果使用框架依赖发布)
|
- .NET 8.0运行时(如果使用框架依赖发布)
|
||||||
- Windows 10或更高版本
|
- Windows 10或更高版本
|
||||||
|
|
||||||
## 许可证
|
## 许可证
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2025 zsyg
|
Copyright (c) 2025 zsyg
|
||||||
|
|
||||||
## 其他网站
|
## 其他网站
|
||||||
|
|
||||||
gitee镜像仓库:https://gitee.com/chr_super/kortapp-z (目前已经停止维护)
|
gitee镜像仓库:https://gitee.com/chr_super/kortapp-z (目前已经停止维护,仅镜像代码)
|
||||||
|
|
||||||
## 维护
|
sourceforge镜像仓库:https://sourceforge.net/projects/kortapp-z/ (提供releases镜像)
|
||||||
|
|
||||||
由于gitee我没怎么用,而且操作麻烦,gitee镜像将不会继续同步,有懂得人可以帮我搞下镜像吗,qq: 3872006562,也可以b站直接私信,我会在readme中鸣谢的,谢谢各位
|
## 维护
|
||||||
由于和Daye发生了矛盾,所以windowscleaner将永远不上架,我要自己努力
|
|
||||||
提示:由于github上传文件的限制,img/png/NET.png,请改名为.NET.png,否则程序可能出现无法预料的问题
|
由于gitee我没怎么用,而且操作麻烦,gitee镜像将不会继续同步,有懂得人可以帮我搞下镜像吗,qq: 3872006562,也可以b站直接私信,我会在readme中鸣谢的,谢谢各位
|
||||||
|
由于和Daye发生了矛盾,所以windowscleaner将永远不上架,我要自己努力
|
||||||
每一个人都可以通过PR添加属于自己的合法软件
|
提示:由于github上传文件的限制,img/png/NET.png,请改名为.NET.png,否则程序可能出现无法预料的问题
|
||||||
|
|
||||||
作者邮箱:
|
每一个人都可以通过PR添加属于自己的合法软件
|
||||||
```
|
|
||||||
3872006562@qq.com
|
作者邮箱:
|
||||||
```
|
```
|
||||||
|
3872006562@qq.com
|
||||||
作者qq号:
|
```
|
||||||
```
|
|
||||||
3872006562
|
作者qq号:
|
||||||
```
|
```
|
||||||
|
3872006562
|
||||||
qq群:
|
```
|
||||||
```
|
|
||||||
1043867176
|
qq群:
|
||||||
```
|
```
|
||||||
|
1043867176
|
||||||
b站账号:
|
```
|
||||||
```
|
|
||||||
Zayisynth
|
b站账号:
|
||||||
```
|
```
|
||||||
|
Zayisynth
|
||||||
|
```
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ namespace AppStore
|
|||||||
var jsonData = JsonSerializer.Deserialize<JsonElement>(jsonString);
|
var jsonData = JsonSerializer.Deserialize<JsonElement>(jsonString);
|
||||||
string customPath = jsonData.GetProperty("DownloadPath").GetString() ?? "";
|
string customPath = jsonData.GetProperty("DownloadPath").GetString() ?? "";
|
||||||
|
|
||||||
// 如果自定义路径有效则显示,否则显示默认路径
|
// 如果自定义路径有效则显示,否则显示默认路径
|
||||||
txtBox.Text = !string.IsNullOrWhiteSpace(customPath) ? customPath : defaultPath;
|
txtBox.Text = !string.IsNullOrWhiteSpace(customPath) ? customPath : defaultPath;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
首先,如果希望编译程序,那么必须安装.NET8.0 SDK
|
首先,如果希望编译程序,那么必须安装.NET8.0 SDK
|
||||||
下载链接:https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-8.0.411-windows-x64-installer
|
下载链接:https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-8.0.411-windows-x64-installer
|
||||||
|
|
||||||
使用一下指令编译
|
使用一下指令编译
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
如果希望运行,那么必须安装.NET8.0 SDK
|
如果希望运行,那么必须安装.NET8.0 SDK
|
||||||
|
|
||||||
下载链接:https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-8.0.411-windows-x64-installer
|
下载链接:https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-8.0.411-windows-x64-installer
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace AppStore
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
// 忽略错误,使用默认主题
|
// 忽略错误,使用默认主题
|
||||||
}
|
}
|
||||||
return ThemeMode.Light;
|
return ThemeMode.Light;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,49 +1,49 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="zh-CN">
|
<html lang="zh-CN">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>关于kortapp-z</title>
|
<title>关于kortapp-z</title>
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<h1>关于kortapp-z</h1>
|
<h1>关于kortapp-z</h1>
|
||||||
<p>了解我们的项目和团队</p>
|
<p>了解我们的项目和团队</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<section class="about-project">
|
<section class="about-project">
|
||||||
<h2>项目简介</h2>
|
<h2>项目简介</h2>
|
||||||
<p>kortapp-z是一个专为Windows系统设计的实用工具集合,旨在提供一站式的系统优化和管理解决方案。</p>
|
<p>kortapp-z是一个专为Windows系统设计的实用工具集合,旨在提供一站式的系统优化和管理解决方案。</p>
|
||||||
<p>项目始于2025年,由热爱效率工具的开发者创建。</p>
|
<p>项目始于2025年,由热爱效率工具的开发者创建。</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="team">
|
<section class="team">
|
||||||
<h2>开发团队</h2>
|
<h2>开发团队</h2>
|
||||||
<p>我们的团队由经验丰富的开发人员组成,专注于创建高质量的系统工具。</p>
|
<p>我们的团队由经验丰富的开发人员组成,专注于创建高质量的系统工具。</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>核心开发者: 1人</li>
|
<li>核心开发者: 1人</li>
|
||||||
<li>UI设计师: 1人</li>
|
<li>UI设计师: 1人</li>
|
||||||
<li>测试工程师: 1人</li>
|
<li>测试工程师: 1人</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="contact">
|
<section class="contact">
|
||||||
<h2>联系我们</h2>
|
<h2>联系我们</h2>
|
||||||
<p>如有任何问题或建议,欢迎通过GitHub提交issue或pull request。</p>
|
<p>如有任何问题或建议,欢迎通过GitHub提交issue或pull request。</p>
|
||||||
<a href="https://github.com/zs-yg/kortapp-z/issues" target="_blank">提交反馈</a>
|
<a href="https://github.com/zs-yg/kortapp-z/issues" target="_blank">提交反馈</a>
|
||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<nav>
|
<nav>
|
||||||
<a href="index.html">首页</a>
|
<a href="index.html">首页</a>
|
||||||
<a href="features.html">功能</a>
|
<a href="features.html">功能</a>
|
||||||
</nav>
|
</nav>
|
||||||
<p>© 2025 kortapp-z 团队</p>
|
<p>© 2025 kortapp-z 团队</p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script src="script.js"></script>
|
<script src="script.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,35 +1,49 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="zh-CN">
|
<html lang="zh-CN">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>kortapp-z功能详情</title>
|
<title>kortapp-z功能详情</title>
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<h1>kortapp-z功能详情</h1>
|
<h1>kortapp-z功能详情</h1>
|
||||||
<p>探索我们强大的工具集</p>
|
<p>探索我们强大的工具集</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<section class="feature-list">
|
<section class="feature-list">
|
||||||
<h2>核心功能</h2>
|
<h2>核心功能</h2>
|
||||||
|
|
||||||
<article class="feature">
|
<article class="feature">
|
||||||
<h3>目前没有什么东西,别看了,害羞(✿◡‿◡)
|
<h3>应用程序管理</h3>
|
||||||
</article>
|
<p>批量安装、卸载(目前没有)和更新应用程序(目前没有),管理启动项(目前没有)。</p>
|
||||||
</section>
|
<p>优势:集中管理所有应用,节省时间,避免系统臃肿。</p>
|
||||||
</main>
|
</article>
|
||||||
|
|
||||||
<footer>
|
<article class="feature">
|
||||||
<nav>
|
<h3>资源监控(之后可能在内置工具里有)</h3>
|
||||||
<a href="index.html">首页</a>
|
<p>实时监控CPU、内存、磁盘和网络使用情况。</p>
|
||||||
<a href="about.html">关于</a>
|
<p>优势:直观的图表展示,及时发现资源瓶颈。</p>
|
||||||
</nav>
|
</article>
|
||||||
<p>© 2025 kortapp-z 团队</p>
|
|
||||||
</footer>
|
<article class="feature">
|
||||||
|
<h3>文件管理(之后可能在内置工具里有)</h3>
|
||||||
<script src="script.js"></script>
|
<p>高级文件搜索、批量重命名和快速文件分类。</p>
|
||||||
</body>
|
<p>优势:提升文件管理效率,支持正则表达式搜索。</p>
|
||||||
</html>
|
</article>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<nav>
|
||||||
|
<a href="index.html">首页</a>
|
||||||
|
<a href="about.html">关于</a>
|
||||||
|
</nav>
|
||||||
|
<p>© 2025 kortapp-z 团队</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|||||||
BIN
img/png/FreeMove.png
Normal file
BIN
img/png/FreeMove.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
BIN
img/png/Luanti.png
Normal file
BIN
img/png/Luanti.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
img/png/keycloak.png
Normal file
BIN
img/png/keycloak.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
@@ -1,8 +1,8 @@
|
|||||||
; 脚本由 Inno Setup 脚本向导生成。
|
; 脚本由 Inno Setup 脚本向导生成。
|
||||||
; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档!
|
; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档!
|
||||||
|
|
||||||
#define MyAppName "kortapp-z"
|
#define MyAppName "kortapp-z"
|
||||||
#define MyAppVersion "1.3.3"
|
#define MyAppVersion "1.3.7"
|
||||||
#define MyAppPublisher "zsyg"
|
#define MyAppPublisher "zsyg"
|
||||||
#define MyAppURL "https://github.com/zs-yg/kortapp-z"
|
#define MyAppURL "https://github.com/zs-yg/kortapp-z"
|
||||||
#define MyAppExeName "kortapp-z.exe"
|
#define MyAppExeName "kortapp-z.exe"
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
; 注意:AppId 的值唯一标识此应用程序。不要在其他应用程序的安装程序中使用相同的 AppId 值。
|
; 注意:AppId 的值唯一标识此应用程序。不要在其他应用程序的安装程序中使用相同的 AppId 值。
|
||||||
; (若要生成新的 GUID,请在 IDE 中单击 "工具|生成 GUID"。)
|
; (若要生成新的 GUID,请在 IDE 中单击 "工具|生成 GUID"。)
|
||||||
AppId={{8020EC01-6133-40BB-8B8B-0EB71E49696C}
|
AppId={{8020EC01-6133-40BB-8B8B-0EB71E49696C}
|
||||||
AppName={#MyAppName}
|
AppName={#MyAppName}
|
||||||
AppVersion={#MyAppVersion}
|
AppVersion={#MyAppVersion}
|
||||||
@@ -27,7 +27,7 @@ UninstallDisplayIcon={app}\{#MyAppExeName}
|
|||||||
; 除 Arm 上的 x64 和 Windows 11 之外的任何平台上。
|
; 除 Arm 上的 x64 和 Windows 11 之外的任何平台上。
|
||||||
ArchitecturesAllowed=x64compatible
|
ArchitecturesAllowed=x64compatible
|
||||||
; "ArchitecturesInstallIn64BitMode=x64compatible" 要求
|
; "ArchitecturesInstallIn64BitMode=x64compatible" 要求
|
||||||
; 安装可以在 x64 或 Arm 上的 Windows 11 上以“64 位模式”完成,
|
; 安装可以在 x64 或 Arm 上的 Windows 11 上以“64 位模式”完成,
|
||||||
; 这意味着它应该使用本机 64 位 Program Files 目录和
|
; 这意味着它应该使用本机 64 位 Program Files 目录和
|
||||||
; 注册表的 64 位视图。
|
; 注册表的 64 位视图。
|
||||||
ArchitecturesInstallIn64BitMode=x64compatible
|
ArchitecturesInstallIn64BitMode=x64compatible
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
; 脚本由 Inno Setup 脚本向导生成。
|
; 脚本由 Inno Setup 脚本向导生成。
|
||||||
; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档!
|
; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档!
|
||||||
|
|
||||||
#define MyAppName "kortapp-z"
|
#define MyAppName "kortapp-z"
|
||||||
#define MyAppVersion "1.3.3"
|
#define MyAppVersion "1.3.7"
|
||||||
#define MyAppPublisher "zsyg"
|
#define MyAppPublisher "zsyg"
|
||||||
#define MyAppURL "https://github.com/zs-yg/kortapp-z"
|
#define MyAppURL "https://github.com/zs-yg/kortapp-z"
|
||||||
#define MyAppExeName "kortapp-z.exe"
|
#define MyAppExeName "kortapp-z.exe"
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
; 注意:AppId 的值唯一标识此应用程序。不要在其他应用程序的安装程序中使用相同的 AppId 值。
|
; 注意:AppId 的值唯一标识此应用程序。不要在其他应用程序的安装程序中使用相同的 AppId 值。
|
||||||
; (若要生成新的 GUID,请在 IDE 中单击 "工具|生成 GUID"。)
|
; (若要生成新的 GUID,请在 IDE 中单击 "工具|生成 GUID"。)
|
||||||
AppId={{BF1944C3-CD0C-4119-A340-49C54961D48B}
|
AppId={{BF1944C3-CD0C-4119-A340-49C54961D48B}
|
||||||
AppName={#MyAppName}
|
AppName={#MyAppName}
|
||||||
AppVersion={#MyAppVersion}
|
AppVersion={#MyAppVersion}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
std::cout << "日志目录不存在,无需清理" << std::endl;
|
std::cout << "日志目录不存在,无需清理" << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,9 @@ find_library(AVIF_STATIC_LIB NAMES libavif.a PATHS ${AVIF_LIBRARY_DIRS})
|
|||||||
find_package(FLTK REQUIRED)
|
find_package(FLTK REQUIRED)
|
||||||
find_library(FLTK_STATIC_LIB NAMES libfltk.a PATHS ${FLTK_LIBRARY_DIRS})
|
find_library(FLTK_STATIC_LIB NAMES libfltk.a PATHS ${FLTK_LIBRARY_DIRS})
|
||||||
|
|
||||||
|
# 查找cairo导入库
|
||||||
|
find_library(CAIRO_IMPORT_LIB NAMES libcairo.dll.a PATHS "C:/msys64/ucrt64/lib")
|
||||||
|
|
||||||
# 查找其他依赖库
|
# 查找其他依赖库
|
||||||
find_library(JPEG_STATIC_LIB NAMES libjpeg.a PATHS ${MSYS2_LIB_DIR})
|
find_library(JPEG_STATIC_LIB NAMES libjpeg.a PATHS ${MSYS2_LIB_DIR})
|
||||||
find_library(ZLIB_STATIC_LIB NAMES libz.a PATHS ${MSYS2_LIB_DIR})
|
find_library(ZLIB_STATIC_LIB NAMES libz.a PATHS ${MSYS2_LIB_DIR})
|
||||||
@@ -44,7 +47,7 @@ find_library(RAV1E_STATIC_LIB NAMES librav1e.a PATHS ${MSYS2_LIB_DIR})
|
|||||||
find_library(DAV1D_STATIC_LIB NAMES libdav1d.a PATHS ${MSYS2_LIB_DIR})
|
find_library(DAV1D_STATIC_LIB NAMES libdav1d.a PATHS ${MSYS2_LIB_DIR})
|
||||||
|
|
||||||
# 包含头文件目录
|
# 包含头文件目录
|
||||||
include_directories(include ${TIFF_INCLUDE_DIRS} ${WEBP_INCLUDE_DIRS} ${FLTK_INCLUDE_DIRS} ${AVIF_INCLUDE_DIRS})
|
include_directories(include ${TIFF_INCLUDE_DIRS} ${WEBP_INCLUDE_DIRS} ${FLTK_INCLUDE_DIRS} ${AVIF_INCLUDE_DIRS} "C:/msys64/ucrt64/include/cairo")
|
||||||
|
|
||||||
# 收集所有源文件
|
# 收集所有源文件
|
||||||
file(GLOB SOURCES "src/*.cpp")
|
file(GLOB SOURCES "src/*.cpp")
|
||||||
@@ -55,7 +58,7 @@ add_executable(ImageFormatConverter WIN32 ${SOURCES})
|
|||||||
# 链接静态库
|
# 链接静态库
|
||||||
target_link_libraries(ImageFormatConverter
|
target_link_libraries(ImageFormatConverter
|
||||||
${TIFF_STATIC_LIB}
|
${TIFF_STATIC_LIB}
|
||||||
${WEBP_STATIC_LIB}
|
${WEBP_STATIC_LIB}
|
||||||
${FLTK_STATIC_LIB}
|
${FLTK_STATIC_LIB}
|
||||||
${JPEG_STATIC_LIB}
|
${JPEG_STATIC_LIB}
|
||||||
${ZLIB_STATIC_LIB}
|
${ZLIB_STATIC_LIB}
|
||||||
@@ -71,6 +74,9 @@ target_link_libraries(ImageFormatConverter
|
|||||||
${SVTAV1_ENC_STATIC_LIB}
|
${SVTAV1_ENC_STATIC_LIB}
|
||||||
${RAV1E_STATIC_LIB}
|
${RAV1E_STATIC_LIB}
|
||||||
${DAV1D_STATIC_LIB}
|
${DAV1D_STATIC_LIB}
|
||||||
|
${CAIRO_IMPORT_LIB}
|
||||||
|
"C:/msys64/ucrt64/lib/libcairo.a"
|
||||||
|
-lgdi32 -lmsimg32 # 添加Windows图形库
|
||||||
-lstdc++ -lgcc -lwinpthread -lcomctl32 -lole32 -luuid -lws2_32 -lntdll)
|
-lstdc++ -lgcc -lwinpthread -lcomctl32 -lole32 -luuid -lws2_32 -lntdll)
|
||||||
|
|
||||||
# 设置输出目录
|
# 设置输出目录
|
||||||
|
|||||||
@@ -272,6 +272,6 @@ void MainWindow::convert_cb(Fl_Widget* w, void* data) {
|
|||||||
if (success) {
|
if (success) {
|
||||||
fl_message("转换成功!");
|
fl_message("转换成功!");
|
||||||
} else {
|
} else {
|
||||||
fl_alert("转换失败,请检查输入文件!");
|
fl_alert("转换失败,请检查输入文件!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ ImageData ImageLoader::load(const std::string& path) {
|
|||||||
throw std::runtime_error("无法解码WebP图像");
|
throw std::runtime_error("无法解码WebP图像");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果没有alpha通道,转换为RGB格式
|
// 如果没有alpha通道,转换为RGB格式
|
||||||
if (data.channels == 3) {
|
if (data.channels == 3) {
|
||||||
uint8_t* rgb_pixels = new uint8_t[data.width * data.height * 3];
|
uint8_t* rgb_pixels = new uint8_t[data.width * data.height * 3];
|
||||||
for (int i = 0; i < data.width * data.height; ++i) {
|
for (int i = 0; i < data.width * data.height; ++i) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public:
|
|||||||
static std::string getVersion() { return "1.0.0"; }
|
static std::string getVersion() { return "1.0.0"; }
|
||||||
static std::string getAuthor() { return "zsyg"; }
|
static std::string getAuthor() { return "zsyg"; }
|
||||||
static std::string getDescription() {
|
static std::string getDescription() {
|
||||||
return "一个简单的文本转换工具,支持文本转换";
|
return "一个简单的文本转换工具,支持文本转换";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -5,18 +5,6 @@
|
|||||||
#include "Converter.hpp"
|
#include "Converter.hpp"
|
||||||
#include "BinaryConverter.hpp"
|
#include "BinaryConverter.hpp"
|
||||||
#include "HexConverter.hpp"
|
#include "HexConverter.hpp"
|
||||||
#include "ROT13Converter.hpp"
|
|
||||||
#include "MD5Converter.hpp"
|
|
||||||
#include "SHA1Converter.hpp"
|
|
||||||
#include "SHA256Converter.hpp"
|
|
||||||
#include "SHA224Converter.hpp"
|
|
||||||
#include "SHA384Converter.hpp"
|
|
||||||
#include "SHA512Converter.hpp"
|
|
||||||
#include "SHA3Converter.hpp"
|
|
||||||
#include "Base64Converter.hpp"
|
|
||||||
#include "Base32Converter.hpp"
|
|
||||||
#include "Ascii85Converter.hpp"
|
|
||||||
#include "CRC32Converter.hpp"
|
|
||||||
|
|
||||||
class Utils {
|
class Utils {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ std::string BinaryConverter::convert(const std::string& input) {
|
|||||||
std::stringstream result;
|
std::stringstream result;
|
||||||
for (char c : input) {
|
for (char c : input) {
|
||||||
std::string binary = std::bitset<8>(c).to_string();
|
std::string binary = std::bitset<8>(c).to_string();
|
||||||
// 去除前导0,保留后6位
|
// 去除前导0,保留后6位
|
||||||
size_t firstOne = binary.find('1');
|
size_t firstOne = binary.find('1');
|
||||||
if (firstOne != std::string::npos) {
|
if (firstOne != std::string::npos) {
|
||||||
binary = binary.substr(firstOne);
|
binary = binary.substr(firstOne);
|
||||||
|
|||||||
@@ -22,10 +22,6 @@ MainWindow::MainWindow(int w, int h, const char* title) : Fl_Window(w, h, title)
|
|||||||
conversionType->add("MD5");
|
conversionType->add("MD5");
|
||||||
conversionType->add("SHA1");
|
conversionType->add("SHA1");
|
||||||
conversionType->add("SHA256");
|
conversionType->add("SHA256");
|
||||||
conversionType->add("SHA224");
|
|
||||||
conversionType->add("SHA384");
|
|
||||||
conversionType->add("SHA512");
|
|
||||||
conversionType->add("SHA3");
|
|
||||||
conversionType->add("Base64");
|
conversionType->add("Base64");
|
||||||
conversionType->add("Base32");
|
conversionType->add("Base32");
|
||||||
conversionType->add("Ascii85");
|
conversionType->add("Ascii85");
|
||||||
@@ -52,25 +48,19 @@ void MainWindow::ConvertCallback(Fl_Widget* widget, void* data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::ConvertText() {
|
void MainWindow::ConvertText() {
|
||||||
try {
|
const char* input = inputText->value();
|
||||||
const char* input = inputText->value();
|
if (!input || strlen(input) == 0) {
|
||||||
if (!input || strlen(input) == 0) {
|
fl_alert("请输入要转换的文本");
|
||||||
fl_alert("请输入要转换的文本");
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int type = conversionType->value();
|
|
||||||
auto converter = Utils::createConverter(type);
|
|
||||||
if (!converter) {
|
|
||||||
fl_alert("不支持的转换类型");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string result = converter->convert(input);
|
|
||||||
outputText->value(result.c_str());
|
|
||||||
} catch (const std::exception& e) {
|
|
||||||
fl_alert(("转换失败: " + std::string(e.what())).c_str());
|
|
||||||
} catch (...) {
|
|
||||||
fl_alert("未知错误: 转换失败");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int type = conversionType->value();
|
||||||
|
auto converter = Utils::createConverter(type);
|
||||||
|
if (!converter) {
|
||||||
|
fl_alert("不支持的转换类型");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string result = converter->convert(input);
|
||||||
|
outputText->value(result.c_str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,6 @@
|
|||||||
#include "../include/MD5Converter.hpp"
|
#include "../include/MD5Converter.hpp"
|
||||||
#include "../include/SHA1Converter.hpp"
|
#include "../include/SHA1Converter.hpp"
|
||||||
#include "../include/SHA256Converter.hpp"
|
#include "../include/SHA256Converter.hpp"
|
||||||
#include "../include/SHA224Converter.hpp"
|
|
||||||
#include "../include/SHA384Converter.hpp"
|
|
||||||
#include "../include/SHA512Converter.hpp"
|
|
||||||
#include "../include/SHA3Converter.hpp"
|
|
||||||
#include "../include/Base64Converter.hpp"
|
#include "../include/Base64Converter.hpp"
|
||||||
#include "../include/Base32Converter.hpp"
|
#include "../include/Base32Converter.hpp"
|
||||||
#include "../include/Ascii85Converter.hpp"
|
#include "../include/Ascii85Converter.hpp"
|
||||||
@@ -24,10 +20,6 @@ std::unique_ptr<Converter> Utils::createConverter(int type) {
|
|||||||
case 7: return std::unique_ptr<Converter>(new Base32Converter());
|
case 7: return std::unique_ptr<Converter>(new Base32Converter());
|
||||||
case 8: return std::unique_ptr<Converter>(new Ascii85Converter());
|
case 8: return std::unique_ptr<Converter>(new Ascii85Converter());
|
||||||
case 9: return std::unique_ptr<Converter>(new CRC32Converter());
|
case 9: return std::unique_ptr<Converter>(new CRC32Converter());
|
||||||
case 10: return std::unique_ptr<Converter>(new SHA224Converter());
|
|
||||||
case 11: return std::unique_ptr<Converter>(new SHA384Converter());
|
|
||||||
case 12: return std::unique_ptr<Converter>(new SHA512Converter());
|
|
||||||
case 13: return std::unique_ptr<Converter>(new SHA3Converter());
|
|
||||||
default: return nullptr;
|
default: return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user