├── Main.cpp └── README.md /Main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | //Create a new desktop or open an existing one 5 | HDESK CreateHiddenDesktop(CHAR *desktop_name) 6 | { 7 | CHAR explorer_path[MAX_PATH]; 8 | HDESK hidden_desktop = NULL, original_desktop; 9 | STARTUPINFOA startup_info = {0}; 10 | PROCESS_INFORMATION process_info = {0}; 11 | 12 | ExpandEnvironmentStringsA("%windir%\\explorer.exe", explorer_path, MAX_PATH-1); 13 | 14 | hidden_desktop = OpenDesktopA(desktop_name, NULL, FALSE, GENERIC_ALL); 15 | if(!hidden_desktop) 16 | { 17 | hidden_desktop = CreateDesktopA(desktop_name, NULL, NULL, 0, GENERIC_ALL, NULL); 18 | if(hidden_desktop) 19 | { 20 | original_desktop = GetThreadDesktop(GetCurrentThreadId()); 21 | 22 | if(SetThreadDesktop(hidden_desktop)) 23 | { 24 | startup_info.cb = sizeof(startup_info); 25 | startup_info.lpDesktop = desktop_name; 26 | 27 | //We need to create an explorer.exe in the context of the new desktop for start menu, etc 28 | CreateProcessA(explorer_path, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startup_info, &process_info); 29 | 30 | SetThreadDesktop(original_desktop); 31 | } 32 | } 33 | } 34 | return hidden_desktop; 35 | } 36 | 37 | void main() 38 | { 39 | HDESK original_desktop, hidden_desktop; 40 | 41 | hidden_desktop = CreateHiddenDesktop("MalwareTech_Hidden"); 42 | original_desktop = GetThreadDesktop(GetCurrentThreadId()); 43 | 44 | printf("Entering hidden desktop\n"); 45 | 46 | //Need to switch thread into context of new desktop to register hotkeys 47 | SetThreadDesktop(hidden_desktop); 48 | SwitchDesktop(hidden_desktop); 49 | 50 | if(RegisterHotKey(NULL, 1, MOD_CONTROL | MOD_ALT | MOD_NOREPEAT, 0x45)) 51 | { 52 | MSG msg = {0}; 53 | while(GetMessage(&msg, NULL, 0, 0) != 0) 54 | { 55 | if(msg.message == WM_HOTKEY) 56 | { 57 | printf("Exiting hidden desktop\n"); 58 | SwitchDesktop(original_desktop); 59 | break; 60 | } 61 | } 62 | } 63 | 64 | CloseHandle(hidden_desktop); 65 | getchar(); 66 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CreateDesktop 2 | **Example application for creating multiple desktops on Windows** 3 | 4 | Creates a new desktop named "MalwareTech_Hidden" and switches into it (You can witch back to the original dekstop with the hotkey CTRL + ALT + E) 5 | 6 | --------------------------------------------------------------------------------