慎用

#include<bits/stdc++.h>
#include<windows.h>
#include<tlhelp32.h>
#include<tchar.h>
#include<ShellAPI.h>
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string>
#include<conio.h>
using namespace std;
void color (int a) {//颜色函数
	SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), a);
}
string jylj = "C:\\Program Files (x86)\\Mythware\\极域课堂管理系统软件v6.0 2020豪华版\\StudentMain.exe";
void gqhf(bool ng){
	char y = '"';
	const char *s;
	char ans[109];
	string t = jylj;
	ans[0] = '"';
	for(int i = 0;i < t.size();i++){
		ans[i+1] = t[i];
	}
	ans[t.size()+1] = '"';
	s = ans;
	if(ng == 1){
		system("taskkill /f /im StudentMain.exe /t");
	}
	else{
		system(s);
	}  
}
typedef struct tagWNDINFO
{
	DWORD dwProcessId;
	HWND hWnd;
} WNDINFO, *LPWNDINFO;
//枚举窗口过程
static BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam)
{
	DWORD dwProcessId;
	GetWindowThreadProcessId(hWnd, &dwProcessId);
	LPWNDINFO pInfo = (LPWNDINFO)lParam;
 
	if (dwProcessId == pInfo->dwProcessId)
	{
		pInfo->hWnd = hWnd;
		return FALSE;
	}
	return TRUE;
}
//获取主窗口句柄
static HWND GetProcessMainWnd()
{
	DWORD dwProcessId=::GetCurrentProcessId();
	WNDINFO wi;
	wi.dwProcessId = dwProcessId;
	wi.hWnd = NULL;
	EnumWindows(EnumProc, (LPARAM)&wi);
	return wi.hWnd;
}
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
void fz(string in)    
{
    if(!OpenClipboard(NULL)|| !EmptyClipboard())    
    {   
        printf("打开或清空剪切板出错!\n");   
        return;   
    }
    HGLOBAL hMen;   
    hMen = GlobalAlloc(GMEM_MOVEABLE, ((strlen(in.c_str())+1)*sizeof(TCHAR))); 
    if (!hMen)   
    {   
        printf("分配全局内存出错!\n");    
        CloseClipboard();   
        return;         
    } 
    LPSTR lpStr = (LPSTR)GlobalLock(hMen);    
    memcpy(lpStr,in.c_str(), ((strlen(in.c_str()))*sizeof(TCHAR)));  
    lpStr[strlen(in.c_str())] = (TCHAR)0;   
    GlobalUnlock(hMen);   
    SetClipboardData(CF_TEXT, hMen);   
    CloseClipboard();   
    return;   
}  
void EnableDebugPriv(){
	HANDLE hToken;
	TOKEN_PRIVILEGES tkp;
	OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
	LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
	tkp.PrivilegeCount = 1;
	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, NULL);
	CloseHandle(hToken);
}
void hide()
{
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(hout, &cursor_info);
}
bool getProcess(const char *procressName)                //此函数进程名不区分大小写
{
    char pName[MAX_PATH];                                //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
    strcpy(pName,procressName);                            //拷贝数组
    CharLowerBuff(pName,MAX_PATH);                        //将名称转换为小写
    PROCESSENTRY32 currentProcess;                        //存放快照进程信息的一个结构体
    currentProcess.dwSize = sizeof(currentProcess);        //在使用这个结构之前,先设置它的大小
    HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照
 
    if (hProcess == INVALID_HANDLE_VALUE)
    {
        return false;
    }
 
    bool bMore=Process32First(hProcess,&currentProcess);        //获取第一个进程信息
    while(bMore)
    {
        CharLowerBuff(currentProcess.szExeFile,MAX_PATH);        //将进程名转换为小写
        if (strcmp(currentProcess.szExeFile,pName)==0)            //比较是否存在此进程
        {
            CloseHandle(hProcess);                                //清除hProcess句柄
            return true;
        }
        bMore=Process32Next(hProcess,&currentProcess);            //遍历下一个
    }
 
    CloseHandle(hProcess);    //清除hProcess句柄
    return false;
}
bool IsProcessRunAsAdmin()
{
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    PSID AdministratorsGroup;
    BOOL b = AllocateAndInitializeSid(
        &NtAuthority,
        2,
        SECURITY_BUILTIN_DOMAIN_RID,
        DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0,
        &AdministratorsGroup);
    if(b)
    {
        CheckTokenMembership(NULL, AdministratorsGroup, &b);
        FreeSid(AdministratorsGroup);
    }
    return b == TRUE;
}
short GetAdmin(LPCSTR Param, int Showcmd)
{
    if (IsProcessRunAsAdmin())
        return 0;
    TCHAR Path[MAX_PATH];
    ZeroMemory(Path, MAX_PATH);
    ::GetModuleFileName(NULL, Path, MAX_PATH);           //获取程序路径
    HINSTANCE res;
    res = ShellExecute(NULL, "runas", Path, Param, NULL, Showcmd);
    return 0;
}
int main()
{
	HWND hWnd = ::GetForegroundWindow();
	if(getProcess("StudentMain.exe")){
		while(1){
			::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
			cout<<"检测到极域正在运行,按b以开启极域模式,按c取消";
			if(GetAsyncKeyState('B')){
				system("cls");
				Sleep(100);
				hide();
				bool yx = 0;
				bool xd = 1;
				while(1){
					::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
					cin.clear();
					if(getProcess("StudentMain.exe")){
						cout<<"极域正在运行!\n";
						color(4);
						yx = 1;
					}
					else{
						cout<<"极域未运行。\n";
						color(10);
						yx = 0;
					}
					cout<<"[1] 杀死极域\n[2] 运行极域\n[3] 重启极域\n[4] 复制极域万能密码\n[5] 挂起与恢复极域\n[6] 最小化本窗口\n[7] 最小化置顶窗口\n[8] 打开任务管理器\n[9] 退出此模式\n[q] 打开/关闭 屏幕键盘\n";
					if(GetAsyncKeyState('1')){
						if(yx == 0){
							cout<<"极域未运行!\n";  
						}
						else{
							Sleep(100); 
							cout<<"普通taskkill杀极域输入1,ntsd强制杀极域输入(需要确保包含C:/windows/ntsd.exe文件)2:";
							if(GetAsyncKeyState('1')){
								system("taskkill /F /IM StudentMain.exe /T");
							}
							else if(GetAsyncKeyState('2')){
								system("./ntsd.exe -c q -pn studentmain.exe");
							}
							Sleep(100);	
							if(getProcess("StudentMain.exe")){
								cout<<"杀死失败!\n";
							}
							else{
								cout<<"杀死成功!\n";
								cout<<"按1继续";
								Sleep(10);
								while(!GetAsyncKeyState('1')){}
								Sleep(10);
							} 					
						}
						Sleep(10);
					}
					else if(GetAsyncKeyState('2')){
						if(yx == 1){
							cout<<"极域已运行!\n"; 
						}
						else{
							gqhf(0);
							Sleep(100);
							if(getProcess("StudentMain.exe")){
								cout<<"运行成功!\n";
								Sleep(1000);
							}
							else{
								cout<<"运行失败!";
								cout<<"按1继续";
								while(!GetAsyncKeyState('1')){}
								Sleep(10);
							} 					
						}
						Sleep(10);
					}
					else if(GetAsyncKeyState('3')){					
						if(yx == 0){
							cout<<"极域未运行!\n"; 
						}
						else{
							gqhf(1);
							Sleep(100);
							if(getProcess("StudentMain.exe")){
								cout<<"杀死失败!\n";
								Sleep(1000);
							}
							else{
								cout<<"杀死成功!\n";
								gqhf(0);
								Sleep(100);
								if(getProcess("StudentMain.exe")){
									cout<<"运行成功!\n";
									Sleep(1000);
								}
								else{
									cout<<"运行失败!\n";
									cout<<"按1继续";
									while(!GetAsyncKeyState('1')){}
									Sleep(10);
								} 	
							} 					
						}
						Sleep(10);
					}
					else if(GetAsyncKeyState('4')){
						fz("mythware_super_password");
						cout<<"密码已复制!\n"; 
						Sleep(10);
					}
					else if(GetAsyncKeyState('5')){
						cout<<"挂起输入1,恢复输入2";
						while(1){
							::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
							if(GetAsyncKeyState('1')){
								gqhf(1);
								break;
							}
							if(GetAsyncKeyState('2')){
								gqhf(0);
								break;
							}						
						}
						Sleep(10);
					}
					else if(GetAsyncKeyState('6')){
						if(xd){
							ShowWindow(GetProcessMainWnd(),SW_MINIMIZE);
							xd = 0;
						}
						else{
							ShowWindow(GetProcessMainWnd(),SW_MAXIMIZE);
							xd = 1;
						}
						Sleep(100);
					}
					else if(GetAsyncKeyState('7')){
						ShowWindow(GetProcessMainWnd(),SW_MINIMIZE);
						Sleep(100);
						HWND jy = GetForegroundWindow();
						ShowWindow(jy,SW_MINIMIZE);
						Sleep(100);
						cout<<"恢复输入0";
						while(1){
							::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
							if(GetAsyncKeyState('0')){
								ShowWindow(jy,SW_MAXIMIZE);
								break;
							}
							else if(GetAsyncKeyState('6')){
								if(xd){
									ShowWindow(GetProcessMainWnd(),SW_MINIMIZE);
									xd = 0;
								}
								else{
									ShowWindow(GetProcessMainWnd(),SW_MAXIMIZE);
									xd = 1;
								}
								Sleep(10);
							}			
						}
						Sleep(10);
						//ShowWindow(GetProcessMainWnd(),SW_MAXIMIZE);
					}
					else if(GetAsyncKeyState('8')){
						system("C:\\Windows\\System32\\Taskmgr.exe");
						Sleep(10);
					}
					else if(GetAsyncKeyState('9')){
						break;
					}
					else if(GetAsyncKeyState('Q')){
						if(getProcess("osk.exe")){
							system("taskkill /f /im osk.exe /t");
						}
						system("start C:\\Windows\\System32\\osk.exe");
						Sleep(100); 
					}
					Sleep(10);
					system("cls");
				}
				cout<<"已退出!\n";
			}
			else if(GetAsyncKeyState('C')){
				break;
			}
			Sleep(10);
			system("cls");
		}
	}
	system("cls");
	bool sz_exe = 1; 
	bool jy = 1;
	if(IsProcessRunAsAdmin() == 0){
		cout<<"获取管理员权限失败!\n请用管理员模式运行,否则可能无法关闭或打开一些特殊进程!\n";
		Sleep(3000); 
	}
	else{
		cout<<"管理员权限获取成功!\n";
	}
	while(1){
		::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
		string name;
		string jg;
		int in;
		cout<<"进程管理器 V3.1.2\n1.关闭进程\n2.运行进程\n3.重启进程\n4.进程删重\n5.设置\n";
		if(jy){
			cout<<"6.极域模式\n";
		}
		cout<<"Input:";
		cin>>in;
		if(in == 1){
			cout<<"需关闭进程名:";
			if(sz_exe == 1){
				cout<<"(需要加上.exe或其他):";
			}
			else{
				cout<<"(不需要加上.exe,将自动补全):";
			}
			cin>>name;
			if(sz_exe == 0){
				name += ".exe";
			}
			if(!getProcess(name.c_str())){
				cout<<"此程序未运行!\n";
			}
			else{
				jg = "taskkill /F /IM " + name + " /T";
				const char* cname = jg.c_str();
				system(cname);
				Sleep(100);
				if(getProcess(name.c_str())){
					cout<<"杀死失败!\n";
				}
				else{
					cout<<"杀死成功!\n";
				}
			} 
		}
		else if(in == 2){
			cout<<"需运行进程名:";
			if(sz_exe == 1){
				cout<<"(需要加上.exe或其他):";
			}
			else{
				cout<<"(不需要加上.exe,将自动补全):";
			}
			cin>>name;
			if(sz_exe == 0){
				name += ".exe";
			}
			if(getProcess(name.c_str())){
				cout<<"此程序已运行!\n";
			}
			else{
				jg = "start  " + name;
				const char* cname = jg.c_str();
				system(cname);
				Sleep(100);
				if(!getProcess(name.c_str())){
					cout<<"运行失败!\n";
				}
				else{
					cout<<"运行成功!\n";
				}
			} 
		}	
		else if(in == 3){
			cout<<"需重启进程名:";
			if(sz_exe == 1){
				cout<<"(需要加上.exe或其他):";
			}
			else{
				cout<<"(不需要加上.exe,将自动补全):"; 
			}
			cin>>name;
			if(sz_exe == 0){
				name += ".exe";
			}
			if(!getProcess(name.c_str())){
				cout<<"此程序未运行!\n";
			}
			else{
				jg = "taskkill /F /IM " + name + " /T";
				const char* cname = jg.c_str();
				system(cname);
				Sleep(100);
				if(getProcess(name.c_str())){
					cout<<"杀死失败!\n";
				}
				else{
					cout<<"杀死成功!正在准备运行!\n";
					jg = "start  " + name;
					const char* ccname = jg.c_str();
					system(ccname);
					Sleep(100);
					if(!getProcess(name.c_str())){
						cout<<"运行失败!\n";
					}
					else{
						cout<<"运行成功!\n";
					}
				}
			} 
		}	
		else if(in == 4){
			cout<<"查重进程名:";
			cin>>name;
			if(sz_exe == 0){
				name += ".exe";
			}
			if(!getProcess(name.c_str())){
				cout<<"此程序未运行!\n";
			}
			else{
				while(1){
					jg = "./ntsd.exe -c q -pn " + name;
					const char* cname = jg.c_str();
					system(cname);
					if(!getProcess(name.c_str())){
						break;
					}
				}
				cout<<"杀死成功!正在准备运行!\n";
				jg = "start  " + name;
				const char* ccname = jg.c_str();
				system(ccname);
				Sleep(100);
				if(!getProcess(name.c_str())){
					cout<<"运行失败!\n";
				}
				else{
					cout<<"运行成功!\n查重成功!\n";
				}
			} 
		}
		else if(in == 5){
			if(sz_exe){
				cout<<"是否默认加上.exe(是输入1,否则输入0):";
				cin>>sz_exe;
				sz_exe = !sz_exe;
			}
			else{
				cout<<"是否默认不加上.exe(是输入1,否则输入0):";
				cin>>sz_exe;
			}
			if(jy){
				cout<<"是否默认不显示极域模式(包括设置内),但可以输入6(或设置的2)仍可以打开(是输入1,否则输入0):";
				cin>>jy;
				jy = !jy;
			}
			else{
				cout<<"是否默认显示极域模式(包括设置内)(是输入1,否则输入0):";
				cin>>jy;
			}
			cout<<"是否更改极域路径(是输入1):";
			string a;
			cin>>a;
			if(a == "1"){
				cout<<"当前路径:";
				cout<<jylj<<endl;
				cout<<"请输入新路径(斜杠需使用双斜杠):";
				cin.ignore(numeric_limits<streamsize>::max(),'\n');
				getline(cin,jylj);
				cout<<"你输入的路径是:"<<jylj<<endl;
				Sleep(1000);
			}
		}
		else if(in == 6){
			system("cls");
				Sleep(100);
				hide();
				bool yx = 0;
				bool xd = 1;
				while(1){
					::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
					cin.clear();
					if(getProcess("StudentMain.exe")){
						cout<<"极域正在运行!\n";
						color(4);
						yx = 1;
					}
					else{
						cout<<"极域未运行。\n";
						color(10);
						yx = 0;
					}
					cout<<"[1] 杀死极域\n[2] 运行极域\n[3] 重启极域\n[4] 复制极域万能密码\n[5] 挂起与恢复极域\n[6] 最小化本窗口\n[7] 最小化置顶窗口\n[8] 打开任务管理器\n[9] 退出此模式\n[q] 打开/关闭 屏幕键盘\n";
					if(GetAsyncKeyState('1')){
						if(yx == 0){
							cout<<"极域未运行!\n";  
						}
						else{
							Sleep(100); 
							cout<<"普通taskkill杀极域输入1,ntsd强制杀极域输入(需要确保包含C:/windows/ntsd.exe文件)2:";
							if(GetAsyncKeyState('1')){
								system("taskkill /F /IM StudentMain.exe /T");
							}
							else if(GetAsyncKeyState('2')){
								system("./ntsd.exe -c q -pn studentmain.exe");
							}
							Sleep(100);	
							if(getProcess("StudentMain.exe")){
								cout<<"杀死失败!\n";
							}
							else{
								cout<<"杀死成功!\n";
								cout<<"按1继续";
								Sleep(10);
								while(!GetAsyncKeyState('1')){}
								Sleep(10);
							} 					
						}
						Sleep(10);
					}
					else if(GetAsyncKeyState('2')){
						if(yx == 1){
							cout<<"极域已运行!\n"; 
						}
						else{
							gqhf(0);
							Sleep(100);
							if(getProcess("StudentMain.exe")){
								cout<<"运行成功!\n";
								Sleep(1000);
							}
							else{
								cout<<"运行失败!";
								cout<<"按1继续";
								while(!GetAsyncKeyState('1')){}
								Sleep(10);
							} 					
						}
						Sleep(10);
					}
					else if(GetAsyncKeyState('3')){					
						if(yx == 0){
							cout<<"极域未运行!\n"; 
						}
						else{
							gqhf(1);
							Sleep(100);
							if(getProcess("StudentMain.exe")){
								cout<<"杀死失败!\n";
								Sleep(1000);
							}
							else{
								cout<<"杀死成功!\n";
								gqhf(0);
								Sleep(100);
								if(getProcess("StudentMain.exe")){
									cout<<"运行成功!\n";
									Sleep(1000);
								}
								else{
									cout<<"运行失败!\n";
									cout<<"按1继续";
									while(!GetAsyncKeyState('1')){}
									Sleep(10);
								} 	
							} 					
						}
						Sleep(10);
					}
					else if(GetAsyncKeyState('4')){
						fz("mythware_super_password");
						cout<<"密码已复制!\n"; 
						Sleep(10);
					}
					else if(GetAsyncKeyState('5')){
						cout<<"挂起输入1,恢复输入2";
						while(1){
							::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
							if(GetAsyncKeyState('1')){
								gqhf(1);
								break;
							}
							if(GetAsyncKeyState('2')){
								gqhf(0);
								break;
							}						
						}
						Sleep(10);
					}
					else if(GetAsyncKeyState('6')){
						if(xd){
							ShowWindow(GetProcessMainWnd(),SW_MINIMIZE);
							xd = 0;
						}
						else{
							ShowWindow(GetProcessMainWnd(),SW_MAXIMIZE);
							xd = 1;
						}
						Sleep(100);
					}
					else if(GetAsyncKeyState('7')){
						ShowWindow(GetProcessMainWnd(),SW_MINIMIZE);
						Sleep(100);
						HWND jy = GetForegroundWindow();
						ShowWindow(jy,SW_MINIMIZE);
						Sleep(100);
						cout<<"恢复输入0";
						while(1){
							::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
							if(GetAsyncKeyState('0')){
								ShowWindow(jy,SW_MAXIMIZE);
								break;
							}
							else if(GetAsyncKeyState('6')){
								if(xd){
									ShowWindow(GetProcessMainWnd(),SW_MINIMIZE);
									xd = 0;
								}
								else{
									ShowWindow(GetProcessMainWnd(),SW_MAXIMIZE);
									xd = 1;
								}
								Sleep(10);
							}			
						}
						Sleep(10);
						//ShowWindow(GetProcessMainWnd(),SW_MAXIMIZE);
					}
					else if(GetAsyncKeyState('8')){
						system("C:\\Windows\\System32\\Taskmgr.exe");
						Sleep(10);
					}
					else if(GetAsyncKeyState('9')){
						break;
					}
					else if(GetAsyncKeyState('Q')){
						if(getProcess("osk.exe")){
							system("taskkill /f /im osk.exe /t");
						}
						system("start C:\\Windows\\System32\\osk.exe");
						Sleep(100); 
					}
					Sleep(10);
					system("cls");
				}
				cout<<"已退出!\n";
		} 
		system("pause");
		system("cls");
	}
	return 0;
}