C|C++ Hidden Desktop

Mnogoznall

Пользователь
27 Ноя 2018
274
320
150
dwh.pw
C++:
#include <Windows.h>
#include <stdio.h>
HDESK CreateHiddenDesktop(CHAR *desktop_name)
{
    CHAR explorer_path[MAX_PATH];
    HDESK hidden_desktop = NULL, original_desktop;
    STARTUPINFOA startup_info = {0};
    PROCESS_INFORMATION process_info = {0};
    ExpandEnvironmentStringsA("%windir%\\explorer.exe", explorer_path, MAX_PATH-1);
    hidden_desktop = OpenDesktopA(desktop_name, NULL, FALSE, GENERIC_ALL);
    if(!hidden_desktop)
    {
        hidden_desktop = CreateDesktopA(desktop_name, NULL, NULL, 0, GENERIC_ALL, NULL);
        if(hidden_desktop)
        {
            original_desktop = GetThreadDesktop(GetCurrentThreadId());
            if(SetThreadDesktop(hidden_desktop))
            {
                startup_info.cb = sizeof(startup_info);
                startup_info.lpDesktop = desktop_name;
                CreateProcessA(explorer_path, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startup_info, &process_info);
                SetThreadDesktop(original_desktop);
            }
        }
    }
    return hidden_desktop;
}
void main()
{
    HDESK original_desktop, hidden_desktop;
    hidden_desktop = CreateHiddenDesktop("Hidden");
    original_desktop = GetThreadDesktop(GetCurrentThreadId());
    printf("Entering hidden desktop\n");
    SetThreadDesktop(hidden_desktop);
    SwitchDesktop(hidden_desktop);
    if(RegisterHotKey(NULL, 1, MOD_CONTROL | MOD_ALT | MOD_NOREPEAT, 0x45))
    {
        MSG msg = {0};
        while(GetMessage(&msg, NULL, 0, 0) != 0)
        {
            if(msg.message == WM_HOTKEY)
            {
                printf("Exiting hidden desktop\n");
                SwitchDesktop(original_desktop);
                break;
            }
        }
    }
    CloseHandle(hidden_desktop);
    getchar();
}