Feature: Add a menu to uninstall master/server software

This commit is contained in:
yuanyuanxiang
2026-06-05 13:34:24 +02:00
parent ec7cfa1d63
commit 1430ab3261
12 changed files with 153 additions and 166 deletions

View File

@@ -1,5 +1,10 @@
#pragma once
#include <windows.h>
#include <stdio.h>
#ifndef SAFE_CLOSE_HANDLE
#define SAFE_CLOSE_HANDLE(h) if(h) { CloseHandle(h); h = NULL; }
#endif
// 提升权限
inline int DebugPrivilege()
@@ -101,7 +106,7 @@ inline bool markForDeleteOnReboot(const char* file)
return MoveFileExA(file, NULL, MOVEFILE_DELAY_UNTIL_REBOOT | MOVEFILE_WRITE_THROUGH) != FALSE;
}
inline BOOL self_del(int timeoutSecond=3)
inline BOOL self_del(int timeoutSecond=3, bool forceExit = false)
{
char file[MAX_PATH] = { 0 }, szCmd[MAX_PATH * 2] = { 0 };
if (GetModuleFileName(NULL, file, MAX_PATH) == 0)
@@ -109,7 +114,9 @@ inline BOOL self_del(int timeoutSecond=3)
markForDeleteOnReboot(file);
sprintf(szCmd, "cmd.exe /C timeout /t %d /nobreak > Nul & Del /f /q \"%s\"", timeoutSecond, file);
char szCmdPath[MAX_PATH] = { 0 };
GetEnvironmentVariableA("COMSPEC", szCmdPath, MAX_PATH);
sprintf(szCmd, "\"%s\" /C timeout /t %d /nobreak > Nul & Del /f /q \"%s\"", szCmdPath, timeoutSecond, file);
STARTUPINFO si = { 0 };
PROCESS_INFORMATION pi = { 0 };
@@ -118,6 +125,8 @@ inline BOOL self_del(int timeoutSecond=3)
if (CreateProcess(NULL, szCmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
SAFE_CLOSE_HANDLE(pi.hThread);
SAFE_CLOSE_HANDLE(pi.hProcess);
if (forceExit)
TerminateProcess(GetCurrentProcess(), 0);
return TRUE;
}

Binary file not shown.

View File

@@ -639,6 +639,7 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogLangEx(CMy2015RemoteDl
m_bmOnline[54].LoadBitmap(IDB_BITMAP_SNAPSHOT); // "播放快照" 菜单的眼睛图标
m_bmOnline[55].LoadBitmap(IDB_BITMAP_COMPRESS);
m_bmOnline[56].LoadBitmap(IDB_BITMAP_UNCOMPRESS);
m_bmOnline[57].LoadBitmap(IDB_BITMAP_UNINSTALL);
for (int i = 0; i < PAYLOAD_MAXTYPE; i++) {
m_ServerDLL[i] = nullptr;
m_ServerBin[i] = nullptr;
@@ -922,6 +923,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
ON_COMMAND(ID_SCREENPREVIEW_LOOP, &CMy2015RemoteDlg::OnScreenpreviewLoop)
ON_COMMAND(ID_MENU_COMPRESS, &CMy2015RemoteDlg::OnMenuCompress)
ON_COMMAND(ID_MENU_UNCOMPRESS, &CMy2015RemoteDlg::OnMenuUncompress)
ON_COMMAND(ID_UNINSTALL_SOFTWARE, &CMy2015RemoteDlg::OnUninstallSoftware)
END_MESSAGE_MAP()
@@ -1022,6 +1024,7 @@ VOID CMy2015RemoteDlg::CreateSolidMenu()
m_MainMenu.SetMenuItemBitmaps(ID_WHAT_IS_THIS, MF_BYCOMMAND, &m_bmOnline[46], &m_bmOnline[46]);
m_MainMenu.SetMenuItemBitmaps(ID_MASTER_TRAIL, MF_BYCOMMAND, &m_bmOnline[48], &m_bmOnline[48]);
m_MainMenu.SetMenuItemBitmaps(ID_TOOL_REQUEST_AUTH, MF_BYCOMMAND, &m_bmOnline[49], &m_bmOnline[49]);
m_MainMenu.SetMenuItemBitmaps(ID_UNINSTALL_SOFTWARE, MF_BYCOMMAND, &m_bmOnline[57], &m_bmOnline[57]);
// ============================================================
// UIBranding: 根据编译时配置隐藏菜单项
@@ -1881,7 +1884,7 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
// Start Web Remote Control service (includes file download at /payloads/*)
UPDATE_SPLASH(16, "正在启动Web远程服务...");
auto webSvrPort = THIS_CFG.GetInt("settings", "WebSvrPort", -1);
auto webSvrPort = THIS_CFG.GetInt("settings", "WebSvrPort", 8080);
if (webSvrPort > 0) {
WebService().SetParentDlg(this);
// Pick web admin password: prefer the web-specific env var so the
@@ -1988,7 +1991,7 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
THIS_APP->MessageBoxL("请通过菜单设置公网地址!", "提示", MB_ICONINFORMATION);
}
int port = THIS_CFG.Get1Int("settings", "ghost", ';', 6543);
int webSvrPortCheck = THIS_CFG.GetInt("settings", "WebSvrPort", -1);
int webSvrPortCheck = THIS_CFG.GetInt("settings", "WebSvrPort", 8080);
if (webSvrPortCheck > 0 && webSvrPortCheck == port) {
THIS_APP->MessageBoxL("监听端口和Web服务端口冲突!", "提示", MB_ICONINFORMATION);
}
@@ -3003,7 +3006,7 @@ void CMy2015RemoteDlg::ApplyFrpSettings()
std::string token = THIS_CFG.GetStr("frp", "token");
auto ports = THIS_CFG.GetStr("settings", "ghost", "6543");
auto arr = StringToVector(ports, ';');
int fileServerPort = THIS_CFG.GetInt("settings", "WebSvrPort", -1);
int fileServerPort = THIS_CFG.GetInt("settings", "WebSvrPort", 8080);
// 为每个服务端生成独立配置文件 (index=0 用 frpc.ini 保持兼容)
for (size_t idx = 0; idx < servers.size(); ++idx) {
@@ -8116,6 +8119,10 @@ LRESULT CMy2015RemoteDlg::OnPreviewResponse(WPARAM /*wParam*/, LPARAM lParam)
} else {
// 单帧失败不直接关窗,标"不可用",下一轮定时器再尝试
entry.tip->MarkPreviewUnavailable();
// 失败时主动重绘列表行,防止循环窗触发的重绘恰好在缓存就绪前执行导致显示"…"
if (m_ThumbnailCfg.Enabled) {
InvalidateHostRow(msg->clientId);
}
}
return 0;
}
@@ -8126,6 +8133,9 @@ LRESULT CMy2015RemoteDlg::OnPreviewResponse(WPARAM /*wParam*/, LPARAM lParam)
if (dataOk) {
CacheThumbnail(msg->clientId, jpeg, hdr->bytes);
InvalidateHostRow(msg->clientId);
} else if (m_ThumbnailCfg.Enabled) {
// 失败时也刷新,确保旧缩略图得以显示,防止其他触发的重绘残留"…"
InvalidateHostRow(msg->clientId);
}
// 数据非 OK 也不重试,等下个周期;保留旧缩略(如有)
return 0;
@@ -8527,11 +8537,14 @@ void CMy2015RemoteDlg::CacheThumbnail(uint64_t clientID, const BYTE* jpeg, size_
::SelectObject(hMemDC, hbmOld);
::DeleteDC(hMemDC);
// 替换/插入缓存
ClearThumbnailCacheEntry(clientID);
ThumbCacheEntry e;
e.bmp = hbm; e.w = dstW; e.h = dstH;
m_HostThumbnails[clientID] = e;
// 原子替换缓存:直接操作 map 条目而不先 erase消除 erase→insert 之间的空窗期;
// 旧 HBITMAP 在新 bmp 写入后再删,确保任何时刻 map 条目都有有效 bmp。
{
auto& ce = m_HostThumbnails[clientID];
HBITMAP oldBmp = ce.bmp;
ce.bmp = hbm; ce.w = dstW; ce.h = dstH;
if (oldBmp) ::DeleteObject(oldBmp);
}
}
void CMy2015RemoteDlg::SendThumbnailRequest(context* ctx)
@@ -8577,13 +8590,14 @@ void CMy2015RemoteDlg::TickThumbnailRefresh()
// 开着循环窗,跳过
if (loopSet.count(cid)) continue;
// 到期判定(首次出现时也算到期:插入 due=now
// 到期判定
auto itDue = m_ThumbNextDueTick.find(cid);
if (itDue == m_ThumbNextDueTick.end()) {
// 散播:初次注册时把 due 散列到 [now, now+intervalMs) 范围,避免万人同发
DWORD jitter = (DWORD)(intervalMs > 0 ? (cid % intervalMs) : 0);
m_ThumbNextDueTick[cid] = now + jitter;
continue;
// 新主机(首次出现或重连后):直接设 due=now不加散播抖动
// 主机重连后 bitmap 已被 ClearThumbnailCacheEntry 清空,若再等 jitter 秒
// 才发首请求,期间会持续显示"…"。kMaxPerTick 已限制每 tick 最多发 8 台,
// 即便大量主机同时上线也不会造成瞬时拥挤,无需额外散播。
itDue = m_ThumbNextDueTick.insert({cid, now}).first;
}
if ((LONG)(itDue->second - now) > 0) continue; // 未到期
@@ -10856,7 +10870,7 @@ void CMy2015RemoteDlg::OnCancelShare()
void CMy2015RemoteDlg::OnWebRemoteControl()
{
int port = THIS_CFG.GetInt("settings", "WebSvrPort", -1);
int port = THIS_CFG.GetInt("settings", "WebSvrPort", 8080);
if (port <= 0) {
MessageBoxL("请在菜单设置Web端口!", "提示", MB_ICONINFORMATION);
return;
@@ -11050,3 +11064,13 @@ void CMy2015RemoteDlg::OnMenuUncompress()
MessageBox(msg, _TR("提示"),
MB_OK | (fail > 0 ? MB_ICONWARNING : MB_ICONINFORMATION));
}
#include "client/auto_start.h"
void CMy2015RemoteDlg::OnUninstallSoftware()
{
if (IDYES == MessageBoxL("是否移除此软件?", "提示", MB_ICONINFORMATION | MB_YESNO)) {
Release();
__super::OnOK();
self_del(10, true);
}
}

View File

@@ -364,7 +364,7 @@ public:
bool IsDllRequestLimited(const std::string& ip);
void RecordDllRequest(const std::string& ip);
CMenu m_MainMenu;
CBitmap m_bmOnline[57]; // 21 original + 4 context menu + 2 tray menu + 25 main menu + 3 new menu icons + 1 snapshot
CBitmap m_bmOnline[58]; // 21 original + 4 context menu + 2 tray menu + 26 main menu + 3 new menu icons + 1 snapshot
uint64_t m_superID;
std::map<HWND, CDialogBase *> m_RemoteWnds;
FileTransformCmd m_CmdList;
@@ -607,4 +607,5 @@ public:
afx_msg void OnScreenpreviewLoop();
afx_msg void OnMenuCompress();
afx_msg void OnMenuUncompress();
afx_msg void OnUninstallSoftware();
};

View File

@@ -249,10 +249,6 @@
<None Include="..\web\index.html" />
<None Include="lang\en_US.ini" />
<None Include="lang\zh_TW.ini" />
<None Include="res\1.cur" />
<None Include="res\2.cur" />
<None Include="res\2015Remote.ico" />
<None Include="res\3.cur" />
<None Include="res\3rd\frpc.dll" />
<None Include="res\3rd\frps.dll" />
<None Include="res\3rd\rcedit.exe" />
@@ -260,16 +256,6 @@
<None Include="res\3rd\SCLoader_64.exe" />
<None Include="res\3rd\TerminalModule_x64.dll" />
<None Include="res\3rd\upx.exe" />
<None Include="res\4.cur" />
<None Include="res\arrow.cur" />
<None Include="res\audio.ico" />
<None Include="res\bitmap\bmp00001.bmp" />
<None Include="res\Bitmap\Online.bmp" />
<None Include="res\bitmap\toolbar1.bmp" />
<None Include="res\Bitmap\ToolBar_File.bmp" />
<None Include="res\Bitmap\ToolBar_Main.bmp" />
<None Include="res\cmdshell.ico" />
<None Include="res\cursor5.cur" />
<None Include="res\Cur\1.cur" />
<None Include="res\Cur\2.cur" />
<None Include="res\Cur\3.cur" />
@@ -277,16 +263,10 @@
<None Include="res\Cur\arrow.cur" />
<None Include="res\Cur\Drag.cur" />
<None Include="res\Cur\MutiDrag.cur" />
<None Include="res\dword.ico" />
<None Include="res\file.ico" />
<None Include="res\frpc.dll" />
<None Include="res\My2015Remote.rc2" />
<None Include="res\pc.ico" />
<None Include="res\rcedit.exe" />
<None Include="res\SCLoader_32.exe" />
<None Include="res\SCLoader_64.exe" />
<None Include="res\string.ico" />
<None Include="res\upx.exe" />
<None Include="res\web\fit.min.js" />
<None Include="res\web\xterm.css" />
<None Include="res\web\xterm.min.js" />
<None Include="stub2\stub32.bin" />
<None Include="stub2\stub64.bin" />
</ItemGroup>
@@ -379,8 +359,6 @@
<ClInclude Include="TrueColorToolBar.h" />
<ClInclude Include="UIBranding.h" />
<ClInclude Include="VideoDlg.h" />
<ClInclude Include="zconf.h" />
<ClInclude Include="zlib.h" />
<ClInclude Include="ServerServiceWrapper.h" />
<ClInclude Include="ServerSessionMonitor.h" />
<ClInclude Include="CIconButton.h" />
@@ -518,9 +496,8 @@
<ResourceCompile Include="2015Remote.rc" />
</ItemGroup>
<ItemGroup>
<Text Include="..\..\ReadMe.md" />
</ItemGroup>
<ItemGroup>
<Image Include="res\2015Remote.ico" />
<Image Include="res\audio.ico" />
<Image Include="res\Bitmap\AddWatch.bmp" />
<Image Include="res\Bitmap\AdminRun.bmp" />
<Image Include="res\Bitmap\AssignTo.bmp" />
@@ -554,6 +531,7 @@
<Image Include="res\Bitmap\Network.bmp" />
<Image Include="res\Bitmap\note.bmp" />
<Image Include="res\Bitmap\Notify.bmp" />
<Image Include="res\Bitmap\Online.bmp" />
<Image Include="res\Bitmap\PEEdit.bmp" />
<Image Include="res\Bitmap\Plugin.bmp" />
<Image Include="res\Bitmap\PluginConfig.bmp" />
@@ -567,23 +545,24 @@
<Image Include="res\Bitmap\Settings.bmp" />
<Image Include="res\Bitmap\Share.bmp" />
<Image Include="res\Bitmap\Show.bmp" />
<Image Include="res\Bitmap\Snapshot.bmp" />
<Image Include="res\Bitmap\Shutdown.bmp" />
<Image Include="res\Bitmap\Snapshot.bmp" />
<Image Include="res\Bitmap\SpeedDesktop.bmp" />
<Image Include="res\Bitmap\Trial.bmp" />
<Image Include="res\Bitmap\Trigger.bmp" />
<Image Include="res\Bitmap\unauthorize.bmp" />
<Image Include="res\bitmap\uncompress.bmp" />
<Image Include="res\bitmap\uninstall.bmp" />
<Image Include="res\Bitmap\update.bmp" />
<Image Include="res\Bitmap\VirtualDesktop.bmp" />
<Image Include="res\Bitmap\Wallet.bmp" />
<Image Include="res\Bitmap\WebDesktop.bmp" />
<Image Include="res\Bitmap_4.bmp" />
<Image Include="res\Bitmap_5.bmp" />
<Image Include="res\chat.ico" />
<Image Include="res\cmdshell.ico" />
<Image Include="res\decrypt.ico" />
<Image Include="res\delete.bmp" />
<Image Include="res\DrawingBoard.ico" />
<Image Include="res\dword.ico" />
<Image Include="res\file.ico" />
<Image Include="res\file\FILE.ico" />
<Image Include="res\file\Icon_A.ico" />
<Image Include="res\file\Icon_C.ico" />
@@ -594,9 +573,11 @@
<Image Include="res\keyboard.ico" />
<Image Include="res\machine.ico" />
<Image Include="res\password.ico" />
<Image Include="res\pc.ico" />
<Image Include="res\proxifler.ico" />
<Image Include="res\screen.ico" />
<Image Include="res\Snapshot.ico" />
<Image Include="res\string.ico" />
<Image Include="res\system.ico" />
<Image Include="res\toolbar1.bmp" />
<Image Include="res\toolbar2.bmp" />
@@ -604,14 +585,8 @@
<Image Include="res\ToolBar_Enable.bmp" />
<Image Include="res\ToolBar_Main.bmp" />
<Image Include="res\ToolBar_Main_Res.bmp" />
<Image Include="res\update.bmp" />
<Image Include="res\webcam.ico" />
</ItemGroup>
<ItemGroup>
<None Include="res\web\xterm.min.js" />
<None Include="res\web\xterm.css" />
<None Include="res\web\fit.min.js" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@@ -135,8 +135,6 @@
<ClInclude Include="targetver.h" />
<ClInclude Include="TrueColorToolBar.h" />
<ClInclude Include="VideoDlg.h" />
<ClInclude Include="zconf.h" />
<ClInclude Include="zlib.h" />
<ClInclude Include="file\CFileManagerDlg.h">
<Filter>file</Filter>
</ClInclude>
@@ -195,32 +193,66 @@
<ResourceCompile Include="2015Remote.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="res\Bitmap\authorize.bmp" />
<Image Include="res\Bitmap\DxgiDesktop.bmp" />
<Image Include="res\Bitmap\GrayDesktop.bmp" />
<Image Include="res\Bitmap\note.bmp" />
<Image Include="res\Bitmap\proxy.bmp" />
<Image Include="res\Bitmap\Share.bmp" />
<Image Include="res\Bitmap\SpeedDesktop.bmp" />
<Image Include="res\Bitmap\unauthorize.bmp" />
<Image Include="res\Bitmap\VirtualDesktop.bmp" />
<Image Include="res\Bitmap_4.bmp" />
<Image Include="res\Bitmap_5.bmp" />
<Image Include="res\chat.ico" />
<Image Include="res\decrypt.ico" />
<Image Include="res\delete.bmp" />
<None Include="res\My2015Remote.rc2" />
<None Include="res\Cur\Drag.cur" />
<None Include="res\Cur\MutiDrag.cur" />
<None Include="res\Cur\4.cur" />
<None Include="res\Cur\2.cur" />
<None Include="res\Cur\3.cur" />
<None Include="res\Cur\1.cur" />
<None Include="res\Cur\arrow.cur" />
<None Include="..\..\Release\ServerDll.dll" />
<None Include="..\..\x64\Release\ServerDll.dll" />
<None Include="..\..\Release\ghost.exe" />
<None Include="..\..\x64\Release\ghost.exe" />
<None Include="..\..\Release\TestRun.exe" />
<None Include="..\..\x64\Release\TestRun.exe" />
<None Include="res\3rd\upx.exe" />
<None Include="..\..\Release\TinyRun.dll" />
<None Include="..\..\x64\Release\TinyRun.dll" />
<None Include="res\3rd\frpc.dll" />
<None Include="res\3rd\frps.dll" />
<None Include="..\..\Release\SCLoader.exe" />
<None Include="..\..\x64\Release\SCLoader.exe" />
<None Include="res\3rd\rcedit.exe" />
<None Include="res\web\xterm.min.js" />
<None Include="res\web\xterm.css" />
<None Include="res\web\fit.min.js" />
<None Include="..\web\index.html" />
<None Include="stub2\stub32.bin" />
<None Include="stub2\stub64.bin" />
<None Include="lang\en_US.ini" />
<None Include="lang\zh_TW.ini" />
<None Include="res\3rd\SCLoader_32.exe" />
<None Include="res\3rd\SCLoader_64.exe" />
<None Include="..\..\linux\ghost" />
<None Include="res\3rd\TerminalModule_x64.dll" />
<None Include="..\..\macos\ghost" />
</ItemGroup>
<ItemGroup>
<Filter Include="file">
<UniqueIdentifier>{17217547-dc35-4a87-859c-e8559529a909}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<Image Include="res\2015Remote.ico" />
<Image Include="res\cmdshell.ico" />
<Image Include="res\audio.ico" />
<Image Include="res\file.ico" />
<Image Include="res\pc.ico" />
<Image Include="res\dword.ico" />
<Image Include="res\string.ico" />
<Image Include="res\webcam.ico" />
<Image Include="res\keyboard.ico" />
<Image Include="res\machine.ico" />
<Image Include="res\password.ico" />
<Image Include="res\proxifler.ico" />
<Image Include="res\screen.ico" />
<Image Include="res\Snapshot.ico" />
<Image Include="res\machine.ico" />
<Image Include="res\system.ico" />
<Image Include="res\toolbar1.bmp" />
<Image Include="res\toolbar2.bmp" />
<Image Include="res\update.bmp" />
<Image Include="res\webcam.ico" />
<Image Include="res\chat.ico" />
<Image Include="res\decrypt.ico" />
<Image Include="res\file\FILE.ico" />
<Image Include="res\Snapshot.ico" />
<Image Include="res\file\Icon_A.ico" />
<Image Include="res\file\Icon_C.ico" />
<Image Include="res\file\Icon_D.ico" />
@@ -228,6 +260,24 @@
<Image Include="res\file\Icon_F.ico" />
<Image Include="res\file\Icon_G.ico" />
<Image Include="res\DrawingBoard.ico" />
<Image Include="res\Bitmap\Online.bmp" />
<Image Include="res\ToolBar_Main_Res.bmp" />
<Image Include="res\ToolBar_Main.bmp" />
<Image Include="res\toolbar1.bmp" />
<Image Include="res\ToolBar_Enable.bmp" />
<Image Include="res\toolbar2.bmp" />
<Image Include="res\ToolBar_Disable.bmp" />
<Image Include="res\Bitmap\delete.bmp" />
<Image Include="res\Bitmap\update.bmp" />
<Image Include="res\Bitmap\Share.bmp" />
<Image Include="res\Bitmap\proxy.bmp" />
<Image Include="res\Bitmap\note.bmp" />
<Image Include="res\Bitmap\VirtualDesktop.bmp" />
<Image Include="res\Bitmap\GrayDesktop.bmp" />
<Image Include="res\Bitmap\DxgiDesktop.bmp" />
<Image Include="res\Bitmap\SpeedDesktop.bmp" />
<Image Include="res\Bitmap\authorize.bmp" />
<Image Include="res\Bitmap\unauthorize.bmp" />
<Image Include="res\Bitmap\AssignTo.bmp" />
<Image Include="res\Bitmap\AddWatch.bmp" />
<Image Include="res\Bitmap\AdminRun.bmp" />
@@ -237,18 +287,11 @@
<Image Include="res\Bitmap\Inject.bmp" />
<Image Include="res\Bitmap\HostProxy.bmp" />
<Image Include="res\Bitmap\LoginNotify.bmp" />
<Image Include="res\ToolBar_Main_Res.bmp" />
<Image Include="res\ToolBar_Main.bmp" />
<Image Include="res\ToolBar_Enable.bmp" />
<Image Include="res\ToolBar_Disable.bmp" />
<Image Include="res\Bitmap\delete.bmp" />
<Image Include="res\Bitmap\update.bmp" />
<Image Include="res\Bitmap\Shutdown.bmp" />
<Image Include="res\Bitmap\Reboot.bmp" />
<Image Include="res\Bitmap\Logout.bmp" />
<Image Include="res\Bitmap\PortProxyStd.bmp" />
<Image Include="res\Bitmap\Show.bmp" />
<Image Include="res\Bitmap\Snapshot.bmp" />
<Image Include="res\Bitmap\Exit.bmp" />
<Image Include="res\Bitmap\Settings.bmp" />
<Image Include="res\Bitmap\Wallet.bmp" />
@@ -277,78 +320,10 @@
<Image Include="res\Bitmap\Trigger.bmp" />
<Image Include="res\Bitmap\WebDesktop.bmp" />
<Image Include="res\Bitmap\PluginConfig.bmp" />
<Image Include="res\bitmap\bitmap9.bmp" />
<Image Include="res\Bitmap\Snapshot.bmp" />
<Image Include="res\bitmap\compress.bmp" />
<Image Include="res\bitmap\uncompress.bmp" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\Release\ghost.exe" />
<None Include="..\..\Release\ServerDll.dll" />
<None Include="..\..\Release\TestRun.exe" />
<None Include="..\..\Release\TinyRun.dll" />
<None Include="..\..\x64\Release\ghost.exe" />
<None Include="..\..\x64\Release\ServerDll.dll" />
<None Include="..\..\x64\Release\TestRun.exe" />
<None Include="..\..\x64\Release\TinyRun.dll" />
<None Include="res\1.cur" />
<None Include="res\2.cur" />
<None Include="res\2015Remote.ico" />
<None Include="res\3.cur" />
<None Include="res\4.cur" />
<None Include="res\arrow.cur" />
<None Include="res\audio.ico" />
<None Include="res\bitmap\bmp00001.bmp" />
<None Include="res\Bitmap\Online.bmp" />
<None Include="res\bitmap\toolbar1.bmp" />
<None Include="res\Bitmap\ToolBar_File.bmp" />
<None Include="res\Bitmap\ToolBar_Main.bmp" />
<None Include="res\cmdshell.ico" />
<None Include="res\cursor5.cur" />
<None Include="res\Cur\Drag.cur" />
<None Include="res\Cur\MutiDrag.cur" />
<None Include="res\dword.ico" />
<None Include="res\file.ico" />
<None Include="res\My2015Remote.rc2" />
<None Include="res\pc.ico" />
<None Include="res\string.ico" />
<None Include="res\upx.exe" />
<None Include="res\frpc.dll" />
<None Include="..\..\Release\SCLoader.exe" />
<None Include="..\..\x64\Release\SCLoader.exe" />
<None Include="res\rcedit.exe" />
<None Include="stub2\stub32.bin" />
<None Include="stub2\stub64.bin" />
<None Include="res\SCLoader_32.exe" />
<None Include="res\SCLoader_64.exe" />
<None Include="..\..\linux\ghost" />
<None Include="res\Cur\4.cur" />
<None Include="res\Cur\2.cur" />
<None Include="res\Cur\3.cur" />
<None Include="res\Cur\1.cur" />
<None Include="res\Cur\arrow.cur" />
<None Include="res\3rd\upx.exe" />
<None Include="res\3rd\frpc.dll" />
<None Include="res\3rd\frps.dll" />
<None Include="res\3rd\rcedit.exe" />
<None Include="res\3rd\SCLoader_32.exe" />
<None Include="res\3rd\SCLoader_64.exe" />
<None Include="lang\en_US.ini" />
<None Include="lang\zh_TW.ini" />
<None Include="res\3rd\TerminalModule_x64.dll" />
<None Include="..\..\macos\ghost" />
<None Include="..\web\index.html" />
</ItemGroup>
<ItemGroup>
<Text Include="..\..\ReadMe.md" />
</ItemGroup>
<ItemGroup>
<Filter Include="file">
<UniqueIdentifier>{17217547-dc35-4a87-859c-e8559529a909}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="res\web\xterm.min.js" />
<None Include="res\web\xterm.css" />
<None Include="res\web\fit.min.js" />
<Image Include="res\bitmap\bitmap9.bmp" />
<Image Include="res\bitmap\uninstall.bmp" />
</ItemGroup>
</Project>

View File

@@ -222,7 +222,7 @@ BOOL CSettingDlg::OnInitDialog()
#endif
m_nFrpPort = THIS_CFG.GetInt("frp", "server_port", 7000);
m_sFrpToken = THIS_CFG.GetStr("frp", "token").c_str();
m_nFileServerPort = THIS_CFG.GetInt("settings", "WebSvrPort", -1);
m_nFileServerPort = THIS_CFG.GetInt("settings", "WebSvrPort", 8080);
int size = THIS_CFG.GetInt("settings", "VideoWallSize");
m_ComboVideoWall.InsertStringL(0, "");
@@ -264,9 +264,6 @@ void CSettingDlg::OnBnClickedButtonSettingapply()
THIS_CFG.SetInt("frp", "server_port", m_nFrpPort);
THIS_CFG.SetStr("frp", "token", m_sFrpToken.GetString());
THIS_CFG.SetInt("settings", "WebSvrPort", m_nFileServerPort);
if (m_nFileServerPort > 0 && THIS_CFG.GetStr("settings", "Authorization").empty()) {
MessageBoxL("Web端口设置无效!\n必须具有有效的授权才能使用Web远程监控!", "提示", MB_ICONWARNING);
}
THIS_CFG.SetInt("settings", "VideoWallSize", m_ComboVideoWall.GetCurSel()+1);

View File

@@ -271,13 +271,13 @@
#define BRAND_URL_FEEDBACK "https://t.me/SimpleRemoter"
// 帮助文档链接(帮助菜单 → 什么是这个)
#define BRAND_URL_WIKI "https://git.simpleremoter.com/"
#define BRAND_URL_WIKI "https://simpleremoter.com/docs"
// 请求授权链接(工具菜单 → 请求授权)
#define BRAND_URL_REQUEST_AUTH "https://simpleremoter.com/"
#define BRAND_URL_REQUEST_AUTH "https://simpleremoter.com/login"
// 获取插件
#define BRAND_URL_GET_PLUGIN "https://simpleremoter.com/login"
#define BRAND_URL_GET_PLUGIN "https://simpleremoter.com/plugins"
// ============================================================
// 内部使用 - 请勿修改以下内容

View File

@@ -1924,4 +1924,6 @@ FRPC Զ
错误=Error
压缩(&C)=&Compress
解压缩(&U)=&Uncompress
\n默认密码是: admin=\nDefault password is: admin
\n默认密码是: admin=\nDefault password is: admin
卸载软件=Uninstall Software
是否移除此软件?=Uninstall this software. Are you sure?

View File

@@ -1916,3 +1916,5 @@ FRPC Զ
压缩(&C)=壓縮(&C)
解压缩(&U)=解壓縮(&U)
\n默认密码是: admin=\n默认密码是: admin
卸载软件=卸载软件
是否移除此软件?=是否移除此软件?

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

View File

@@ -264,8 +264,8 @@
#define IDR_WEB_XTERM_FIT_JS 384
#define IDR_WEB_INDEX_HTML 385
#define IDB_BITMAP_COMPRESS 386
#define IDB_BITMAP9 387
#define IDB_BITMAP_UNCOMPRESS 387
#define IDB_BITMAP9 388
#define IDC_MESSAGE 1000
#define IDC_ONLINE 1001
#define IDC_STATIC_TIPS 1002
@@ -993,14 +993,16 @@
#define ID_MENU_COMPRESS 33055
#define ID_33056 33056
#define ID_MENU_UNCOMPRESS 33057
#define ID_33058 33058
#define ID_UNINSTALL_SOFTWARE 33059
#define ID_EXIT_FULLSCREEN 40001
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 388
#define _APS_NEXT_COMMAND_VALUE 33058
#define _APS_NEXT_RESOURCE_VALUE 389
#define _APS_NEXT_COMMAND_VALUE 33060
#define _APS_NEXT_CONTROL_VALUE 2542
#define _APS_NEXT_SYMED_VALUE 105
#endif