Значок: icon.ico вшивается в exe
csc собирался без /win32icon, поэтому у exe не было значка вовсе, а окно пыталось сделать значок из icon.png через GetHicon — тот теряет альфу и не даёт нужных размеров. Теперь многоразмерный icon.ico вшит в exe, а окно берёт значок из себя же.
This commit is contained in:
@@ -178,6 +178,8 @@ deepseek-api.exe
|
|||||||
|
|
||||||
`build.cmd` собирает `deepseek-api.exe` (около 20 КБ) компилятором C# из
|
`build.cmd` собирает `deepseek-api.exe` (около 20 КБ) компилятором C# из
|
||||||
состава Windows — `csc.exe`, он есть на любой машине с .NET Framework 4.
|
состава Windows — `csc.exe`, он есть на любой машине с .NET Framework 4.
|
||||||
|
Значок берётся из `icon.ico` и вшивается в exe, так что рядом с ним ничего
|
||||||
|
лежать не обязано.
|
||||||
Ставить ничего не нужно, прав администратора тоже. Сам `.exe` в репозиторий
|
Ставить ничего не нужно, прав администратора тоже. Сам `.exe` в репозиторий
|
||||||
не кладётся: собирается за секунду.
|
не кладётся: собирается за секунду.
|
||||||
|
|
||||||
@@ -467,7 +469,7 @@ POST /api/chat
|
|||||||
| `config.json` | настройки; `config.local.json` рядом перебивает их |
|
| `config.json` | настройки; `config.local.json` рядом перебивает их |
|
||||||
| `chats.json` | рабочее состояние: id живых чатов (заводится сам) |
|
| `chats.json` | рабочее состояние: id живых чатов (заводится сам) |
|
||||||
| `start.cmd` | запуск в консоли |
|
| `start.cmd` | запуск в консоли |
|
||||||
| `tray.cs`, `build.cmd` | окно с индикатором в трее; `.exe` собирается на месте |
|
| `tray.cs`, `build.cmd`, `icon.ico` | окно с индикатором в трее; `.exe` собирается на месте |
|
||||||
| `test.mjs` | проверка перевода формата, браузер не нужен |
|
| `test.mjs` | проверка перевода формата, браузер не нужен |
|
||||||
|
|
||||||
Зависимостей нет — только то, что есть в Node 22.
|
Зависимостей нет — только то, что есть в Node 22.
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ if not exist "%CSC%" (
|
|||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
"%CSC%" /nologo /target:winexe /optimize+ /out:"%~dp0deepseek-api.exe" ^
|
"%CSC%" /nologo /target:winexe /optimize+ /out:"%~dp0deepseek-api.exe" ^
|
||||||
|
/win32icon:"%~dp0icon.ico" ^
|
||||||
/r:System.dll /r:System.Drawing.dll /r:System.Windows.Forms.dll ^
|
/r:System.dll /r:System.Drawing.dll /r:System.Windows.Forms.dll ^
|
||||||
/r:System.Web.Extensions.dll "%~dp0tray.cs"
|
/r:System.Web.Extensions.dll "%~dp0tray.cs"
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
|
|||||||
@@ -78,14 +78,11 @@ class Tray : Form
|
|||||||
tray.Visible = true;
|
tray.Visible = true;
|
||||||
tray.DoubleClick += (s, e) => Restore();
|
tray.DoubleClick += (s, e) => Restore();
|
||||||
|
|
||||||
// Значок окна — картинка проекта, если она рядом; значок в трее всё
|
// Значок окна берём из самого exe: icon.ico вшит в него при сборке
|
||||||
// равно рисуется цветом состояния, там картинке места нет.
|
// (/win32icon), поэтому рядом ничего лежать не обязано. Значок в трее
|
||||||
var png = Path.Combine(here, "icon.png");
|
// всё равно рисуется цветом состояния, там картинке места нет.
|
||||||
if (File.Exists(png))
|
try { Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); }
|
||||||
try { using (var bmp = new Bitmap(png)) Icon = Icon.FromHandle(bmp.GetHicon()); }
|
catch { Icon = Dot(Color.Gray); }
|
||||||
catch { Icon = Dot(Color.Gray); }
|
|
||||||
else
|
|
||||||
Icon = Dot(Color.Gray);
|
|
||||||
Mark(Color.Gray, "запуск…");
|
Mark(Color.Gray, "запуск…");
|
||||||
|
|
||||||
poll.Interval = 1000;
|
poll.Interval = 1000;
|
||||||
|
|||||||
Reference in New Issue
Block a user