Впервые со времён Windows 95 решил убрать кнопку Пуск

Не, ну накой она нужна? Если все рабочие приложения на панели задач, как на маке, какой от неё толк? Речь о Win10, так как Win11 ставить неохота, для тестов своих скриптов и 10 хватает.

Впервые со времён Windows 95 решил убрать кнопку Пуск

Кота за яйца тянуть не будем. Вот код на C++ main.cpp:

#include <windows.h> #include <iostream> #include <tlhelp32.h> int main() { // ШАГ 1. Проверяем, работает ли уже копия программы DWORD currentPid = GetCurrentProcessId(); WCHAR currentExeName[MAX_PATH]; GetModuleFileNameW(NULL, currentExeName, MAX_PATH); // Вырезаем только имя файла из полного пути WCHAR* exeName = wcsrchr(currentExeName, L'\\'); if (exeName) exeName++; else exeName = currentExeName; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot == INVALID_HANDLE_VALUE) return false; PROCESSENTRY32W pe; pe.dwSize = sizeof(PROCESSENTRY32W); bool found = false; if (Process32FirstW(hSnapshot, &pe)) { do { // Если имя процесса совпадает, но это НЕ наш текущий процесс if (wcscmp(pe.szExeFile, exeName) == 0 && pe.th32ProcessID != currentPid) { HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pe.th32ProcessID); if (hProcess) { // Закрываем фоновый процесс TerminateProcess(hProcess, 0); CloseHandle(hProcess); // 1. Находим главное окно Панели задач HWND hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL); if (hTrayWnd != NULL) { // 2. Находим кнопку Пуск HWND hStartBtn = FindWindowExW(hTrayWnd, NULL, L"Button", NULL); if (hStartBtn == NULL) hStartBtn = FindWindowExW(hTrayWnd, NULL, L"Start", NULL); // 3. Находим блок с иконками программ (ReBarWindow32) HWND hReBar = FindWindowExW(hTrayWnd, NULL, L"ReBarWindow32", NULL); if (hStartBtn != NULL && hReBar != NULL) { // Узнаем текущие размеры блока с программами RECT reBarRect; GetWindowRect(hReBar, &reBarRect); // Переводим глобальные координаты экрана в локальные координаты внутри Панели задач POINT pt = { reBarRect.left, reBarRect.top }; ScreenToClient(hTrayWnd, &pt); int width = reBarRect.right - reBarRect.left; int height = reBarRect.bottom - reBarRect.top; // Показываем кнопку Пуск ShowWindow(hStartBtn, SW_SHOW); // Возвращаем блок с программами на его законное место (X = 48 пикселя от края - 2 пикселя левой рамки) // Уменьшаем ширину обратно MoveWindow(hReBar, 48 - 2, pt.y, width - 51, height, TRUE); // Принудительно приказываем Панели задач перерисоваться InvalidateRect(hTrayWnd, NULL, TRUE); UpdateWindow(hTrayWnd); std::cout << "Restored to default" << std::endl; } } found = true; } } } while (Process32NextW(hSnapshot, &pe)); } CloseHandle(hSnapshot); if (found) { return 0; } // ШАГ 2. Если это первый запуск, уходим в бесконечный цикл контролирования панели задач while (true) { // 1. Находим главное окно Панели задач HWND hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL); if (hTrayWnd != NULL) { // 2. Находим кнопку Пуск HWND hStartBtn = FindWindowExW(hTrayWnd, NULL, L"Button", NULL); if (hStartBtn == NULL) hStartBtn = FindWindowExW(hTrayWnd, NULL, L"Start", NULL); // 3. Находим блок с иконками программ (ReBarWindow32) HWND hReBar = FindWindowExW(hTrayWnd, NULL, L"ReBarWindow32", NULL); if (hStartBtn != NULL && hReBar != NULL) { // Узнаем текущие размеры блока с программами RECT reBarRect; GetWindowRect(hReBar, &reBarRect); // Переводим глобальные координаты экрана в локальные координаты внутри Панели задач POINT pt = { reBarRect.left, reBarRect.top }; ScreenToClient(hTrayWnd, &pt); int width = reBarRect.right - reBarRect.left; int height = reBarRect.bottom - reBarRect.top; // Сдвигаем блок с программами, если кнопка всё еще видима ИЛИ если координаты блока сбросились (не равны -3) if (IsWindowVisible(hStartBtn) || pt.x != -3) { // Скрываем кнопку Пуск ShowWindow(hStartBtn, SW_HIDE); // Двигаем блок с программами в самый левый край (X = -3) // И увеличиваем его ширину на 51 пикселей (48 размер кнопки Пуск + 3 отступ), чтобы иконки не сжались MoveWindow(hReBar, -3, pt.y, width + 51, height, TRUE); // Принудительно приказываем Панели задач перерисоваться InvalidateRect(hTrayWnd, NULL, TRUE); UpdateWindow(hTrayWnd); std::cout << "Hidden and shifted" << std::endl; } } else { std::cout << "Elements not found" << std::endl; return 1; } } else { std::cout << "Tray not found" << std::endl; return 1; } // Засыпаем на 100 миллисекунд // Благодаря этому программа потребляет 0% процессора и 0.5 МБ оперативной памяти Sleep(100); } return 0; }

Следуем советам нейронки и ставим компилятор через MSYS2:

Впервые со времён Windows 95 решил убрать кнопку Пуск

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

Путь ещё можно прописать так: ПКМ на Мой компьютер → Свойства → справа Дополнительные параметры системы → внизу Параметры среды.

Компилируем:

Впервые со времён Windows 95 решил убрать кнопку Пуск

g++ main.cpp -o shift_start.exe -mwindows

Закидываем экзешник в папку Автозагрузки:

Впервые со времён Windows 95 решил убрать кнопку Пуск

shell:startup

Если второй раз запустить экзешник, кнопка Пуск появится вновь. Либо можно перезапустить Проводник в Диспетчере задач.

Всё. Поздравляю! Теперь ты официально C++ кодер наносек.

199
9
7
7
4
2
1
1
1
1
1