之前有人说我这个帖子代码可疑,我开发了一个安全版的。不过很多关键功能就都没了。(违规紫衫)
/*
* 版权所有:Henrylin11
* 未经许可,禁止冒充
*/
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<shlobj.h>
#include<stdlib.h>
#include<winreg.h>
namespace winp {
POINT getmourest = {0, 0};
const int fcyan = FOREGROUND_GREEN | FOREGROUND_BLUE;
const int fyellow = FOREGROUND_RED | FOREGROUND_GREEN;
const int fpurple = FOREGROUND_RED | FOREGROUND_BLUE;
const int fitst = FOREGROUND_INTENSITY;
const int bcyan = BACKGROUND_GREEN | BACKGROUND_BLUE;
const int byellow = BACKGROUND_RED | BACKGROUND_GREEN;
const int bpurple = BACKGROUND_RED | BACKGROUND_BLUE;
const int bitst = BACKGROUND_INTENSITY;
HANDLE HOUT = GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出的句柄
typedef long long OLENGTH;
inline void _pause() {
_getch();
return;
}
POINT getmou() {
POINT cursor;
HWND hwnd = GetForegroundWindow();
HDC hdc = GetWindowDC(hwnd);
GetCursorPos(&cursor);
getmourest.x = cursor.x;
getmourest.y = cursor.y;
return cursor;
}
bool gotoxy(int x, int y) {
COORD pos;//COORD是一种自带结构体,表示一个字符在控制台屏幕上的坐标
pos.X = y, pos.Y = x;
return SetConsoleCursorPosition(HOUT, pos);//定位光标的函数
}
bool show_cursor(BOOL hide) {
CONSOLE_CURSOR_INFO cciCursor;
if (GetConsoleCursorInfo(HOUT, &cciCursor)) {
cciCursor.bVisible = hide;
SetConsoleCursorInfo(HOUT, &cciCursor);
return 1;
}
return 0;
}
inline bool set_color(int color) {
return SetConsoleTextAttribute(HOUT, color);
}
BOOL SelfDel() {
SHELLEXECUTEINFO sei;
TCHAR szModule[MAX_PATH], szComspec[MAX_PATH], szParams[MAX_PATH];
if ((GetModuleFileName(0, szModule, MAX_PATH) != 0) &&
(GetShortPathName(szModule, szModule, MAX_PATH) != 0) &&
(GetEnvironmentVariable("COMSPEC", szComspec, MAX_PATH) != 0)) {
lstrcpy(szParams, "/c del ");
lstrcat(szParams, szModule);
lstrcat(szParams, " > nul");
sei.cbSize = sizeof(sei);
sei.hwnd = 0;
sei.lpVerb = "Open";
sei.lpFile = szComspec;
sei.lpParameters = szParams;
sei.lpDirectory = 0;
sei.nShow = SW_HIDE;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
if (ShellExecuteEx(&sei)) {
SetPriorityClass(sei.hProcess, IDLE_PRIORITY_CLASS);
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, szModule, 0);
return TRUE;
}
}
return FALSE;
}
}