Как стать автором
Обновить

Интересное решение захламленности робочего стола Windows 11

Уровень сложностиПростой

Всем привет, это моя первая статья на Хабр, и она будет о том, как я решил проблему того, что все любят всё грузить на рабочий стол.

спойлер моего решения, это хоткеи на на "панели задач"
спойлер моего решения, это хоткеи на на "панели задач"

Все исходники, а также инструкция доступны на Github.

Объяснение к сокращенному термину ПКМ — «правая кнопка мыши».

Все мы люди, и часто нам нужно все структурировать, но мы ленивые создания, и часто мы не хотим этого делать, а просто все закидываем куда попало и потом не можем ничего найти. Если ты узнал себя, то эта статья именно для тебя.

Давайте перейдем к делу и распишем проблемы, с которыми мы сталкиваемся:

  1. Куча файлов на рабочем столе;

  2. Непонятность, что и к чему принадлежит, если не проименовал корректно;

  3. Как ни крути, придется все сортировать.

Что должно получиться:

  1. Продолжать грузить всё на рабочий стол;

  2. Чистый рабочий стол;

  3. Легко всё найти, даже если пришел час чистить рабочий стол.

Перед всем благодарность OpenAI за помощь в написании скрипта, и как вы понимаете, мы будем использовать встроенные утилиты Windows, а именно PowerShell.

Как я видел реализацию, на панели пуска должны быть кнопки, чтобы быстро взаимодействовать с моим решением, и, как понимаете, я этого добился.

Первый раздел. Решение вопроса программно и код

Что если папка и будет рабочим столом?

Я проверил, и действительно, на рабочий стол можно установить любую папку. Это можно сделать, перейдя в проводник и зайдя в его свойства,затем раздел «Расположение».

Но мы же не будем постоянно менять папку, захламлять, и потом снова менять и захламлять, поэтому я нашел решение по автоматизации этого вопроса. Используя PowerShell и GPT, я узнал, что в реестре прописывается конечная папка. GPT выдал такое:

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders | Desktop
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders | Desktop

Почему пути два, я не знаю, но это сейчас и не важно. Еще с курсов университета я знал, что PowerShell могуч, и я решил автоматизировать этот процесс.

Краткое пояснение работы того, как я себе это представлял.

  1. У нас должно быть два скрипта:

    • один, который создает папку и делает ее рабочим столом;

    • второй работает как кнопка "вернуться на начальный рабочий стол" и назад в созданную папку.

  2. то должны быть кнопки на панели пуска

  1. Блок с кодом и пояснением, который создает папку и делает ее рабочим столом.

# Получаем текущий путь рабочего стола
$currentDesktopPath = [Environment]::GetFolderPath("Desktop")

# Определяем стандартный путь рабочего стола
$defaultDesktopPath = "C:\Users\$env:USERNAME\Desktop"

# Проверяем, является ли текущий рабочий стол стандартным
if ($currentDesktopPath -eq $defaultDesktopPath) {
    # Если рабочий стол стандартный, создаём новую папку
    $newFolderName = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
    $newFolderPath = Join-Path $currentDesktopPath $newFolderName

    # Создаём новую папку
    New-Item -ItemType Directory -Path $newFolderPath

    # Устанавливаем новую папку как рабочий стол
    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Desktop" -Value $newFolderPath
    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" -Name "Desktop" -Value $newFolderPath

    # Перезапускаем Explorer
    Stop-Process -Name explorer -Force

    Write-Output "Рабочий стол изменён на новую папку: $newFolderPath"
} else {
    # Если рабочий стол не стандартный, завершаем выполнение
    Write-Output "Текущий рабочий стол не является стандартным. Операция отменена."
}

Вкратце о реализованных идеях:

  • защита от дурака, а именно, невозможно создать рабочий стол в рабочем столе в рабочем столе и т. д., можно только один раз, это сделано чтобы было удобно;

  • папка именуется по дате и времени создания;

  • подсказки в коде.

2. Блок с кодом и пояснением, который работает как кнопка «вернуться на начальный рабочий стол» и обратно в созданную папку:

# Определяем текущий рабочий стол из реестра
$currentDesktopFromRegistry = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders").Desktop

# Определяем стандартный путь к рабочему столу
$defaultDesktopPath = "C:\Users\$env:USERNAME\Desktop"

# Получаем текущую дату в формате yyyy-MM-dd
$currentDate = (Get-Date).ToString("yyyy-MM-dd")

# Проверяем, текущий ли рабочий стол — это стандартный Desktop
if ($currentDesktopFromRegistry -ieq $defaultDesktopPath) {
    Write-Output "Текущий рабочий стол — стандартный Desktop: $defaultDesktopPath"

    # Получаем список всех папок на рабочем столе
    $folders = Get-ChildItem -Path $defaultDesktopPath -Directory

    # Ищем папку, имя которой начинается с текущей даты
    $targetFolder = $folders | Where-Object { $_.Name -like "$currentDate*" }

    # Получаем список всех папок на рабочем столе
$folders = Get-ChildItem -Path $defaultDesktopPath -Directory

# Ищем папки, имя которых начинается с текущей даты
$targetFolders = $folders | Where-Object { $_.Name -like "$currentDate*" }

    if ($targetFolders) {
        # Сортируем найденные папки по времени создания в порядке убывания
        $latestFolder = $targetFolders | Sort-Object CreationTime -Descending | Select-Object -First 1

        # Если папка найдена, используем её как рабочий стол
        $newDesktopPath = $latestFolder.FullName
        Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Desktop" -Value $newDesktopPath
        Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" -Name "Desktop" -Value $newDesktopPath

        # Перезапускаем Explorer
        Stop-Process -Name explorer -Force
        Write-Output "Рабочий стол изменён на папку: $newDesktopPath"
    } else {
        Write-Output "Папка, начинающаяся с текущей даты ($currentDate), не найдена на рабочем столе."
    }

} else {
    Write-Output "Текущий рабочий стол отличается от стандартного Desktop. Возвращаемся к стандартному пути."

    # Устанавливаем стандартный Desktop как рабочий стол
    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Desktop" -Value $defaultDesktopPath
    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" -Name "Desktop" -Value $defaultDesktopPath

    # Перезапускаем Explorer
    Stop-Process -Name explorer -Force
    Write-Output "Рабочий стол возвращён в стандартное место: $defaultDesktopPath"
}

Вкратце о реализованых идеях:

  • Главным рабочим столом должен быть дефолтный стол (папка Desktop);

  • ходить туда-сюда;

  • та кнопка не работает, если некуда возвращаться, чтобы ПК не говорил "у мене є кализия".

Второй раздел. Создание кнопок на панели задач

По умолчанию, Windows запрещает создание стояих кастомных ярлыков или чего-либо еще на панели задач. Но спасибо, Microsoft, что ты не закрытый iPhone или Android.

Как я решил проблему: так как у нас изначально код — это скрипт PowerShell, а PowerShell это программа, то есть мы можем создать ярлык запуска PowerShell и поместить его в каталог.

C:\ProgramData\Microsoft\Windows\Start Menu\Programs

В этом каталоге хранятся все ярлыки программ, поэтому мы создаем ярлык, предварительно поместив все наши файлы в созданную папку "script". Это сделано для удобства.

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\script

На рабочем столе создаем ярлыки.

ПКМ -> Создать -> Ярлык

В поле "укажите расположение объекта" пишем:

   C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoProfile -File "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\script\back.ps1"

в поле введите имя для ярлыка пишем:

back

Готово.

Я создал иконки для этих действий, поэтому мы можем сделать все красиво:

ПКМ (по ярлыку) -> Свойства -> Сменить значок -> Обзор..

Сверху в проводнике вставьте скопированный путь.

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\script

Выберите значок BACK.ico

ПКМ -> Создать -> Ярлык

В поле "укажите расположение объекта" пишем:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoProfile -File "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\script\add.ps1"

в поле введите имя для ярлыка пишем:

add

Готово.

Повторите манипуляции со значком выберя иконку ADD.ico.

Переносим ярлыки в папку:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs

После этих манипуляций у вас в Пуске, в программах, появятся два ярлыка. Их можно закрепить на рабочем столе.

Пуск -> Все приложения -> ПКМ по значку -> Дополнительно -> Закрепить на панели задач.

Поздравляю, вы сделали свою жизнь чуточку проще! Если вам понравилась идея или у вас есть дополнения и предложения, пожалуйста, пишите их на моем репозитории на GitHub. Будем развивать эту концепцию вместе!

Ссылка на скачивание с GitHub

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.