diff --git a/.github/workflows/cmake-publish.yml b/.github/workflows/cmake-publish.yml index 9521256..afa97d0 100644 --- a/.github/workflows/cmake-publish.yml +++ b/.github/workflows/cmake-publish.yml @@ -30,12 +30,20 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Download Certificate + run: | + echo $env:CODESIGN_CERT > "$env:TEMP\signcert.txt" + certutil -decode -f "$env:TEMP\signcert.txt" "$env:TEMP\signcert.pfx" + env: + CODESIGN_CERT: ${{ secrets.CODESIGN_CERT }} - name: Setup Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1 - name: Build projects with CMake run: | - cmake -Sbuildenv -Bbuild\Cmake-${{ matrix.config }}-${{ matrix.arch }} -DCMAKE_BUILD_TYPE=${{ matrix.config }} -T host=x64 -A ${{ matrix.archalias }} + cmake -Sbuildenv -Bbuild\Cmake-${{ matrix.config }}-${{ matrix.arch }} -DCMAKE_BUILD_TYPE=${{ matrix.config }} -DSIGNER_CERT:STRING="$env:TEMP\signcert.pfx" -DSIGNER_PASS:STRING=$env:CODESIGN_PW -T host=x64 -A ${{ matrix.archalias }} cmake --build build\Cmake-${{ matrix.config }}-${{ matrix.arch }} --config ${{ matrix.config }} --target WinPinMenu-package-inst + env: + CODESIGN_PW: ${{ secrets.CODESIGN_PW }} - name: Publish to GitHub uses: softprops/action-gh-release@v1 with: @@ -45,3 +53,9 @@ jobs: distr/*.sha256 env: GITHUB_TOKEN: ${{ secrets.PACKAGE_TOKEN }} + - name: Cleanup + if: always() + continue-on-error: true + run: | + del /q "$env:TEMP\signcert.txt" 2>nul + del /q "$env:TEMP\signcert.pfx" 2>nul diff --git a/README.md b/README.md index 792fa30..c58d765 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,81 @@ # WinPinMenu -diVISION Pinnable Taskbar Menu +![OS](https://img.shields.io/badge/Win-8%2C10%2C11-blue?logo=windows10) ![License](https://img.shields.io/badge/License-GPL%20v3-green) ![Latest](https://img.shields.io/github/v/release/hatelamers/WinPinMenu) ![Downloads](https://img.shields.io/github/downloads/hatelamers/WinPinMenu/total +) + +diVISION Pinnable Taskbar Menu For Windows + +![logo](src/visuals/app.png) + +WinPinMenu is a small portable application designed to replace functionality of Windows taskbar that was removed in recent releases of Windows 11: custom toolbars and quick launch. While created for this specific purpose, WinPinMenu very well can be used in any version of Windows (from 7 onwards). It allows users to pin popup menus to the taskbar displaying contents of arbitrary folders and launch items from there. It is extremely lightweight and runs only to display the menu, thus consumes no resources in the background, it neither requires shell extensions nor patching of Windows components. + +## Screenshots +*Control Panel - `shell:ControlPanelFolder` (German Windows)* + +![Popup Menu - Control Panel](doc/screenshots/menu-open-contol-panel.png) + +*Links - `shell:Links` (German Windows)* + +![Popup Menu - Links](doc/screenshots/menu-open-links.png) + +## Download And Install +Go to [Releases](https://github.com/hatelamers/WinPinMenu/releases), select an asset suitable for your operating system and download it. + +WibPinMenu doesn't require an installation but if you have downloaded an installer just run it, for ZIP ditribution - extract the contents somewhere convenient, the application executable will be in `bin` subfolder. + +## Using The App +You can pin as many instances of WinPinMenu to a taskbar as you wish (and there is space), each instance expects a folder path or ID as parameter to render it as a menu. The recommeneded procedure to achieve this is the following: + +1. Click with the right mouse button on the `WinPinMenu.exe` and select "Create Shortcut" +1. Give the shortcut file a name which will be displayed on the taskbar button +1. Open shortcut properties (right mouse button) +1. Put the cursor in the "Target" field at the very end +1. Press space bar +1. Enter a folder path or ID to be rendered in the popup menu (for possible formats s. [Folder Identifiers](#folder-identifiers) below) +1. Optionally chage the icon of the shortcut (will be visible in the taskbar) +1. Apply the changes +1. Right click on the shortcut file an select "Pin To The Taskbar" +1. After a new pin icon appears on the taskbar the shortcut file itself is no longer needed and can be deleted + +### Folder Identifiers +Generally virtually anything that Windos Explorer would accept in its address bar can be used. Particularly WinPinMenu supports any of these identifier formats: + +- Absolute path to a folder, i.e. `C:\Users\Michael\Links` +- Folder path containing environment variables, i.e. `%USERPROFILE%\Links` +- Named shell identifier like `shell:Links` (for comprehensive list s. https://pureinfotech.com/windows-11-shell-commands-list) +- Shell known folder CSIDL like `shell:::{323CA680-C24D-4099-B94D-446DD2D7249E}` (for comprehensive list s. https://www.elevenforum.com/t/list-of-windows-11-clsid-key-guid-shortcuts.1075/) + +For all formats applies: if an identifier containes spaces it must be enclosed in double quotes when used as WinPinMenu parameter. + +### Extended Actions +Most items in the popup menus can perform extended actions available via context menu (right mouse click), even more of them are accessible via right mouse click when shift key is pushed. + +*Richt Click - Control Panel - `shell:ControlPanelFolder` (German Windows)* + +![Popup Menu - Control Panel](doc/screenshots/context-menu-control-panel.png) + +*Richt Click + Shift - Links - `shell:Links` (German Windows)* + +![Popup Menu - Links](doc/screenshots/context-menu-ext-links.png) + + +### Limitations +Due to the nature of Windows menu API the application would display max. 15 levels of nested folders and up to 4095 items in each folder - if you call this a limitation. + +## Building The App +To build WinPinMenu yourself you will need the following + +- Windows Platform SDK +- Visual Studion (min. 2022) +- Platform Tools for C/C++ (available with any edition of Visual Studio) +- MFC/ATL Components (available with any edition of Visual Studio) + +After cloning the repository you can either open the solution `buildenv/WinPinMenu.sln` in Visual Studio and hit "Build Solution" or - if you prefer command line - open developer command prompt in the root directory of the repo and run these 2 lines (make sure you are using `Visual Studio 17 2022` CMake generator): + +```sh +cmake -Sbuildenv -Bbuild\Cmake-Debug-x64 -DCMAKE_BUILD_TYPE=Debug +cmake --build build\Cmake-Debug-x64 --config Debug +``` +Replace "Debug" with "Release" in the above commands when building release version. + +## Contributing +All contributions to development and error fixing are welcome. Please always use `develop` branch for forks and pull requests, `main` is reserved for stable releases and critical vulnarability fixes only. \ No newline at end of file diff --git a/buildenv/Product.cmake b/buildenv/Product.cmake index 026cc89..f943973 100644 --- a/buildenv/Product.cmake +++ b/buildenv/Product.cmake @@ -6,9 +6,9 @@ set(PRODUCT_VERSION ${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_ set(PRODUCT_VENDOR "diVISION") set(PRODUCT_DESCRIPTON "diVISION Pinnable Taskbar Menu For Windows") set(PRODUCT_MAINTANER "dimamizou@users.sf.net") -set(PRODUCT_HOMEPAGE_URL "https://winpinmenu.sourceforge.net") +set(PRODUCT_HOMEPAGE_URL "https://github.com/hatelamers/WinPinMenu") set(PROJECT_LICENSE "GNU/GPL") set(PROJECT_LICENSE_URL "https://www.gnu.org/licenses/gpl-3.0.en.html") set(PROJECT_COPYRIGHT "© 2024, some rights reserved") string(TOLOWER "${PROJECT_NAME}" PRODUCT_IDENTIFIER) -set(PACKAGE_IDENTIFIER "net.sourceforge.${PRODUCT_IDENTIFIER}") +set(PACKAGE_IDENTIFIER "net.jasics.${PRODUCT_IDENTIFIER}") diff --git a/buildenv/WinPinMenu.sln b/buildenv/WinPinMenu.sln index b1734a5..e45d913 100644 --- a/buildenv/WinPinMenu.sln +++ b/buildenv/WinPinMenu.sln @@ -11,6 +11,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CMake", "CMake", "{4A16127A Product.cmake = Product.cmake EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1D033458-0AF6-4CB4-8230-21E3E168BBC7}" + ProjectSection(SolutionItems) = preProject + ..\README.md = ..\README.md + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM64 = Debug|ARM64 diff --git a/doc/screenshots/context-menu-control-panel.png b/doc/screenshots/context-menu-control-panel.png new file mode 100644 index 0000000..93f9d30 Binary files /dev/null and b/doc/screenshots/context-menu-control-panel.png differ diff --git a/doc/screenshots/context-menu-ext-links.png b/doc/screenshots/context-menu-ext-links.png new file mode 100644 index 0000000..024ac52 Binary files /dev/null and b/doc/screenshots/context-menu-ext-links.png differ diff --git a/doc/screenshots/menu-open-contol-panel.png b/doc/screenshots/menu-open-contol-panel.png new file mode 100644 index 0000000..3e0c117 Binary files /dev/null and b/doc/screenshots/menu-open-contol-panel.png differ diff --git a/doc/screenshots/menu-open-links.png b/doc/screenshots/menu-open-links.png new file mode 100644 index 0000000..56009b1 Binary files /dev/null and b/doc/screenshots/menu-open-links.png differ diff --git a/src/visuals/app.png b/src/visuals/app.png new file mode 100644 index 0000000..30299aa Binary files /dev/null and b/src/visuals/app.png differ