mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2024-11-28 01:10:55 +01:00
Merge remote-tracking branch 'refs/remotes/origin/master'
# Conflicts: # .github/workflows/build.yml
This commit is contained in:
commit
1fcd7d7322
402
.github/workflows/build.yml
vendored
402
.github/workflows/build.yml
vendored
@ -38,220 +38,220 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Print inputs
|
- name: Print inputs
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo "ref: ${{ github.event.inputs.ref }}"
|
echo "ref: ${{ github.event.inputs.ref }}"
|
||||||
echo "config: ${{ github.event.inputs.config }}"
|
echo "config: ${{ github.event.inputs.config }}"
|
||||||
echo "build_dir: ${{ github.event.inputs.build_dir }}"
|
echo "build_dir: ${{ github.event.inputs.build_dir }}"
|
||||||
|
|
||||||
- name: Checkout latest build and submodules
|
- name: Checkout latest build and submodules
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
if: github.event.inputs.ref == ''
|
if: github.event.inputs.ref == ''
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- name: Checkout specific build and submodules
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
if: github.event.inputs.ref != ''
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.inputs.ref }}
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Add MSBuild to PATH
|
- name: Checkout specific build and submodules
|
||||||
uses: microsoft/setup-msbuild@v2
|
uses: actions/checkout@v4
|
||||||
|
if: github.event.inputs.ref != ''
|
||||||
- name: Declare some variables
|
with:
|
||||||
id: vars
|
ref: ${{ github.event.inputs.ref }}
|
||||||
shell: bash
|
submodules: recursive
|
||||||
run: |
|
|
||||||
echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT
|
|
||||||
echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Enable SimpleWindowSwitcher support for newer Windows SDKs
|
|
||||||
shell: cmd
|
|
||||||
run: |
|
|
||||||
cd libs/sws
|
|
||||||
C:\msys64\usr\bin\wget.exe https://github.com/valinet/sws/commit/972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
|
||||||
C:\msys64\usr\bin\dos2unix.exe 972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
|
||||||
C:\msys64\usr\bin\dos2unix.exe SimpleWindowSwitcher/sws_def.h
|
|
||||||
C:\msys64\usr\bin\patch.exe -N SimpleWindowSwitcher/sws_def.h 972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
|
||||||
C:\msys64\usr\bin\unix2dos.exe SimpleWindowSwitcher/sws_def.h
|
|
||||||
exit /b 0
|
|
||||||
|
|
||||||
- name: Setup NuGet
|
|
||||||
uses: nuget/setup-nuget@v2
|
|
||||||
|
|
||||||
- name: Restore NuGet packages
|
|
||||||
run: |
|
|
||||||
nuget restore ExplorerPatcher.sln
|
|
||||||
|
|
||||||
- name: Download ep_taskbar
|
- name: Add MSBuild to PATH
|
||||||
uses: robinraju/release-downloader@v1
|
uses: microsoft/setup-msbuild@v2
|
||||||
with:
|
|
||||||
repository: ExplorerPatcher/ep_taskbar_releases
|
|
||||||
fileName: ep_taskbar.*.dll
|
|
||||||
latest: true
|
|
||||||
out-file-path: build/Release
|
|
||||||
|
|
||||||
# build/Release/ep_taskbar.*.amd64.dll -> build/Release/x64/ep_taskbar.*.dll
|
- name: Declare some variables
|
||||||
# build/Release/ep_taskbar.*.arm64.dll -> build/Release/ARM64/ep_taskbar.*.dll
|
id: vars
|
||||||
- name: Move ep_taskbar
|
shell: bash
|
||||||
shell: bash
|
run: |
|
||||||
run: |
|
echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT
|
||||||
if ls build/Release/ep_taskbar.*.amd64.dll 1> /dev/null 2>&1; then
|
echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
||||||
mkdir -p build/Release/x64
|
|
||||||
for file in build/Release/ep_taskbar.*.amd64.dll; do
|
|
||||||
mv "$file" "build/Release/x64/$(basename "$file" .amd64.dll).dll"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ls build/Release/ep_taskbar.*.arm64.dll 1> /dev/null 2>&1; then
|
- name: Enable SimpleWindowSwitcher support for newer Windows SDKs
|
||||||
mkdir -p build/Release/ARM64
|
shell: cmd
|
||||||
for file in build/Release/ep_taskbar.*.arm64.dll; do
|
run: |
|
||||||
mv "$file" "build/Release/ARM64/$(basename "$file" .arm64.dll).dll"
|
cd libs/sws
|
||||||
done
|
C:\msys64\usr\bin\wget.exe https://github.com/valinet/sws/commit/972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
||||||
fi
|
C:\msys64\usr\bin\dos2unix.exe 972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
||||||
|
C:\msys64\usr\bin\dos2unix.exe SimpleWindowSwitcher/sws_def.h
|
||||||
|
C:\msys64\usr\bin\patch.exe -N SimpleWindowSwitcher/sws_def.h 972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
||||||
|
C:\msys64\usr\bin\unix2dos.exe SimpleWindowSwitcher/sws_def.h
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
- name: Build funchook amd64
|
- name: Setup NuGet
|
||||||
shell: powershell
|
uses: nuget/setup-nuget@v2
|
||||||
run: |
|
|
||||||
cd libs/funchook
|
|
||||||
md build
|
|
||||||
cd build
|
|
||||||
cmake -G "Visual Studio 17 2022" -A x64 -DFUNCHOOK_CPU=x86 ..
|
|
||||||
(gc .\funchook-static.vcxproj) -replace '<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>', '<RuntimeLibrary>MultiThreaded</RuntimeLibrary>' | Out-File .\funchook-static.vcxproj
|
|
||||||
cmake --build . --config Release
|
|
||||||
|
|
||||||
- name: Build funchook arm64
|
- name: Restore NuGet packages
|
||||||
shell: powershell
|
run: |
|
||||||
run: |
|
nuget restore ExplorerPatcher.sln
|
||||||
cd libs/funchook
|
|
||||||
md build-arm64
|
|
||||||
cd build-arm64
|
|
||||||
cmake -G "Visual Studio 17 2022" -A ARM64 -DFUNCHOOK_CPU=arm64 -DFUNCHOOK_DISASM=capstone -DFUNCHOOK_BUILD_TESTS=OFF ..
|
|
||||||
(gc .\funchook-static.vcxproj) -replace '<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>', '<RuntimeLibrary>MultiThreaded</RuntimeLibrary>' | Out-File .\funchook-static.vcxproj
|
|
||||||
cmake --build . --config Release
|
|
||||||
|
|
||||||
- name: Build EP IA-32
|
|
||||||
if: github.event.inputs.config == ''
|
|
||||||
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
||||||
run: |
|
|
||||||
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=IA-32 ${{env.SOLUTION_FILE_PATH}}
|
|
||||||
|
|
||||||
- name: Build EP amd64
|
# - name: Download ep_taskbar
|
||||||
if: github.event.inputs.config == ''
|
# uses: robinraju/release-downloader@v1
|
||||||
working-directory: ${{env.GITHUB_WORKSPACE}}
|
# with:
|
||||||
run: |
|
# repository: ExplorerPatcher/ep_taskbar_releases
|
||||||
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=amd64 ${{env.SOLUTION_FILE_PATH}}
|
# fileName: ep_taskbar.*.dll
|
||||||
|
# latest: true
|
||||||
|
# out-file-path: build/Release
|
||||||
|
|
||||||
- name: Build EP arm64
|
# build/Release/ep_taskbar.*.amd64.dll -> build/Release/x64/ep_taskbar.*.dll
|
||||||
if: github.event.inputs.config == ''
|
# build/Release/ep_taskbar.*.arm64.dll -> build/Release/ARM64/ep_taskbar.*.dll
|
||||||
working-directory: ${{env.GITHUB_WORKSPACE}}
|
# - name: Move ep_taskbar
|
||||||
run: |
|
# shell: bash
|
||||||
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=arm64 /p:WithArm64XBinaries=true ${{env.SOLUTION_FILE_PATH}}
|
# run: |
|
||||||
|
# if ls build/Release/ep_taskbar.*.amd64.dll 1> /dev/null 2>&1; then
|
||||||
|
# mkdir -p build/Release/x64
|
||||||
|
# for file in build/Release/ep_taskbar.*.amd64.dll; do
|
||||||
|
# mv "$file" "build/Release/x64/$(basename "$file" .amd64.dll).dll"
|
||||||
|
# done
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# if ls build/Release/ep_taskbar.*.arm64.dll 1> /dev/null 2>&1; then
|
||||||
|
# mkdir -p build/Release/ARM64
|
||||||
|
# for file in build/Release/ep_taskbar.*.arm64.dll; do
|
||||||
|
# mv "$file" "build/Release/ARM64/$(basename "$file" .arm64.dll).dll"
|
||||||
|
# done
|
||||||
|
# fi
|
||||||
|
|
||||||
- name: Build EP custom
|
- name: Build funchook amd64
|
||||||
if: github.event.inputs.config != ''
|
shell: powershell
|
||||||
working-directory: ${{env.GITHUB_WORKSPACE}}
|
run: |
|
||||||
run: |
|
cd libs/funchook
|
||||||
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=${{ github.event.inputs.config }} ${{env.SOLUTION_FILE_PATH}}
|
md build
|
||||||
|
cd build
|
||||||
|
cmake -G "Visual Studio 17 2022" -A x64 -DFUNCHOOK_CPU=x86 ..
|
||||||
|
(gc .\funchook-static.vcxproj) -replace '<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>', '<RuntimeLibrary>MultiThreaded</RuntimeLibrary>' | Out-File .\funchook-static.vcxproj
|
||||||
|
cmake --build . --config Release
|
||||||
|
|
||||||
- name: Create expected build directory
|
- name: Build funchook arm64
|
||||||
if: github.event.inputs.build_dir != ''
|
shell: powershell
|
||||||
shell: bash
|
run: |
|
||||||
run: |
|
cd libs/funchook
|
||||||
mkdir build
|
md build-arm64
|
||||||
cp -r ${{ github.event.inputs.build_dir }}/Release build/Release
|
cd build-arm64
|
||||||
|
cmake -G "Visual Studio 17 2022" -A ARM64 -DFUNCHOOK_CPU=arm64 -DFUNCHOOK_DISASM=capstone -DFUNCHOOK_BUILD_TESTS=OFF ..
|
||||||
- name: Generate dxgi.dll
|
(gc .\funchook-static.vcxproj) -replace '<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>', '<RuntimeLibrary>MultiThreaded</RuntimeLibrary>' | Out-File .\funchook-static.vcxproj
|
||||||
shell: bash
|
cmake --build . --config Release
|
||||||
run: |
|
|
||||||
if [[ -f "build/Release/x64/ExplorerPatcher.amd64.dll" ]]; then cp build/Release/x64/ExplorerPatcher.amd64.dll build/Release/x64/dxgi.dll; fi
|
|
||||||
if [[ -f "build/Release/ARM64/ExplorerPatcher.arm64.dll" ]]; then cp build/Release/ARM64/ExplorerPatcher.arm64.dll build/Release/ARM64/dxgi.dll; fi
|
|
||||||
|
|
||||||
- name: Patch amd64 setup
|
- name: Build EP IA-32
|
||||||
shell: cmd
|
if: github.event.inputs.config == ''
|
||||||
run: |
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
||||||
if exist "build\Release\x64\ExplorerPatcher.amd64.dll" (
|
run: |
|
||||||
"build\Release\x64\ep_setup_patch.exe" "build\Release\x64\ExplorerPatcher.amd64.dll" "build\Release\x64\ep_setup.exe"
|
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=IA-32 ${{env.SOLUTION_FILE_PATH}}
|
||||||
)
|
|
||||||
exit /b 0
|
|
||||||
|
|
||||||
- name: Patch arm64 setup
|
- name: Build EP amd64
|
||||||
shell: cmd
|
if: github.event.inputs.config == ''
|
||||||
run: |
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
||||||
if exist "build\Release\ARM64\ExplorerPatcher.arm64.dll" (
|
run: |
|
||||||
"build\Release\x64\ep_setup_patch.exe" "build\Release\ARM64\ExplorerPatcher.arm64.dll" "build\Release\ARM64\ep_setup.exe"
|
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=amd64 ${{env.SOLUTION_FILE_PATH}}
|
||||||
)
|
|
||||||
exit /b 0
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Build EP arm64
|
||||||
uses: actions/upload-artifact@v4
|
if: github.event.inputs.config == ''
|
||||||
with:
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
||||||
name: ep_bin_multi_${{ steps.vars.outputs.sha_short }}_${{ steps.vars.outputs.branch }}
|
run: |
|
||||||
path: |
|
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=arm64 /p:WithArm64XBinaries=true ${{env.SOLUTION_FILE_PATH}}
|
||||||
build/Release/
|
|
||||||
|
|
||||||
# build/Release/x64/ep_setup.exe -> build/Release/ep_setup.exe
|
- name: Build EP custom
|
||||||
# build/Release/ARM64/ep_setup.exe -> build/Release/ep_setup.arm64.exe
|
if: github.event.inputs.config != ''
|
||||||
- name: Stage files for release
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
||||||
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
run: |
|
||||||
shell: bash
|
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=${{ github.event.inputs.config }} ${{env.SOLUTION_FILE_PATH}}
|
||||||
run: |
|
|
||||||
if [ -d "build/Release/x64" ] && ls build/Release/x64/ep_setup.exe 1> /dev/null 2>&1; then
|
|
||||||
cp build/Release/x64/ep_setup.exe build/Release/ep_setup.exe
|
|
||||||
fi
|
|
||||||
if [ -d "build/Release/ARM64" ] && ls build/Release/ARM64/ep_setup.exe 1> /dev/null 2>&1; then
|
|
||||||
cp build/Release/ARM64/ep_setup.exe build/Release/ep_setup.arm64.exe
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Generate release name
|
- name: Create expected build directory
|
||||||
shell: bash
|
if: github.event.inputs.build_dir != ''
|
||||||
working-directory: build/Release/x64
|
shell: bash
|
||||||
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
run: |
|
||||||
run: |
|
mkdir build
|
||||||
echo "data=$(./ep_generate_release_name.exe)" >> $GITHUB_OUTPUT
|
cp -r ${{ github.event.inputs.build_dir }}/Release build/Release
|
||||||
id: release_name
|
|
||||||
|
- name: Generate dxgi.dll
|
||||||
- name: Generate release notes
|
shell: bash
|
||||||
shell: bash
|
run: |
|
||||||
working-directory: build/Release/x64
|
if [[ -f "build/Release/x64/ExplorerPatcher.amd64.dll" ]]; then cp build/Release/x64/ExplorerPatcher.amd64.dll build/Release/x64/dxgi.dll; fi
|
||||||
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
if [[ -f "build/Release/ARM64/ExplorerPatcher.arm64.dll" ]]; then cp build/Release/ARM64/ExplorerPatcher.arm64.dll build/Release/ARM64/dxgi.dll; fi
|
||||||
run: |
|
|
||||||
echo "data<<EP_RELEASE_DESCRIPTION_DELIM" >> $GITHUB_OUTPUT
|
- name: Patch amd64 setup
|
||||||
echo "$(./ep_generate_release_description.exe ${{ steps.vars.outputs.sha_short }} ${{ steps.vars.outputs.branch }} ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" >> $GITHUB_OUTPUT
|
shell: cmd
|
||||||
echo "EP_RELEASE_DESCRIPTION_DELIM" >> $GITHUB_OUTPUT
|
run: |
|
||||||
id: release_description
|
if exist "build\Release\x64\ExplorerPatcher.amd64.dll" (
|
||||||
|
"build\Release\x64\ep_setup_patch.exe" "build\Release\x64\ExplorerPatcher.amd64.dll" "build\Release\x64\ep_setup.exe"
|
||||||
- name: Create/update release (valinet)
|
)
|
||||||
uses: softprops/action-gh-release@v2
|
exit /b 0
|
||||||
if: github.repository_owner == 'valinet' && github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
|
||||||
id: create_release
|
- name: Patch arm64 setup
|
||||||
with:
|
shell: cmd
|
||||||
draft: false
|
run: |
|
||||||
prerelease: ${{ !startsWith(github.event.head_commit.message, 'rel_') }}
|
if exist "build\Release\ARM64\ExplorerPatcher.arm64.dll" (
|
||||||
name: ${{ steps.release_name.outputs.data }}
|
"build\Release\x64\ep_setup_patch.exe" "build\Release\ARM64\ExplorerPatcher.arm64.dll" "build\Release\ARM64\ep_setup.exe"
|
||||||
tag_name: ${{ steps.release_name.outputs.data }}_${{ steps.vars.outputs.sha_short }}
|
)
|
||||||
body: ${{ steps.release_description.outputs.data }}
|
exit /b 0
|
||||||
files: |
|
|
||||||
build/Release/ep_setup.exe
|
- name: Upload artifacts
|
||||||
build/Release/ep_setup.arm64.exe
|
uses: actions/upload-artifact@v4
|
||||||
env:
|
with:
|
||||||
GITHUB_TOKEN: ${{ secrets.PAT }}
|
name: ep_bin_multi_${{ steps.vars.outputs.sha_short }}_${{ steps.vars.outputs.branch }}
|
||||||
|
path: |
|
||||||
- name: Create/update release (forks)
|
build/Release/
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
if: github.repository_owner != 'valinet' && github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
# build/Release/x64/ep_setup.exe -> build/Release/ep_setup.exe
|
||||||
id: create_release_fork
|
# build/Release/ARM64/ep_setup.exe -> build/Release/ep_setup.arm64.exe
|
||||||
with:
|
- name: Stage files for release
|
||||||
draft: false
|
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
||||||
prerelease: ${{ !startsWith(github.event.head_commit.message, 'rel_') }}
|
shell: bash
|
||||||
name: ${{ steps.release_name.outputs.data }}
|
run: |
|
||||||
tag_name: ${{ steps.release_name.outputs.data }}_${{ steps.vars.outputs.sha_short }}
|
if [ -d "build/Release/x64" ] && ls build/Release/x64/ep_setup.exe 1> /dev/null 2>&1; then
|
||||||
body: ${{ steps.release_description.outputs.data }}
|
cp build/Release/x64/ep_setup.exe build/Release/ep_setup.exe
|
||||||
files: |
|
fi
|
||||||
build/Release/ep_setup.exe
|
if [ -d "build/Release/ARM64" ] && ls build/Release/ARM64/ep_setup.exe 1> /dev/null 2>&1; then
|
||||||
build/Release/ep_setup.arm64.exe
|
cp build/Release/ARM64/ep_setup.exe build/Release/ep_setup.arm64.exe
|
||||||
env:
|
fi
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
- name: Generate release name
|
||||||
|
shell: bash
|
||||||
|
working-directory: build/Release/x64
|
||||||
|
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
||||||
|
run: |
|
||||||
|
echo "data=$(./ep_generate_release_name.exe)" >> $GITHUB_OUTPUT
|
||||||
|
id: release_name
|
||||||
|
|
||||||
|
- name: Generate release notes
|
||||||
|
shell: bash
|
||||||
|
working-directory: build/Release/x64
|
||||||
|
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
||||||
|
run: |
|
||||||
|
echo "data<<EP_RELEASE_DESCRIPTION_DELIM" >> $GITHUB_OUTPUT
|
||||||
|
echo "$(./ep_generate_release_description.exe ${{ steps.vars.outputs.sha_short }} ${{ steps.vars.outputs.branch }} ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" >> $GITHUB_OUTPUT
|
||||||
|
echo "EP_RELEASE_DESCRIPTION_DELIM" >> $GITHUB_OUTPUT
|
||||||
|
id: release_description
|
||||||
|
|
||||||
|
- name: Create/update release (valinet)
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
if: github.repository_owner == 'valinet' && github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
||||||
|
id: create_release
|
||||||
|
with:
|
||||||
|
draft: false
|
||||||
|
prerelease: ${{ !startsWith(github.event.head_commit.message, 'rel_') }}
|
||||||
|
name: ${{ steps.release_name.outputs.data }}
|
||||||
|
tag_name: ${{ steps.release_name.outputs.data }}_${{ steps.vars.outputs.sha_short }}
|
||||||
|
body: ${{ steps.release_description.outputs.data }}
|
||||||
|
files: |
|
||||||
|
build/Release/ep_setup.exe
|
||||||
|
build/Release/ep_setup.arm64.exe
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.PAT }}
|
||||||
|
|
||||||
|
- name: Create/update release (forks)
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
if: github.repository_owner != 'valinet' && github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
||||||
|
id: create_release_fork
|
||||||
|
with:
|
||||||
|
draft: false
|
||||||
|
prerelease: ${{ !startsWith(github.event.head_commit.message, 'rel_') }}
|
||||||
|
name: ${{ steps.release_name.outputs.data }}
|
||||||
|
tag_name: ${{ steps.release_name.outputs.data }}_${{ steps.vars.outputs.sha_short }}
|
||||||
|
body: ${{ steps.release_description.outputs.data }}
|
||||||
|
files: |
|
||||||
|
build/Release/ep_setup.exe
|
||||||
|
build/Release/ep_setup.arm64.exe
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
12
CHANGELOG.md
12
CHANGELOG.md
@ -2,17 +2,23 @@
|
|||||||
|
|
||||||
This document includes the same release notes as in the [Releases](https://github.com/valinet/ExplorerPatcher/releases) section on GitHub.
|
This document includes the same release notes as in the [Releases](https://github.com/valinet/ExplorerPatcher/releases) section on GitHub.
|
||||||
|
|
||||||
## 22621.3810.66
|
## 22621.3880.66
|
||||||
|
|
||||||
##### 1
|
|
||||||
|
|
||||||
Tested on OS builds 19045.4598, 22621.3296, 22621.3810, 26120.961, and 26244.5000. (Note: 22621 and 22631 share the same OS files)
|
Tested on OS builds 19045.4598, 22621.3296, 22621.3810, 26120.961, and 26244.5000. (Note: 22621 and 22631 share the same OS files)
|
||||||
|
|
||||||
|
##### 1
|
||||||
|
|
||||||
* Taskbar10: Introduced a new taskbar implementation: Windows 10 (ExplorerPatcher). (146070d, 0b86e55)
|
* Taskbar10: Introduced a new taskbar implementation: Windows 10 (ExplorerPatcher). (146070d, 0b86e55)
|
||||||
* You can try this implementation out by changing the "Taskbar style" to "Windows 10 (ExplorerPatcher)".
|
* You can try this implementation out by changing the "Taskbar style" to "Windows 10 (ExplorerPatcher)".
|
||||||
* For now, this is **only available for builds 22621, 22631, and 22635.** Other builds will not have the option.
|
* For now, this is **only available for builds 22621, 22631, and 22635.** Other builds will not have the option.
|
||||||
* Refer to [this wiki article](https://github.com/valinet/ExplorerPatcher/wiki/ExplorerPatcher's-taskbar-implementation) for more information including important ones.
|
* Refer to [this wiki article](https://github.com/valinet/ExplorerPatcher/wiki/ExplorerPatcher's-taskbar-implementation) for more information including important ones.
|
||||||
|
|
||||||
|
##### 2
|
||||||
|
|
||||||
|
* Taskbar10: Due to false positive antivirus detections, the new taskbar implementation is no longer bundled in the setup program. (48c2a75)
|
||||||
|
* If you want to use the new taskbar implementation, you can download the appropriate DLL for your system from the [Releases](https://github.com/ExplorerPatcher/ep_taskbar_releases/releases/latest) page of its releases repository, and then manually putting it in `C:\Program Files\ExplorerPatcher` without the architecture specifier.
|
||||||
|
* For example, for 226xx builds on x64-based systems, download `ep_taskbar.2.amd64.dll`, rename to `ep_taskbar.2.dll`, and lastly put it in `C:\Program Files\ExplorerPatcher`.
|
||||||
|
|
||||||
## 22621.3527.65
|
## 22621.3527.65
|
||||||
|
|
||||||
Tested on OS builds 22621.3296, 22621.3447, 22621.3527, 22635.3566, 26058.1000, 26120.461, and 26200.5001. (Note: 22621 and 22631 share the same OS files)
|
Tested on OS builds 22621.3296, 22621.3447, 22621.3527, 22635.3566, 26058.1000, 26120.461, and 26200.5001. (Note: 22621 and 22631 share the same OS files)
|
||||||
|
@ -2,76 +2,7 @@
|
|||||||
|
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
enum IMMERSIVE_COLOR_TYPE
|
#include "utility.h"
|
||||||
{
|
|
||||||
// Defining only used ones
|
|
||||||
IMCLR_SystemAccentLight2 = 2,
|
|
||||||
IMCLR_SystemAccentDark2 = 6
|
|
||||||
};
|
|
||||||
|
|
||||||
struct IMMERSIVE_COLOR_PREFERENCE
|
|
||||||
{
|
|
||||||
DWORD crStartColor;
|
|
||||||
DWORD crAccentColor;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum IMMERSIVE_HC_CACHE_MODE
|
|
||||||
{
|
|
||||||
IHCM_USE_CACHED_VALUE = 0,
|
|
||||||
IHCM_REFRESH = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef bool (*RefreshImmersiveColorPolicyState_t)(); // 104
|
|
||||||
inline bool RefreshImmersiveColorPolicyState()
|
|
||||||
{
|
|
||||||
static RefreshImmersiveColorPolicyState_t fn;
|
|
||||||
if (!fn)
|
|
||||||
{
|
|
||||||
HMODULE h = GetModuleHandleW(L"uxtheme.dll");
|
|
||||||
if (h)
|
|
||||||
fn = (RefreshImmersiveColorPolicyState_t)GetProcAddress(h, MAKEINTRESOURCEA(104));
|
|
||||||
}
|
|
||||||
return fn ? fn() : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef bool (*GetIsImmersiveColorUsingHighContrast_t)(IMMERSIVE_HC_CACHE_MODE); // 106
|
|
||||||
inline bool GetIsImmersiveColorUsingHighContrast(IMMERSIVE_HC_CACHE_MODE mode)
|
|
||||||
{
|
|
||||||
static GetIsImmersiveColorUsingHighContrast_t fn;
|
|
||||||
if (!fn)
|
|
||||||
{
|
|
||||||
HMODULE h = GetModuleHandleW(L"uxtheme.dll");
|
|
||||||
if (h)
|
|
||||||
fn = (GetIsImmersiveColorUsingHighContrast_t)GetProcAddress(h, MAKEINTRESOURCEA(106));
|
|
||||||
}
|
|
||||||
return fn ? fn(mode) : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef HRESULT (*GetUserColorPreference_t)(IMMERSIVE_COLOR_PREFERENCE*, bool); // 120
|
|
||||||
inline HRESULT GetUserColorPreference(IMMERSIVE_COLOR_PREFERENCE* pcpColorPreference, bool fForceReload)
|
|
||||||
{
|
|
||||||
static GetUserColorPreference_t fn;
|
|
||||||
if (!fn)
|
|
||||||
{
|
|
||||||
HMODULE h = GetModuleHandleW(L"uxtheme.dll");
|
|
||||||
if (h)
|
|
||||||
fn = (GetUserColorPreference_t)GetProcAddress(h, MAKEINTRESOURCEA(120));
|
|
||||||
}
|
|
||||||
return fn ? fn(pcpColorPreference, fForceReload) : E_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef DWORD (*GetColorFromPreference_t)(const IMMERSIVE_COLOR_PREFERENCE*, IMMERSIVE_COLOR_TYPE, bool, IMMERSIVE_HC_CACHE_MODE); // 121
|
|
||||||
inline DWORD GetColorFromPreference(const IMMERSIVE_COLOR_PREFERENCE* cpcpPreference, IMMERSIVE_COLOR_TYPE colorType, bool fNoHighContrast, IMMERSIVE_HC_CACHE_MODE mode)
|
|
||||||
{
|
|
||||||
static GetColorFromPreference_t fn;
|
|
||||||
if (!fn)
|
|
||||||
{
|
|
||||||
HMODULE h = GetModuleHandleW(L"uxtheme.dll");
|
|
||||||
if (h)
|
|
||||||
fn = (GetColorFromPreference_t)GetProcAddress(h, MAKEINTRESOURCEA(121));
|
|
||||||
}
|
|
||||||
return fn ? fn(cpcpPreference, colorType, fNoHighContrast, mode) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
class CImmersiveColor
|
class CImmersiveColor
|
||||||
{
|
{
|
||||||
|
@ -2121,10 +2121,12 @@ INT64 ReBarWindow32SubclassProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wPar
|
|||||||
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
|
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HMODULE g_hMyTaskbar;
|
||||||
|
|
||||||
HMENU explorer_LoadMenuW(HINSTANCE hInstance, LPCWSTR lpMenuName)
|
HMENU explorer_LoadMenuW(HINSTANCE hInstance, LPCWSTR lpMenuName)
|
||||||
{
|
{
|
||||||
HMENU hMenu = LoadMenuW(hInstance, lpMenuName);
|
HMENU hMenu = LoadMenuW(hInstance, lpMenuName);
|
||||||
if (hInstance == GetModuleHandle(NULL) && lpMenuName == MAKEINTRESOURCEW(205))
|
if ((hInstance == GetModuleHandle(NULL) || (g_hMyTaskbar && hInstance == g_hMyTaskbar)) && lpMenuName == MAKEINTRESOURCEW(205))
|
||||||
{
|
{
|
||||||
HMENU hSubMenu = GetSubMenu(hMenu, 0);
|
HMENU hSubMenu = GetSubMenu(hMenu, 0);
|
||||||
if (hSubMenu)
|
if (hSubMenu)
|
||||||
@ -12210,6 +12212,7 @@ HMODULE PrepareAlternateTaskbarImplementation(symbols_addr* symbols_PTRS, const
|
|||||||
wprintf(L"[TB] '%s' not found\n", pszTaskbarDll);
|
wprintf(L"[TB] '%s' not found\n", pszTaskbarDll);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
g_hMyTaskbar = hMyTaskbar;
|
||||||
|
|
||||||
typedef DWORD (*GetVersion_t)();
|
typedef DWORD (*GetVersion_t)();
|
||||||
GetVersion_t GetVersion = (GetVersion_t)GetProcAddress(hMyTaskbar, "GetVersion");
|
GetVersion_t GetVersion = (GetVersion_t)GetProcAddress(hMyTaskbar, "GetVersion");
|
||||||
@ -12909,15 +12912,19 @@ DWORD Inject(BOOL bIsExplorer)
|
|||||||
|
|
||||||
|
|
||||||
HANDLE hUxtheme = LoadLibraryW(L"uxtheme.dll");
|
HANDLE hUxtheme = LoadLibraryW(L"uxtheme.dll");
|
||||||
SetPreferredAppMode = GetProcAddress(hUxtheme, (LPCSTR)0x87);
|
GetThemeName = (GetThemeName_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(74));
|
||||||
AllowDarkModeForWindow = GetProcAddress(hUxtheme, (LPCSTR)0x85);
|
RefreshImmersiveColorPolicyState = (RefreshImmersiveColorPolicyState_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(104));
|
||||||
ShouldAppsUseDarkMode = GetProcAddress(hUxtheme, (LPCSTR)0x84);
|
GetIsImmersiveColorUsingHighContrast = (GetIsImmersiveColorUsingHighContrast_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(106));
|
||||||
ShouldSystemUseDarkMode = GetProcAddress(hUxtheme, (LPCSTR)0x8A);
|
GetUserColorPreference = (GetUserColorPreference_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(120));
|
||||||
GetThemeName = GetProcAddress(hUxtheme, (LPCSTR)0x4A);
|
GetColorFromPreference = (GetColorFromPreference_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(121));
|
||||||
PeopleBand_DrawTextWithGlowFunc = GetProcAddress(hUxtheme, (LPCSTR)0x7E);
|
PeopleBand_DrawTextWithGlowFunc = GetProcAddress(hUxtheme, MAKEINTRESOURCEA(126));
|
||||||
|
ShouldAppsUseDarkMode = (ShouldAppsUseDarkMode_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(132));
|
||||||
|
AllowDarkModeForWindow = (AllowDarkModeForWindow_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(133));
|
||||||
|
SetPreferredAppMode = (SetPreferredAppMode_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(135));
|
||||||
|
ShouldSystemUseDarkMode = (ShouldSystemUseDarkMode_t)GetProcAddress(hUxtheme, MAKEINTRESOURCEA(138));
|
||||||
if (bOldTaskbar)
|
if (bOldTaskbar)
|
||||||
{
|
{
|
||||||
VnPatchIAT(hExplorer, "uxtheme.dll", (LPCSTR)0x7E, PeopleBand_DrawTextWithGlowHook);
|
VnPatchIAT(hExplorer, "uxtheme.dll", MAKEINTRESOURCEA(126), PeopleBand_DrawTextWithGlowHook);
|
||||||
}
|
}
|
||||||
// DwmExtendFrameIntoClientArea hooked in LoadSettings
|
// DwmExtendFrameIntoClientArea hooked in LoadSettings
|
||||||
printf("Setup uxtheme functions done\n");
|
printf("Setup uxtheme functions done\n");
|
||||||
@ -13117,6 +13124,11 @@ DWORD Inject(BOOL bIsExplorer)
|
|||||||
|
|
||||||
VnPatchIAT(hTwinuiPcshell, "API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL", "RegGetValueW", twinuipcshell_RegGetValueW);
|
VnPatchIAT(hTwinuiPcshell, "API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL", "RegGetValueW", twinuipcshell_RegGetValueW);
|
||||||
HMODULE hMyTaskbar = PrepareAlternateTaskbarImplementation(&symbols_PTRS, pszTaskbarDll);
|
HMODULE hMyTaskbar = PrepareAlternateTaskbarImplementation(&symbols_PTRS, pszTaskbarDll);
|
||||||
|
if (hMyTaskbar)
|
||||||
|
{
|
||||||
|
VnPatchIAT(hMyTaskbar, "user32.dll", "LoadMenuW", explorer_LoadMenuW);
|
||||||
|
VnPatchIAT(hMyTaskbar, "user32.dll", "TrackPopupMenuEx", explorer_TrackPopupMenuExHook);
|
||||||
|
}
|
||||||
printf("Setup twinui.pcshell functions done\n");
|
printf("Setup twinui.pcshell functions done\n");
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,6 +32,12 @@
|
|||||||
#define WM_MSG_GUI_SECTION WM_USER + 1
|
#define WM_MSG_GUI_SECTION WM_USER + 1
|
||||||
#define WM_MSG_GUI_SECTION_GET 1
|
#define WM_MSG_GUI_SECTION_GET 1
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define EP_INLINE inline
|
||||||
|
#else
|
||||||
|
#define EP_INLINE
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@ -98,10 +104,7 @@ DEFINE_GUID(IID_ITrayUIComponent,
|
|||||||
0x64, 0xb4, 0xc0, 0x9b, 0x21, 0x1b
|
0x64, 0xb4, 0xc0, 0x9b, 0x21, 0x1b
|
||||||
);
|
);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
EP_INLINE HRESULT(*explorer_TrayUI_CreateInstanceFunc)(ITrayUIHost* host, REFIID riid, void** ppv);
|
||||||
inline
|
|
||||||
#endif
|
|
||||||
HRESULT(*explorer_TrayUI_CreateInstanceFunc)(ITrayUIHost* host, REFIID riid, void** ppv);
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
inline int FileExistsW(wchar_t* file)
|
inline int FileExistsW(wchar_t* file)
|
||||||
@ -144,10 +147,7 @@ typedef LSTATUS(*t_SHRegGetValueFromHKCUHKLM)(
|
|||||||
void* pvData,
|
void* pvData,
|
||||||
DWORD* pcbData
|
DWORD* pcbData
|
||||||
);
|
);
|
||||||
#ifdef __cplusplus
|
EP_INLINE t_SHRegGetValueFromHKCUHKLM SHRegGetValueFromHKCUHKLMFunc;
|
||||||
inline
|
|
||||||
#endif
|
|
||||||
t_SHRegGetValueFromHKCUHKLM SHRegGetValueFromHKCUHKLMFunc;
|
|
||||||
|
|
||||||
inline LSTATUS SHRegGetValueFromHKCUHKLMWithOpt(
|
inline LSTATUS SHRegGetValueFromHKCUHKLMWithOpt(
|
||||||
PCWSTR pwszKey,
|
PCWSTR pwszKey,
|
||||||
@ -217,10 +217,7 @@ inline LSTATUS SHRegGetValueFromHKCUHKLMWithOpt(
|
|||||||
return lRes;
|
return lRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
EP_INLINE HWND(WINAPI* CreateWindowInBand)(
|
||||||
inline
|
|
||||||
#endif
|
|
||||||
HWND(WINAPI* CreateWindowInBand)(
|
|
||||||
_In_ DWORD dwExStyle,
|
_In_ DWORD dwExStyle,
|
||||||
_In_opt_ LPCWSTR lpClassName,
|
_In_opt_ LPCWSTR lpClassName,
|
||||||
_In_opt_ LPCWSTR lpWindowName,
|
_In_opt_ LPCWSTR lpWindowName,
|
||||||
@ -236,30 +233,59 @@ HWND(WINAPI* CreateWindowInBand)(
|
|||||||
DWORD band
|
DWORD band
|
||||||
);
|
);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
EP_INLINE BOOL(WINAPI* GetWindowBand)(HWND hWnd, PDWORD pdwBand);
|
||||||
inline
|
|
||||||
#endif
|
|
||||||
BOOL(WINAPI* GetWindowBand)(HWND hWnd, PDWORD pdwBand);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
EP_INLINE BOOL(WINAPI* SetWindowBand)(HWND hWnd, HWND hwndInsertAfter, DWORD dwBand);
|
||||||
inline
|
|
||||||
#endif
|
|
||||||
BOOL(WINAPI* SetWindowBand)(HWND hWnd, HWND hwndInsertAfter, DWORD dwBand);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
EP_INLINE INT64(*SetWindowCompositionAttribute)(HWND, void*);
|
||||||
inline
|
|
||||||
#endif
|
|
||||||
INT64(*SetWindowCompositionAttribute)(HWND, void*);
|
|
||||||
|
|
||||||
static void(*SetPreferredAppMode)(BOOL bAllowDark);
|
// uxtheme.dll private functions
|
||||||
|
|
||||||
static void(*AllowDarkModeForWindow)(HWND hWnd, BOOL bAllowDark);
|
typedef enum IMMERSIVE_COLOR_TYPE
|
||||||
|
{
|
||||||
|
// Defining only used ones
|
||||||
|
IMCLR_SystemAccentLight2 = 2,
|
||||||
|
IMCLR_SystemAccentDark2 = 6
|
||||||
|
} IMMERSIVE_COLOR_TYPE;
|
||||||
|
|
||||||
static bool(*ShouldAppsUseDarkMode)();
|
typedef struct IMMERSIVE_COLOR_PREFERENCE
|
||||||
|
{
|
||||||
|
DWORD crStartColor;
|
||||||
|
DWORD crAccentColor;
|
||||||
|
} IMMERSIVE_COLOR_PREFERENCE;
|
||||||
|
|
||||||
static bool(*ShouldSystemUseDarkMode)();
|
typedef enum IMMERSIVE_HC_CACHE_MODE
|
||||||
|
{
|
||||||
|
IHCM_USE_CACHED_VALUE = 0,
|
||||||
|
IHCM_REFRESH = 1
|
||||||
|
} IMMERSIVE_HC_CACHE_MODE;
|
||||||
|
|
||||||
static void(*GetThemeName)(void*, void*, void*);
|
typedef void(*GetThemeName_t)(void*, void*, void*); // 74
|
||||||
|
EP_INLINE GetThemeName_t GetThemeName;
|
||||||
|
|
||||||
|
typedef bool(*RefreshImmersiveColorPolicyState_t)(); // 104
|
||||||
|
EP_INLINE RefreshImmersiveColorPolicyState_t RefreshImmersiveColorPolicyState;
|
||||||
|
|
||||||
|
typedef bool(*GetIsImmersiveColorUsingHighContrast_t)(IMMERSIVE_HC_CACHE_MODE); // 106
|
||||||
|
EP_INLINE GetIsImmersiveColorUsingHighContrast_t GetIsImmersiveColorUsingHighContrast;
|
||||||
|
|
||||||
|
typedef HRESULT(*GetUserColorPreference_t)(IMMERSIVE_COLOR_PREFERENCE*, bool); // 120
|
||||||
|
EP_INLINE GetUserColorPreference_t GetUserColorPreference;
|
||||||
|
|
||||||
|
typedef DWORD(*GetColorFromPreference_t)(const IMMERSIVE_COLOR_PREFERENCE*, IMMERSIVE_COLOR_TYPE, bool, IMMERSIVE_HC_CACHE_MODE); // 121
|
||||||
|
EP_INLINE GetColorFromPreference_t GetColorFromPreference;
|
||||||
|
|
||||||
|
typedef bool(*ShouldAppsUseDarkMode_t)(); // 132
|
||||||
|
EP_INLINE ShouldAppsUseDarkMode_t ShouldAppsUseDarkMode;
|
||||||
|
|
||||||
|
typedef void(*AllowDarkModeForWindow_t)(HWND hWnd, BOOL bAllowDark); // 133
|
||||||
|
EP_INLINE AllowDarkModeForWindow_t AllowDarkModeForWindow;
|
||||||
|
|
||||||
|
typedef void(*SetPreferredAppMode_t)(BOOL bAllowDark); // 135
|
||||||
|
EP_INLINE SetPreferredAppMode_t SetPreferredAppMode;
|
||||||
|
|
||||||
|
typedef bool(*ShouldSystemUseDarkMode_t)(); // 138
|
||||||
|
EP_INLINE ShouldSystemUseDarkMode_t ShouldSystemUseDarkMode;
|
||||||
|
|
||||||
void* ReadFromFile(wchar_t* wszFileName, DWORD* dwSize);
|
void* ReadFromFile(wchar_t* wszFileName, DWORD* dwSize);
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ WCHAR wszThreadLanguage[LOCALE_NAME_MAX_LENGTH];
|
|||||||
void* GUI_FileMapping = NULL;
|
void* GUI_FileMapping = NULL;
|
||||||
DWORD GUI_FileSize = 0;
|
DWORD GUI_FileSize = 0;
|
||||||
BOOL g_darkModeEnabled = FALSE;
|
BOOL g_darkModeEnabled = FALSE;
|
||||||
static void(*RefreshImmersiveColorPolicyState)() = NULL;
|
|
||||||
DWORD dwTaskbarPosition = 3;
|
DWORD dwTaskbarPosition = 3;
|
||||||
DWORD GUI_TaskbarStyle = 1;
|
DWORD GUI_TaskbarStyle = 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user