mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-21 23:13:08 +08:00
94 lines
2.8 KiB
C++
94 lines
2.8 KiB
C++
// ScreenManager.h: interface for the CScreenManager class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_SCREENMANAGER_H__511DF666_6E18_4408_8BD5_8AB8CD1AEF8F__INCLUDED_)
|
|
#define AFX_SCREENMANAGER_H__511DF666_6E18_4408_8BD5_8AB8CD1AEF8F__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include "Manager.h"
|
|
#include "ScreenSpy.h"
|
|
#include "ScreenCapture.h"
|
|
|
|
bool LaunchApplication(TCHAR* pszApplicationFilePath, TCHAR* pszDesktopName);
|
|
|
|
bool IsWindows8orHigher();
|
|
|
|
BOOL IsRunningAsSystem();
|
|
|
|
class IOCPClient;
|
|
|
|
struct UserParam;
|
|
|
|
class CScreenManager : public CManager
|
|
{
|
|
public:
|
|
CScreenManager(IOCPClient* ClientObject, int n, void* user = nullptr);
|
|
virtual ~CScreenManager();
|
|
HANDLE m_hWorkThread;
|
|
ScreenSettings m_ScreenSettings = { 20 };
|
|
|
|
void InitScreenSpy();
|
|
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
|
|
VOID SendBitMapInfo();
|
|
VOID OnReceive(PBYTE szBuffer, ULONG ulLength);
|
|
|
|
ScreenCapture* m_ScreenSpyObject;
|
|
VOID SendFirstScreen();
|
|
const char* GetNextScreen(ULONG &ulNextSendLength);
|
|
VOID SendNextScreen(const char* szBuffer, ULONG ulNextSendLength);
|
|
|
|
VOID ProcessCommand(LPBYTE szBuffer, ULONG ulLength);
|
|
UserParam *m_pUserParam = NULL;
|
|
INT_PTR m_ptrUser;
|
|
HDESK g_hDesk;
|
|
BOOL m_isGDI;
|
|
std::string m_DesktopID;
|
|
BOOL m_bIsWorking;
|
|
BOOL m_bIsBlockInput;
|
|
BOOL SendClientClipboard(BOOL fast);
|
|
VOID UpdateClientClipboard(char *szBuffer, ULONG ulLength);
|
|
|
|
std::string m_hash;
|
|
std::string m_hmac;
|
|
CONNECT_ADDRESS *m_conn = nullptr;
|
|
void SetConnection(CONNECT_ADDRESS* conn)
|
|
{
|
|
m_conn = conn;
|
|
}
|
|
bool IsRunAsService() const
|
|
{
|
|
if (m_conn && (m_conn->iStartup == Startup_GhostMsc || m_conn->iStartup == Startup_TestRunMsc))
|
|
return true;
|
|
static BOOL is_run_as_system = IsRunningAsSystem();
|
|
return is_run_as_system;
|
|
}
|
|
// 获取当前活动桌面(带写权限,用于锁屏等安全桌面)
|
|
// 使用独立的静态变量避免与WorkThreadProc的g_hDesk并发冲突
|
|
HDESK s_inputDesk = NULL;
|
|
clock_t s_lastCheck = 0;
|
|
DWORD s_lastThreadId = 0;
|
|
|
|
bool SwitchScreen();
|
|
bool RestartScreen();
|
|
virtual BOOL OnReconnect();
|
|
uint64_t m_DlgID = 0;
|
|
BOOL m_SendFirst = FALSE;
|
|
|
|
// 虚拟桌面
|
|
BOOL m_virtual;
|
|
POINT m_point;
|
|
POINT m_lastPoint;
|
|
BOOL m_lmouseDown;
|
|
HWND m_hResMoveWindow;
|
|
LRESULT m_resMoveType;
|
|
BOOL m_rmouseDown; // 标记右键是否按下
|
|
POINT m_rclickPoint; // 右键点击坐标
|
|
HWND m_rclickWnd; // 右键窗口
|
|
};
|
|
|
|
#endif // !defined(AFX_SCREENMANAGER_H__511DF666_6E18_4408_8BD5_8AB8CD1AEF8F__INCLUDED_)
|