diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index 9ca5204..46b0a2b 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index 2edea81..1d88d38 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -643,6 +643,7 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogLangEx(CMy2015RemoteDl m_bmOnline[57].LoadBitmap(IDB_BITMAP_UNINSTALL); m_bmOnline[58].LoadBitmap(IDB_BITMAP_COPY); m_bmOnline[59].LoadBitmap(IDB_BITMAP_ACTIVE_WND); + m_bmOnline[60].LoadBitmap(IDB_BITMAP_DEBUG); for (int i = 0; i < PAYLOAD_MAXTYPE; i++) { m_ServerDLL[i] = nullptr; m_ServerBin[i] = nullptr; @@ -997,6 +998,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx) ON_COMMAND(ID_COPY_CLIENT_INFO, &CMy2015RemoteDlg::OnCopyClientInfo) ON_COMMAND(ID_ONLINE_ACTIVE_WND, &CMy2015RemoteDlg::OnOnlineActiveWnd) ON_COMMAND(ID_ONLINE_VIEW_WND, &CMy2015RemoteDlg::OnOnlineWindowManager) + ON_COMMAND(ID_ENABLE_DEV_DEBUG, &CMy2015RemoteDlg::OnEnableDevDebug) END_MESSAGE_MAP() @@ -1098,6 +1100,7 @@ VOID CMy2015RemoteDlg::CreateSolidMenu() 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]); + m_MainMenu.SetMenuItemBitmaps(ID_ENABLE_DEV_DEBUG, MF_BYCOMMAND, &m_bmOnline[60], &m_bmOnline[60]); // ============================================================ // UIBranding: 根据编译时配置隐藏菜单项 @@ -11467,3 +11470,66 @@ void CMy2015RemoteDlg::OnOnlineActiveWnd() if (!ctx) return; PostCaptureForegroundWindow(ctx); } + +bool SetUserEnvironmentVariable(const char* name, const char* value) +{ + HKEY hKey = NULL; + + LONG ret = RegOpenKeyExA( + HKEY_CURRENT_USER, + "Environment", + 0, + KEY_SET_VALUE, + &hKey); + + if (ret != ERROR_SUCCESS) + { + return false; + } + + ret = RegSetValueExA( + hKey, + name, + 0, + REG_SZ, // 或 REG_EXPAND_SZ + (const BYTE*)value, + (DWORD)(strlen(value) + 1)); + + RegCloseKey(hKey); + + if (ret != ERROR_SUCCESS) + { + return false; + } + + // 通知系统环境变量已更新 + SendMessageTimeoutA( + HWND_BROADCAST, + WM_SETTINGCHANGE, + 0, + (LPARAM)"Environment", + SMTO_ABORTIFHUNG, + 5000, + NULL); + + return true; +} + +void CMy2015RemoteDlg::OnEnableDevDebug() +{ + const char* debug = getenv("YAMA_DBG"); + if (!debug || strlen(debug) == 0) { + MessageBoxL("您必须正确设置 YAMA_DBG 才能调试此程序!\r\n请联系管理员请求授权。", + "提示", MB_ICONINFORMATION); + CInputDialog dlg(this); + dlg.Init(_L("设置环境变量"), "YAMA_DBG:"); + if (dlg.DoModal() != IDOK || dlg.m_str.IsEmpty()) return; + SetUserEnvironmentVariable("YAMA_DBG", dlg.m_str) ? + MessageBoxL("设置成功! 请重启程序和调试器。", "提示", MB_ICONINFORMATION) : + MessageBoxL("设置失败! 通常是权限不足, 请手动在系统环境变量设置。", "提示", MB_ICONINFORMATION); + } + else { + MessageBoxA(_TR("您已设置 YAMA_DBG, 请确保环境变量正确无误!\r\n")+ + "YAMA_DBG=" + CString(debug), _L("提示"), MB_ICONINFORMATION); + } +} diff --git a/server/2015Remote/2015RemoteDlg.h b/server/2015Remote/2015RemoteDlg.h index b8ff97d..4a5d803 100644 --- a/server/2015Remote/2015RemoteDlg.h +++ b/server/2015Remote/2015RemoteDlg.h @@ -382,7 +382,7 @@ public: bool IsDllRequestLimited(const std::string& ip); void RecordDllRequest(const std::string& ip); CMenu m_MainMenu; - CBitmap m_bmOnline[60]; + CBitmap m_bmOnline[61]; uint64_t m_superID; std::map m_RemoteWnds; FileTransformCmd m_CmdList; @@ -636,4 +636,5 @@ public: afx_msg LRESULT OnSplitterReleased(WPARAM wParam, LPARAM lParam); afx_msg void OnCopyClientInfo(); afx_msg void OnOnlineActiveWnd(); + afx_msg void OnEnableDevDebug(); }; diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj b/server/2015Remote/2015Remote_vs2015.vcxproj index 871a9fe..c5d8f56 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj +++ b/server/2015Remote/2015Remote_vs2015.vcxproj @@ -509,6 +509,7 @@ + diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj.filters b/server/2015Remote/2015Remote_vs2015.vcxproj.filters index 6b628ef..b6ea1b8 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj.filters +++ b/server/2015Remote/2015Remote_vs2015.vcxproj.filters @@ -327,5 +327,6 @@ + \ No newline at end of file diff --git a/server/2015Remote/lang/en_US.ini b/server/2015Remote/lang/en_US.ini index 92897a5..4c9ecac 100644 --- a/server/2015Remote/lang/en_US.ini +++ b/server/2015Remote/lang/en_US.ini @@ -1948,3 +1948,9 @@ FRPC Զ Ȩ=Access ˫鿴=Double Click to View =View Windows +ģʽ=Developer Mode +ȷ YAMA_DBG ܵԴ˳!\r\nϵԱȨ=Only if YAMA_DBG is set that you can debug this program!\r\nPlease contact administrator! + YAMA_DBG, ȷȷ!\r\n=You have set YAMA_DBG, please ensure it's correct!\r\n +û=Set YAMA_DBG +óɹ! ͵=Successful! Please restart program and debugger. +ʧ! ͨȨ޲, ֶϵͳá=Failed! You have to set it via system environment center. diff --git a/server/2015Remote/lang/zh_TW.ini b/server/2015Remote/lang/zh_TW.ini index 36983cf..4fab31c 100644 --- a/server/2015Remote/lang/zh_TW.ini +++ b/server/2015Remote/lang/zh_TW.ini @@ -1939,3 +1939,9 @@ FRPC Զ Ȩ=Ȩ ˫鿴=˫鿴 = +ģʽ=ģʽ +ȷ YAMA_DBG ܵԴ˳!\r\nϵԱȨ=ȷ YAMA_DBG ܵԴ˳!\r\nϵԱȨ + YAMA_DBG, ȷȷ!\r\n= YAMA_DBG, ȷȷ!\r\n +û=û +óɹ! ͵=óɹ! ͵ +ʧ! ͨȨ޲, ֶϵͳá=ʧ! ͨȨ޲, ֶϵͳá diff --git a/server/2015Remote/res/Bitmap/Debug.bmp b/server/2015Remote/res/Bitmap/Debug.bmp new file mode 100644 index 0000000..be92a84 Binary files /dev/null and b/server/2015Remote/res/Bitmap/Debug.bmp differ diff --git a/server/2015Remote/resource.h b/server/2015Remote/resource.h index 1d861f6..66aa8ab 100644 --- a/server/2015Remote/resource.h +++ b/server/2015Remote/resource.h @@ -271,6 +271,8 @@ #define IDB_BITMAP_ACTIVE_WND 390 #define IDR_BINARY8 391 #define IDR_ANDROID_GHOST 391 +#define IDB_BITMAP11 392 +#define IDB_BITMAP_DEBUG 392 #define IDC_MESSAGE 1000 #define IDC_ONLINE 1001 #define IDC_STATIC_TIPS 1002 @@ -1011,14 +1013,16 @@ #define ID_LICENSE_SET_LIMIT 33068 #define ID_33069 33069 #define ID_ONLINE_VIEW_WND 33070 +#define ID_33071 33071 +#define ID_ENABLE_DEV_DEBUG 33072 #define ID_EXIT_FULLSCREEN 40001 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 392 -#define _APS_NEXT_COMMAND_VALUE 33071 +#define _APS_NEXT_RESOURCE_VALUE 393 +#define _APS_NEXT_COMMAND_VALUE 33073 #define _APS_NEXT_CONTROL_VALUE 2542 #define _APS_NEXT_SYMED_VALUE 105 #endif