├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── FUNDING.yml ├── LICENSE ├── README.md ├── TaskbarX Configurator ├── TaskbarX Configurator.sln └── TaskbarX Configurator │ ├── App.config │ ├── Application.xaml │ ├── Application.xaml.vb │ ├── Easings.vb │ ├── MainWindow.xaml │ ├── MainWindow.xaml.vb │ ├── My Project │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ ├── Settings.settings │ └── app.manifest │ ├── Resources │ ├── grid.png │ ├── logo2020-64.png │ └── logo2020_64.png │ ├── StoreLogo2-71.ico │ ├── TaskbarX Configurator.exe.config │ ├── TaskbarX Configurator.vbproj │ ├── TaskbarX Configurator.vbproj.user │ ├── grid.png │ └── packages.config ├── TaskbarX ├── TaskbarX.sln └── TaskbarX │ ├── .editorconfig │ ├── App.config │ ├── Easings.vb │ ├── MSAA.vb │ ├── Main.vb │ ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ ├── Settings.settings │ └── app.manifest │ ├── Resources │ └── icon.ico │ ├── Settings.vb │ ├── StoreLogo-71.ico │ ├── TaskbarAnimate.vb │ ├── TaskbarCenter.vb │ ├── TaskbarStyle.vb │ ├── TaskbarX.vbproj │ ├── TaskbarX.vbproj.user │ ├── TaskbarX_TemporaryKey.pfx │ ├── TrayIconBuster.vb │ └── Win32.vb └── VERSION /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 17 | 18 | **Describe the bug** 19 | A clear and concise description of what the bug is. 20 | 21 | **To Reproduce** 22 | Steps to reproduce the behavior: 23 | 1. Go to '...' 24 | 2. Click on '....' 25 | 3. Scroll down to '....' 26 | 4. See error 27 | 28 | **Expected behavior** 29 | A clear and concise description of what you expected to happen. 30 | 31 | **Screenshots** 32 | If applicable, add screenshots to help explain your problem. 33 | 34 | **Desktop (please complete the following information):** 35 | - OS: [e.g. Windows 10] 36 | - Version [e.g. 1909] 37 | 38 | **Additional context** 39 | Add any other context about the problem here. 40 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 17 | 18 | **Is your feature request related to a problem? Please describe.** 19 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 20 | 21 | **Describe the solution you'd like** 22 | A clear and concise description of what you want to happen. 23 | 24 | **Describe alternatives you've considered** 25 | A clear and concise description of any alternative solutions or features you've considered. 26 | 27 | **Additional context** 28 | Add any other context or screenshots about the feature request here. 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Ll]og/ 33 | [Ll]ogs/ 34 | 35 | # Visual Studio 2015/2017 cache/options directory 36 | .vs/ 37 | # Uncomment if you have tasks that create the project's static files in wwwroot 38 | #wwwroot/ 39 | 40 | # Visual Studio 2017 auto generated files 41 | Generated\ Files/ 42 | 43 | # MSTest test Results 44 | [Tt]est[Rr]esult*/ 45 | [Bb]uild[Ll]og.* 46 | 47 | # NUnit 48 | *.VisualState.xml 49 | TestResult.xml 50 | nunit-*.xml 51 | 52 | # Build Results of an ATL Project 53 | [Dd]ebugPS/ 54 | [Rr]eleasePS/ 55 | dlldata.c 56 | 57 | # Benchmark Results 58 | BenchmarkDotNet.Artifacts/ 59 | 60 | # .NET Core 61 | project.lock.json 62 | project.fragment.lock.json 63 | artifacts/ 64 | 65 | # ASP.NET Scaffolding 66 | ScaffoldingReadMe.txt 67 | 68 | # StyleCop 69 | StyleCopReport.xml 70 | 71 | # Files built by Visual Studio 72 | *_i.c 73 | *_p.c 74 | *_h.h 75 | *.ilk 76 | *.meta 77 | *.obj 78 | *.iobj 79 | *.pch 80 | *.pdb 81 | *.ipdb 82 | *.pgc 83 | *.pgd 84 | *.rsp 85 | *.sbr 86 | *.tlb 87 | *.tli 88 | *.tlh 89 | *.tmp 90 | *.tmp_proj 91 | *_wpftmp.csproj 92 | *.log 93 | *.vspscc 94 | *.vssscc 95 | .builds 96 | *.pidb 97 | *.svclog 98 | *.scc 99 | 100 | # Chutzpah Test files 101 | _Chutzpah* 102 | 103 | # Visual C++ cache files 104 | ipch/ 105 | *.aps 106 | *.ncb 107 | *.opendb 108 | *.opensdf 109 | *.sdf 110 | *.cachefile 111 | *.VC.db 112 | *.VC.VC.opendb 113 | 114 | # Visual Studio profiler 115 | *.psess 116 | *.vsp 117 | *.vspx 118 | *.sap 119 | 120 | # Visual Studio Trace Files 121 | *.e2e 122 | 123 | # TFS 2012 Local Workspace 124 | $tf/ 125 | 126 | # Guidance Automation Toolkit 127 | *.gpState 128 | 129 | # ReSharper is a .NET coding add-in 130 | _ReSharper*/ 131 | *.[Rr]e[Ss]harper 132 | *.DotSettings.user 133 | 134 | # TeamCity is a build add-in 135 | _TeamCity* 136 | 137 | # DotCover is a Code Coverage Tool 138 | *.dotCover 139 | 140 | # AxoCover is a Code Coverage Tool 141 | .axoCover/* 142 | !.axoCover/settings.json 143 | 144 | # Coverlet is a free, cross platform Code Coverage Tool 145 | coverage*[.json, .xml, .info] 146 | 147 | # Visual Studio code coverage results 148 | *.coverage 149 | *.coveragexml 150 | 151 | # NCrunch 152 | _NCrunch_* 153 | .*crunch*.local.xml 154 | nCrunchTemp_* 155 | 156 | # MightyMoose 157 | *.mm.* 158 | AutoTest.Net/ 159 | 160 | # Web workbench (sass) 161 | .sass-cache/ 162 | 163 | # Installshield output folder 164 | [Ee]xpress/ 165 | 166 | # DocProject is a documentation generator add-in 167 | DocProject/buildhelp/ 168 | DocProject/Help/*.HxT 169 | DocProject/Help/*.HxC 170 | DocProject/Help/*.hhc 171 | DocProject/Help/*.hhk 172 | DocProject/Help/*.hhp 173 | DocProject/Help/Html2 174 | DocProject/Help/html 175 | 176 | # Click-Once directory 177 | publish/ 178 | 179 | # Publish Web Output 180 | *.[Pp]ublish.xml 181 | *.azurePubxml 182 | # Note: Comment the next line if you want to checkin your web deploy settings, 183 | # but database connection strings (with potential passwords) will be unencrypted 184 | *.pubxml 185 | *.publishproj 186 | 187 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 188 | # checkin your Azure Web App publish settings, but sensitive information contained 189 | # in these scripts will be unencrypted 190 | PublishScripts/ 191 | 192 | # NuGet Packages 193 | *.nupkg 194 | # NuGet Symbol Packages 195 | *.snupkg 196 | # The packages folder can be ignored because of Package Restore 197 | **/[Pp]ackages/* 198 | # except build/, which is used as an MSBuild target. 199 | !**/[Pp]ackages/build/ 200 | # Uncomment if necessary however generally it will be regenerated when needed 201 | #!**/[Pp]ackages/repositories.config 202 | # NuGet v3's project.json files produces more ignorable files 203 | *.nuget.props 204 | *.nuget.targets 205 | 206 | # Microsoft Azure Build Output 207 | csx/ 208 | *.build.csdef 209 | 210 | # Microsoft Azure Emulator 211 | ecf/ 212 | rcf/ 213 | 214 | # Windows Store app package directories and files 215 | AppPackages/ 216 | BundleArtifacts/ 217 | Package.StoreAssociation.xml 218 | _pkginfo.txt 219 | *.appx 220 | *.appxbundle 221 | *.appxupload 222 | 223 | # Visual Studio cache files 224 | # files ending in .cache can be ignored 225 | *.[Cc]ache 226 | # but keep track of directories ending in .cache 227 | !?*.[Cc]ache/ 228 | 229 | # Others 230 | ClientBin/ 231 | ~$* 232 | *~ 233 | *.dbmdl 234 | *.dbproj.schemaview 235 | *.jfm 236 | *.pfx 237 | *.publishsettings 238 | orleans.codegen.cs 239 | 240 | # Including strong name files can present a security risk 241 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 242 | #*.snk 243 | 244 | # Since there are multiple workflows, uncomment next line to ignore bower_components 245 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 246 | #bower_components/ 247 | 248 | # RIA/Silverlight projects 249 | Generated_Code/ 250 | 251 | # Backup & report files from converting an old project file 252 | # to a newer Visual Studio version. Backup files are not needed, 253 | # because we have git ;-) 254 | _UpgradeReport_Files/ 255 | Backup*/ 256 | UpgradeLog*.XML 257 | UpgradeLog*.htm 258 | ServiceFabricBackup/ 259 | *.rptproj.bak 260 | 261 | # SQL Server files 262 | *.mdf 263 | *.ldf 264 | *.ndf 265 | 266 | # Business Intelligence projects 267 | *.rdl.data 268 | *.bim.layout 269 | *.bim_*.settings 270 | *.rptproj.rsuser 271 | *- [Bb]ackup.rdl 272 | *- [Bb]ackup ([0-9]).rdl 273 | *- [Bb]ackup ([0-9][0-9]).rdl 274 | 275 | # Microsoft Fakes 276 | FakesAssemblies/ 277 | 278 | # GhostDoc plugin setting file 279 | *.GhostDoc.xml 280 | 281 | # Node.js Tools for Visual Studio 282 | .ntvs_analysis.dat 283 | node_modules/ 284 | 285 | # Visual Studio 6 build log 286 | *.plg 287 | 288 | # Visual Studio 6 workspace options file 289 | *.opt 290 | 291 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 292 | *.vbw 293 | 294 | # Visual Studio LightSwitch build output 295 | **/*.HTMLClient/GeneratedArtifacts 296 | **/*.DesktopClient/GeneratedArtifacts 297 | **/*.DesktopClient/ModelManifest.xml 298 | **/*.Server/GeneratedArtifacts 299 | **/*.Server/ModelManifest.xml 300 | _Pvt_Extensions 301 | 302 | # Paket dependency manager 303 | .paket/paket.exe 304 | paket-files/ 305 | 306 | # FAKE - F# Make 307 | .fake/ 308 | 309 | # CodeRush personal settings 310 | .cr/personal 311 | 312 | # Python Tools for Visual Studio (PTVS) 313 | __pycache__/ 314 | *.pyc 315 | 316 | # Cake - Uncomment if you are using it 317 | # tools/** 318 | # !tools/packages.config 319 | 320 | # Tabs Studio 321 | *.tss 322 | 323 | # Telerik's JustMock configuration file 324 | *.jmconfig 325 | 326 | # BizTalk build output 327 | *.btp.cs 328 | *.btm.cs 329 | *.odx.cs 330 | *.xsd.cs 331 | 332 | # OpenCover UI analysis results 333 | OpenCover/ 334 | 335 | # Azure Stream Analytics local run output 336 | ASALocalRun/ 337 | 338 | # MSBuild Binary and Structured Log 339 | *.binlog 340 | 341 | # NVidia Nsight GPU debugger configuration file 342 | *.nvuser 343 | 344 | # MFractors (Xamarin productivity tool) working folder 345 | .mfractor/ 346 | 347 | # Local History for Visual Studio 348 | .localhistory/ 349 | 350 | # BeatPulse healthcheck temp database 351 | healthchecksdb 352 | 353 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 354 | MigrationBackup/ 355 | 356 | # Ionide (cross platform F# VS Code tools) working folder 357 | .ionide/ 358 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at chrisand1998@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | When contributing to this repository, please first discuss the change you wish to make via issue, 4 | email, or any other method with the owners of this repository before making a change. 5 | 6 | Please note we have a code of conduct, please follow it in all your interactions with the project. 7 | 8 | ## Pull Request Process 9 | 10 | 1. Ensure any install or build dependencies are removed before the end of the layer when doing a 11 | build. 12 | 2. Update the README.md with details of changes to the interface, this includes new environment 13 | variables, exposed ports, useful file locations and container parameters. 14 | 3. Increase the version numbers in any examples files and the README.md to the new version that this 15 | Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). 16 | 4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you 17 | do not have permission to do that, you may request the second reviewer to merge it for you. 18 | 19 | ## Code of Conduct 20 | 21 | ### Our Pledge 22 | 23 | In the interest of fostering an open and welcoming environment, we as 24 | contributors and maintainers pledge to making participation in our project and 25 | our community a harassment-free experience for everyone, regardless of age, body 26 | size, disability, ethnicity, gender identity and expression, level of experience, 27 | nationality, personal appearance, race, religion, or sexual identity and 28 | orientation. 29 | 30 | ### Our Standards 31 | 32 | Examples of behavior that contributes to creating a positive environment 33 | include: 34 | 35 | * Using welcoming and inclusive language 36 | * Being respectful of differing viewpoints and experiences 37 | * Gracefully accepting constructive criticism 38 | * Focusing on what is best for the community 39 | * Showing empathy towards other community members 40 | 41 | Examples of unacceptable behavior by participants include: 42 | 43 | * The use of sexualized language or imagery and unwelcome sexual attention or 44 | advances 45 | * Trolling, insulting/derogatory comments, and personal or political attacks 46 | * Public or private harassment 47 | * Publishing others' private information, such as a physical or electronic 48 | address, without explicit permission 49 | * Other conduct which could reasonably be considered inappropriate in a 50 | professional setting 51 | 52 | ### Our Responsibilities 53 | 54 | Project maintainers are responsible for clarifying the standards of acceptable 55 | behavior and are expected to take appropriate and fair corrective action in 56 | response to any instances of unacceptable behavior. 57 | 58 | Project maintainers have the right and responsibility to remove, edit, or 59 | reject comments, commits, code, wiki edits, issues, and other contributions 60 | that are not aligned to this Code of Conduct, or to ban temporarily or 61 | permanently any contributor for other behaviors that they deem inappropriate, 62 | threatening, offensive, or harmful. 63 | 64 | ### Scope 65 | 66 | This Code of Conduct applies both within project spaces and in public spaces 67 | when an individual is representing the project or its community. Examples of 68 | representing a project or community include using an official project e-mail 69 | address, posting via an official social media account, or acting as an appointed 70 | representative at an online or offline event. Representation of a project may be 71 | further defined and clarified by project maintainers. 72 | 73 | ### Enforcement 74 | 75 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 76 | reported by contacting the project team at [INSERT EMAIL ADDRESS]. All 77 | complaints will be reviewed and investigated and will result in a response that 78 | is deemed necessary and appropriate to the circumstances. The project team is 79 | obligated to maintain confidentiality with regard to the reporter of an incident. 80 | Further details of specific enforcement policies may be posted separately. 81 | 82 | Project maintainers who do not follow or enforce the Code of Conduct in good 83 | faith may face temporary or permanent repercussions as determined by other 84 | members of the project's leadership. 85 | 86 | ### Attribution 87 | 88 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 89 | available at [http://contributor-covenant.org/version/1/4][version] 90 | 91 | [homepage]: http://contributor-covenant.org 92 | [version]: http://contributor-covenant.org/version/1/4/ 93 | -------------------------------------------------------------------------------- /FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ['https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BLHEGFMLP5MQN&source=url'] 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Chris Andriessen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # TaskbarX 3 | 4 | 5 | ![rsz_hero2](https://user-images.githubusercontent.com/50437199/90984468-6c5a1a00-e575-11ea-9af0-a874115e07e7.png) 6 | 7 | TaskbarX gives you control over the position of your taskbar icons. 8 | TaskbarX will give you an original Windows dock like feel. The icons will move to the center or user given position when an icon gets added or removed from the taskbar. You will be given the option to choose between a variety of different animations and change their speeds. The animations can be disabled if you don't like animations and want them to move in an instant. The center position can also be changed to bring your icons more to the left or right based on the center position. Currently all taskbar settings are supported including the vertical taskbar and unlimited taskbars. 9 | TaskbarX has been in development since 6 may 2018. Also known as FalconX and Falcon10. 10 |   11 | 12 | ![aa4](https://user-images.githubusercontent.com/50437199/79305152-1c968280-7ef3-11ea-9eda-c97f61b758bd.png) 13 |   14 | 15 | 16 | ## Features 17 | 18 | - 42 different Animations including "none" 19 | - Great performance (Very optimized and lightweight looping) 20 | - Change animation speed 21 | - Change custom offset position based on center 22 | - Center between startbutton, search, taskview etc... and left tray icons, clock etc... 23 | - All taskbar settings supported 24 | - Vertical taskbar supported 25 | - Unlimited monitors supported 26 | - Change taskbar style to Transparent, Blur and Acrylic 27 | - Change taskbar color and transparency 28 | - Hide Start button and more... 29 | - Taskbar segments 30 | - Custom start button 31 | 32 | 33 |   34 | 35 | 36 | 37 | ## How to use TaskbarX with Windows 11? 38 | 39 | Do you want to install Windows 11 but you really like the taskbar of windows 10? Then you can actualy patch the Windows 11 Explorer to get back the old taskbar. Doing this will make TaskbarX functional again in Windows 11. https://github.com/valinet/ExplorerPatcher 40 | 41 | NOTE (for Windows 11 users): 42 | TaskbarX is build for Windows 10. On Windows 11 TaskbarX can only be used to change the background style of the taskbar until Windows 11 version number 10.0.22621.1265 Feb 2023. If you have a higher version than Windows 11 10.0.22621.1265 Feb 2023 TaskbarX will not work. 43 | 44 |   45 | 46 | 47 | ## Start icon file 48 | 49 | ![start](https://user-images.githubusercontent.com/50437199/147479778-efed8dce-058e-408e-89f8-18b1bd4ecbf8.png) ![startdark](https://user-images.githubusercontent.com/50437199/147481351-0d90c00a-be6d-4ac7-bd76-d1557bd539a1.png)![startlight](https://user-images.githubusercontent.com/50437199/147481364-68a55a47-f527-4add-8ada-9f9a2a560b18.png)![startcolor](https://user-images.githubusercontent.com/50437199/147634252-ad73062f-6409-45d8-8a10-1362da4e226b.png) 50 | 51 | 52 | Looking for a start icon file? 53 | **Start icon:** [start.ico](https://github.com/ChrisAnd1998/TaskbarX/releases/download/1.7.5.0/start.ico) 54 | **Start dark icon:** [startdark.ico](https://github.com/ChrisAnd1998/TaskbarX/releases/download/1.7.5.0/startdark.ico) 55 | **Start light icon:** [startlight.ico](https://github.com/ChrisAnd1998/TaskbarX/releases/download/1.7.5.0/startlight.ico) 56 | **Start color icon:** [startcolor.ico](https://github.com/ChrisAnd1998/TaskbarX/releases/download/1.7.5.0/startcolor.ico) 57 | 58 |   59 | 60 | 61 | ## Commandline Arguments 62 | 63 | _**-stop** will stop TaskbarX, puts all icons back to the left and resets the taskbar style. 64 | **-tbs=1** will make the taskbar transparent. 2 blur, 3 acrylic, 4 transparent (with gradient), 5 opaque and 0 is disabled. 65 | **-ptbo=0** will set the offset of the primary taskbar based on the center. 66 | **-stbo=0** will set the offset of the secondary taskbar based on the center. 67 | **-cpo=1** will only center the primary taskbar. 0 is disabled. 68 | **-cso=1** will only center the secondary taskbar(s). 0 is disabled. 69 | **-as=backeaseout** will set the animation style to BackEaseOut. "none" is instant. 70 | **-asp=500** will set the speed of the animation. 71 | **-lr=400** will set the refresh rate of the looper/taskbar checker. 72 | **-cib=1** will set the primary taskbar position in between start, search etc.. and the tray. 73 | **-ftotc=1** will update any toolbar when a tray icon gets added or removed. 74 | **-sr=1920** will put the icons to the left when screen width becomes 1920px. 75 | **-sr2=1920** will put the icons to the left when screen width becomes 1920px. 76 | **-sr3=1920** will put the icons to the left when screen width becomes 1920px. 77 | **-cfsa=1** will pause TaskbarX if a fullscreen app is running. 78 | **-obas=backeaseout** will set the animation style to BackEaseOut when on battery mode. 79 | **-oblr=400** will set the refresh rate of the looper/taskbar checker when on battery mode. 80 | **-dct=1** will stop TaskbarX from centering the taskbar icons. 81 | **-hps=1** will hide the start button on the primary monitor. 82 | **-hss=1** will hide the start button on the secondary monitor. 83 | **-hpt=1** will hide the tray area on the primary monitor. 84 | **-hst=1** will hide the tray area on the secondary monitor. 85 | **-sti=1** will show a tray icon to quickly restart and stop TaskbarX. 86 | **-dtbsowm=1** will revert to the default taskbar on maximized window. 87 | **-tpop=100** will set the total opacity of the primary taskbar. 88 | **-tsop=100** will set the total opacity of the secondary taskbar. 89 | **-rzbt=1** will revert the taskbar back to the left when the icons start overlapping with the Tray area. 90 | **-tbr=5** will set the rounding of the taskbar. 91 | **-tbsg=1** will enable taskbar segments. 0 is disabled and 1 is enabled. 92 | **-color=0;0;0;1** will set the color of the taskbar when using taskbar styling. RGBA._ 93 | 94 | > **Example:** _C:\Program Files (x86)\TaskbarX\TaskbarX.exe -tbs=1 -as=backeaseout_ 95 | 96 | 97 | 98 |   99 | 100 | ## References 101 | 102 | - ModernWPF: https://github.com/Kinnara/ModernWpf 103 | - TaskScheduler: https://github.com/dahall/TaskScheduler 104 | - Emoji.Wpf: https://github.com/samhocevar/emoji.wpf 105 | 106 |   107 | 108 | 109 | ## Downloads 110 | 111 | - FREE | Portable .zip package : https://chrisandriessen.nl/taskbarx 112 | - FREE | Rainmeter Skin : https://chrisandriessen.nl/taskbarx 113 | - PAID | Windows Store : https://www.microsoft.com/store/productid/9PCMZ6BXK8GH 114 | 115 | 116 |   117 | 118 | 119 | 120 | ## Frequently Asked Questions 121 | 122 | **What versions of Windows does TaskbarX support?** TaskbarX only supports Windows 10 ([and Windows 11 by using Windows 10 taskbar](#how-to-use-taskbarx-with-windows-11)). Version 1709 and lower will have issues with the "taskbar styling" option but, the centering will work fine. Windows 7 does not work and is not supported. It could be working on Windows 8 but, is not officially tested and is also not supported. 123 | 124 | 125 | 126 | **Whats the difference between the normal version and the store version?** The store version is exactly the same as the normal/free version. It's a donation sytem. The store version does give you the benefit of automatic updates and easy installing. 127 | 128 | 129 | 130 | **Does TaskbarX change my settings or registry?** No, TaskbarX is completely portable doesn't change your settings or your registry. Closing TaskbarX will stop the centering. 131 | 132 | 133 | 134 | **How to run TaskbarX on startup?** Once you click apply inside the Configurator a Taskschedule should be created with a delay of 3 seconds. If this doesn't work try increasing the delay to like 10 seconds or so inside the Configurator under the Taskschedule tab. 135 | 136 | 137 | 138 | **How do i uninstall TaskbarX?** Open the "TaskbarX Configurator" and hit the "Stop TaskbarX" button. This will stop the TaskbarX process and put your icons back to the left. Then go to the "Taskschedule" tab and hit the "Remove" button. After that you can simply remove the files where you installed TaskbarX. https://www.youtube.com/watch?v=Fj-gSF_nEyo 139 | 140 | 141 | 142 | **How to update TaskbarX?** Open the "TaskbarX Configurator" and hit the "Stop TaskbarX" button. This will stop the TaskbarX process and put your icons back to the left. Then overwrite the old TaskbarX files with the updated ones. https://www.youtube.com/watch?v=4dG8MlmeQsg 143 | 144 | 145 | 146 | **Error Windows cannot find 'shell:AppsFolder\Chris... after uninstalling Store version?** At the moment the Store has no option to remove a taskschedule. So it has to be done manually until Microsoft provides a solution. Here's how to fix it. In your startmenu search for "Task Scheduler". On the left menu click on "Task Scheduler Library". In the middle a list will appear. Right click on the "TaskbarX" or "FalconX" entry and click "Delete". https://www.youtube.com/watch?v=QtvxF1S7Dsw 147 | 148 | 149 |   150 | 151 | 152 | 153 | ## Errors 154 | 155 | The Store version is not capable of uninstalling a taskschedule. 156 | If you get the error below then this explains how to fix it: 157 | 158 | In your startmenu search for "**Task Scheduler**". 159 | On the left menu click on "**Task Scheduler Library**". In the middle a list will appear. 160 | Right click on the "**TaskbarX**" or "**FalconX**" entry and click "**Delete**". 161 | 162 | ![Taskbar error](https://user-images.githubusercontent.com/50437199/80919928-e0757580-8d6c-11ea-9106-b0b1ff33f740.png) 163 | 164 | _You can also use `SCHTASKS /DELETE /TN "TaskbarX PCNAMEUSERNAME"` to remove the scheduled task from the command line._ 165 | 166 |   167 | 168 | 169 | ## Tags 170 | center taskbar, center taskbar icons, CenterTaskbar, center taskbar icons windows 10, center taskbar windows, windows center taskbar, windows center taskbar icons, center taskbar icons, windows 10 center taskbar icons, falcon10, falcon taskbar, taskbar, taskbar icons, taskbar buttons 171 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29503.13 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TaskbarX Configurator", "TaskbarX Configurator\TaskbarX Configurator.vbproj", "{EB569675-BF03-4E0B-B19B-3551013DB88D}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {EB569675-BF03-4E0B-B19B-3551013DB88D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {EB569675-BF03-4E0B-B19B-3551013DB88D}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {EB569675-BF03-4E0B-B19B-3551013DB88D}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {EB569675-BF03-4E0B-B19B-3551013DB88D}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {616A3F68-566E-4699-9DEE-1A35A4558E62} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/Application.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/Application.xaml.vb: -------------------------------------------------------------------------------- 1 | Class Application 2 | 3 | ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException 4 | ' can be handled in this file. 5 | 6 | End Class 7 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/Easings.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | 3 | Public Delegate Function EasingDelegate(ByVal currentTime As Double, ByVal minValue As Double, ByVal maxValue As Double, ByVal duration As Double) As Double 4 | 5 | Public Class Easings 6 | 7 | 'All Animations are here some of them can be found here https://easings.net/en 8 | Public Shared Function Linear(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 9 | Return maxHeight * currentTime / duration + minHeight 10 | End Function 11 | 12 | Public Shared Function ExpoEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 13 | If currentTime <> duration Then 14 | Return maxHeight * (-Math.Pow(2.0, -10.0 * currentTime / duration) + 1.0) + minHeight 15 | End If 16 | Return minHeight + maxHeight 17 | End Function 18 | 19 | Public Shared Function ExpoEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 20 | If currentTime <> 0.0 Then 21 | Return maxHeight * Math.Pow(2.0, 10.0 * (currentTime / duration - 1.0)) + minHeight 22 | End If 23 | Return minHeight 24 | End Function 25 | 26 | Public Shared Function ExpoEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 27 | If currentTime = 0.0 Then 28 | Return minHeight 29 | End If 30 | If currentTime = duration Then 31 | Return minHeight + maxHeight 32 | End If 33 | Dim num As Double = currentTime / (duration / 2.0) 34 | currentTime = num 35 | If num < 1.0 Then 36 | Return maxHeight / 2.0 * Math.Pow(2.0, 10.0 * (currentTime - 1.0)) + minHeight 37 | End If 38 | Dim num2 As Double = maxHeight / 2.0 39 | Dim x As Double = 2.0 40 | Dim num3 As Double = -10.0 41 | Dim num4 As Double = currentTime - 1.0 42 | Return num2 * (-Math.Pow(x, num3 * num4) + 2.0) + minHeight 43 | End Function 44 | 45 | Public Shared Function ExpoEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 46 | If currentTime < duration / 2.0 Then 47 | Return Easings.ExpoEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 48 | End If 49 | Return Easings.ExpoEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 50 | End Function 51 | 52 | Public Shared Function CircEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 53 | Dim num As Double = 1.0 54 | Dim num2 As Double = currentTime / duration - 1.0 55 | currentTime = num2 56 | Return maxHeight * Math.Sqrt(num - num2 * currentTime) + minHeight 57 | End Function 58 | 59 | Public Shared Function CircEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 60 | Dim num As Double = 1.0 61 | Dim num2 As Double = currentTime / duration 62 | currentTime = num2 63 | Dim sqrt As Double = Math.Sqrt(num - num2 * currentTime) 64 | If Double.IsNaN(sqrt) Then 65 | sqrt = 0.0 66 | End If 67 | Return -maxHeight * (sqrt - 1.0) + minHeight 68 | End Function 69 | 70 | Public Shared Function CircEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 71 | Dim num As Double = currentTime / (duration / 2.0) 72 | currentTime = num 73 | If num < 1.0 Then 74 | Return -maxHeight / 2.0 * (Math.Sqrt(1.0 - currentTime * currentTime) - 1.0) + minHeight 75 | End If 76 | Dim num2 As Double = maxHeight / 2.0 77 | Dim num3 As Double = 1.0 78 | Dim num4 As Double = currentTime - 2.0 79 | currentTime = num4 80 | Return num2 * (Math.Sqrt(num3 - num4 * currentTime) + 1.0) + minHeight 81 | End Function 82 | 83 | Public Shared Function CircEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 84 | If currentTime < duration / 2.0 Then 85 | Return Easings.CircEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 86 | End If 87 | Return Easings.CircEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 88 | End Function 89 | 90 | Public Shared Function QuadEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 91 | Dim num As Double = -maxHeight 92 | Dim num2 As Double = currentTime / duration 93 | currentTime = num2 94 | Return num * num2 * (currentTime - 2.0) + minHeight 95 | End Function 96 | 97 | Public Shared Function QuadEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 98 | Dim num As Double = currentTime / duration 99 | currentTime = num 100 | Return maxHeight * num * currentTime + minHeight 101 | End Function 102 | 103 | Public Shared Function QuadEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 104 | Dim num As Double = currentTime / (duration / 2.0) 105 | currentTime = num 106 | If num < 1.0 Then 107 | Return maxHeight / 2.0 * currentTime * currentTime + minHeight 108 | End If 109 | Dim num2 As Double = -maxHeight / 2.0 110 | Dim num3 As Double = currentTime - 1.0 111 | currentTime = num3 112 | Return num2 * (num3 * (currentTime - 2.0) - 1.0) + minHeight 113 | End Function 114 | 115 | Public Shared Function QuadEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 116 | If currentTime < duration / 2.0 Then 117 | Return Easings.QuadEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 118 | End If 119 | Return Easings.QuadEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 120 | End Function 121 | 122 | Public Shared Function SineEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 123 | Return maxHeight * Math.Sin(currentTime / duration * 1.5707963267948966) + minHeight 124 | End Function 125 | 126 | Public Shared Function SineEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 127 | Return -maxHeight * Math.Cos(currentTime / duration * 1.5707963267948966) + maxHeight + minHeight 128 | End Function 129 | 130 | Public Shared Function SineEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 131 | Dim num As Double = currentTime / (duration / 2.0) 132 | currentTime = num 133 | If num < 1.0 Then 134 | Return maxHeight / 2.0 * Math.Sin(3.1415926535897931 * currentTime / 2.0) + minHeight 135 | End If 136 | Dim num2 As Double = -maxHeight / 2.0 137 | Dim num3 As Double = 3.1415926535897931 138 | Dim num4 As Double = currentTime - 1.0 139 | Return num2 * (Math.Cos(num3 * num4 / 2.0) - 2.0) + minHeight 140 | End Function 141 | 142 | Public Shared Function SineEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 143 | If currentTime < duration / 2.0 Then 144 | Return Easings.SineEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 145 | End If 146 | Return Easings.SineEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 147 | End Function 148 | 149 | Public Shared Function CubicEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 150 | Dim num As Double = currentTime / duration - 1.0 151 | currentTime = num 152 | Return maxHeight * (num * currentTime * currentTime + 1.0) + minHeight 153 | End Function 154 | 155 | Public Shared Function CubicEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 156 | Dim num As Double = currentTime / duration 157 | currentTime = num 158 | Return maxHeight * num * currentTime * currentTime + minHeight 159 | End Function 160 | 161 | Public Shared Function CubicEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 162 | Dim num As Double = currentTime / (duration / 2.0) 163 | currentTime = num 164 | If num < 1.0 Then 165 | Return maxHeight / 2.0 * currentTime * currentTime * currentTime + minHeight 166 | End If 167 | Dim num2 As Double = maxHeight / 2.0 168 | Dim num3 As Double = currentTime - 2.0 169 | currentTime = num3 170 | Return num2 * (num3 * currentTime * currentTime + 2.0) + minHeight 171 | End Function 172 | 173 | Public Shared Function CubicEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 174 | If currentTime < duration / 2.0 Then 175 | Return Easings.CubicEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 176 | End If 177 | Return Easings.CubicEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 178 | End Function 179 | 180 | Public Shared Function QuartEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 181 | Dim num As Double = -maxHeight 182 | Dim num2 As Double = currentTime / duration - 1.0 183 | currentTime = num2 184 | Return num * (num2 * currentTime * currentTime * currentTime - 1.0) + minHeight 185 | End Function 186 | 187 | Public Shared Function QuartEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 188 | Dim num As Double = currentTime / duration 189 | currentTime = num 190 | Return maxHeight * num * currentTime * currentTime * currentTime + minHeight 191 | End Function 192 | 193 | Public Shared Function QuartEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 194 | Dim num As Double = currentTime / (duration / 2.0) 195 | currentTime = num 196 | If num < 1.0 Then 197 | Return maxHeight / 2.0 * currentTime * currentTime * currentTime * currentTime + minHeight 198 | End If 199 | Dim num2 As Double = -maxHeight / 2.0 200 | Dim num3 As Double = currentTime - 2.0 201 | currentTime = num3 202 | Return num2 * (num3 * currentTime * currentTime * currentTime - 2.0) + minHeight 203 | End Function 204 | 205 | Public Shared Function QuartEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 206 | If currentTime < duration / 2.0 Then 207 | Return Easings.QuartEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 208 | End If 209 | Return Easings.QuartEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 210 | End Function 211 | 212 | Public Shared Function QuintEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 213 | Dim num As Double = currentTime / duration - 1.0 214 | currentTime = num 215 | Return maxHeight * (num * currentTime * currentTime * currentTime * currentTime + 1.0) + minHeight 216 | End Function 217 | 218 | Public Shared Function QuintEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 219 | Dim num As Double = currentTime / duration 220 | currentTime = num 221 | Return maxHeight * num * currentTime * currentTime * currentTime * currentTime + minHeight 222 | End Function 223 | 224 | Public Shared Function QuintEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 225 | Dim num As Double = currentTime / (duration / 2.0) 226 | currentTime = num 227 | If num < 1.0 Then 228 | Return maxHeight / 2.0 * currentTime * currentTime * currentTime * currentTime * currentTime + minHeight 229 | End If 230 | Dim num2 As Double = maxHeight / 2.0 231 | Dim num3 As Double = currentTime - 2.0 232 | currentTime = num3 233 | Return num2 * (num3 * currentTime * currentTime * currentTime * currentTime + 2.0) + minHeight 234 | End Function 235 | 236 | Public Shared Function QuintEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 237 | If currentTime < duration / 2.0 Then 238 | Return Easings.QuintEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 239 | End If 240 | Return Easings.QuintEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 241 | End Function 242 | 243 | Public Shared Function ElasticEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 244 | Dim num As Double = currentTime / duration 245 | currentTime = num 246 | If num = 1.0 Then 247 | Return minHeight + maxHeight 248 | End If 249 | Dim p As Double = duration * 0.3 250 | Dim s As Double = p / 4.0 251 | Return maxHeight * Math.Pow(2.0, -10.0 * currentTime) * Math.Sin((currentTime * duration - s) * 6.2831853071795862 / p) + maxHeight + minHeight 252 | End Function 253 | 254 | Public Shared Function ElasticEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 255 | Dim num As Double = currentTime / duration 256 | currentTime = num 257 | If num = 1.0 Then 258 | Return minHeight + maxHeight 259 | End If 260 | Dim p As Double = duration * 0.3 261 | Dim s As Double = p / 4.0 262 | Dim x As Double = 2.0 263 | Dim num2 As Double = 10.0 264 | Dim num3 As Double = currentTime - 1.0 265 | currentTime = num3 266 | Return -(maxHeight * Math.Pow(x, num2 * num3) * Math.Sin((currentTime * duration - s) * 6.2831853071795862 / p)) + minHeight 267 | End Function 268 | 269 | Public Shared Function ElasticEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 270 | Dim num As Double = currentTime / (duration / 2.0) 271 | currentTime = num 272 | If num = 2.0 Then 273 | Return minHeight + maxHeight 274 | End If 275 | Dim p As Double = duration * 0.44999999999999996 276 | Dim s As Double = p / 4.0 277 | If currentTime < 1.0 Then 278 | Dim num2 As Double = -0.5 279 | Dim x As Double = 2.0 280 | Dim num3 As Double = 10.0 281 | Dim num4 As Double = currentTime - 1.0 282 | currentTime = num4 283 | Return num2 * (maxHeight * Math.Pow(x, num3 * num4) * Math.Sin((currentTime * duration - s) * 6.2831853071795862 / p)) + minHeight 284 | End If 285 | Dim x2 As Double = 2.0 286 | Dim num5 As Double = -10.0 287 | Dim num6 As Double = currentTime - 1.0 288 | currentTime = num6 289 | Return maxHeight * Math.Pow(x2, num5 * num6) * Math.Sin((currentTime * duration - s) * 6.2831853071795862 / p) * 0.5 + maxHeight + minHeight 290 | End Function 291 | 292 | Public Shared Function ElasticEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 293 | If currentTime < duration / 2.0 Then 294 | Return Easings.ElasticEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 295 | End If 296 | Return Easings.ElasticEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 297 | End Function 298 | 299 | Public Shared Function BounceEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 300 | Dim num As Double = currentTime / duration 301 | currentTime = num 302 | If num < 0.36363636363636365 Then 303 | Return maxHeight * (7.5625 * currentTime * currentTime) + minHeight 304 | End If 305 | If currentTime < 0.72727272727272729 Then 306 | Dim num2 As Double = 7.5625 307 | Dim num3 As Double = currentTime - 0.54545454545454541 308 | currentTime = num3 309 | Return maxHeight * (num2 * num3 * currentTime + 0.75) + minHeight 310 | End If 311 | If currentTime < 0.90909090909090906 Then 312 | Dim num4 As Double = 7.5625 313 | Dim num5 As Double = currentTime - 0.81818181818181823 314 | currentTime = num5 315 | Return maxHeight * (num4 * num5 * currentTime + 0.9375) + minHeight 316 | End If 317 | Dim num6 As Double = 7.5625 318 | Dim num7 As Double = currentTime - 0.95454545454545459 319 | currentTime = num7 320 | Return maxHeight * (num6 * num7 * currentTime + 0.984375) + minHeight 321 | End Function 322 | 323 | Public Shared Function BounceEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 324 | Return maxHeight - Easings.BounceEaseOut(duration - currentTime, 0.0, maxHeight, duration) + minHeight 325 | End Function 326 | 327 | Public Shared Function BounceEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 328 | If currentTime < duration / 2.0 Then 329 | Return Easings.BounceEaseIn(currentTime * 2.0, 0.0, maxHeight, duration) * 0.5 + minHeight 330 | End If 331 | Return Easings.BounceEaseOut(currentTime * 2.0 - duration, 0.0, maxHeight, duration) * 0.5 + maxHeight * 0.5 + minHeight 332 | End Function 333 | 334 | Public Shared Function BounceEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 335 | If currentTime < duration / 2.0 Then 336 | Return Easings.BounceEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 337 | End If 338 | Return Easings.BounceEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 339 | End Function 340 | 341 | Public Shared Function BackEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 342 | Dim num As Double = currentTime / duration - 1.0 343 | currentTime = num 344 | Return maxHeight * (num * currentTime * (2.70158 * currentTime + 1.70158) + 1.0) + minHeight 345 | End Function 346 | 347 | Public Shared Function BackEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 348 | Dim num As Double = currentTime / duration 349 | currentTime = num 350 | Return maxHeight * num * currentTime * (2.70158 * currentTime - 1.70158) + minHeight 351 | End Function 352 | 353 | Public Shared Function BackEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 354 | Dim s As Double = 1.70158 355 | Dim num As Double = currentTime / (duration / 2.0) 356 | currentTime = num 357 | If num < 1.0 Then 358 | Dim num2 As Double = maxHeight / 2.0 359 | Dim num3 As Double = currentTime * currentTime 360 | Dim num4 As Double = s * 1.525 361 | s = num4 362 | Return num2 * (num3 * ((num4 + 1.0) * currentTime - s)) + minHeight 363 | End If 364 | Dim num5 As Double = maxHeight / 2.0 365 | Dim num6 As Double = currentTime - 2.0 366 | currentTime = num6 367 | Dim num7 As Double = num6 * currentTime 368 | Dim num8 As Double = s * 1.525 369 | s = num8 370 | Return num5 * (num7 * ((num8 + 1.0) * currentTime + s) + 2.0) + minHeight 371 | End Function 372 | 373 | Public Shared Function BackEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 374 | If currentTime < duration / 2.0 Then 375 | Return Easings.BackEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 376 | End If 377 | Return Easings.BackEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 378 | End Function 379 | 380 | End Class -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System 2 | Imports System.Reflection 3 | Imports System.Runtime.InteropServices 4 | Imports System.Globalization 5 | Imports System.Resources 6 | Imports System.Windows 7 | 8 | ' General Information about an assembly is controlled through the following 9 | ' set of attributes. Change these attribute values to modify the information 10 | ' associated with an assembly. 11 | 12 | ' Review the values of the assembly attributes 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 'In order to begin building localizable applications, set 23 | 'CultureYouAreCodingWith in your .vbproj file 24 | 'inside a . For example, if you are using US english 25 | 'in your source files, set the to "en-US". Then uncomment the 26 | 'NeutralResourceLanguage attribute below. Update the "en-US" in the line 27 | 'below to match the UICulture setting in the project file. 28 | 29 | ' 30 | 31 | 32 | 'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. 33 | '1st parameter: where theme specific resource dictionaries are located 34 | '(used if a resource is not found in the page, 35 | ' or application resource dictionaries) 36 | 37 | '2nd parameter: where the generic resource dictionary is located 38 | '(used if a resource is not found in the page, 39 | 'app, and any theme specific resource dictionaries) 40 | 41 | 42 | 43 | 44 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 45 | 46 | 47 | ' Version information for an assembly consists of the following four values: 48 | ' 49 | ' Major Version 50 | ' Minor Version 51 | ' Build Number 52 | ' Revision 53 | ' 54 | ' You can specify all the values or you can default the Build and Revision Numbers 55 | ' by using the '*' as shown below: 56 | ' 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | 'This class was auto-generated by the StronglyTypedResourceBuilder 19 | 'class via a tool like ResGen or Visual Studio. 20 | 'To add or remove a member, edit your .ResX file then rerun ResGen 21 | 'with the /str option, or rebuild your VS project. 22 | ''' 23 | ''' A strongly-typed resource class, for looking up localized strings, etc. 24 | ''' 25 | _ 29 | Public Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' Returns the cached ResourceManager instance used by this class. 37 | ''' 38 | _ 39 | Public ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("TaskbarXConfiguratorWPF.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' Overrides the current thread's CurrentUICulture property for all 51 | ''' resource lookups using this strongly typed resource class. 52 | ''' 53 | _ 54 | Public Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | 63 | ''' 64 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 65 | ''' 66 | Public ReadOnly Property grid() As System.Drawing.Bitmap 67 | Get 68 | Dim obj As Object = ResourceManager.GetObject("grid", resourceCulture) 69 | Return CType(obj,System.Drawing.Bitmap) 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/My Project/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\grid.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | 16 | _ 19 | Partial Friend NotInheritable Class MySettings 20 | Inherits Global.System.Configuration.ApplicationSettingsBase 21 | 22 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 23 | 24 | #Region "My.Settings Auto-Save Functionality" 25 | #If _MyType = "WindowsForms" Then 26 | Private Shared addedHandler As Boolean 27 | 28 | Private Shared addedHandlerLockObject As New Object 29 | 30 | _ 31 | Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) 32 | If My.Application.SaveMySettingsOnExit Then 33 | My.Settings.Save() 34 | End If 35 | End Sub 36 | #End If 37 | #End Region 38 | 39 | Public Shared ReadOnly Property [Default]() As MySettings 40 | Get 41 | 42 | #If _MyType = "WindowsForms" Then 43 | If Not addedHandler Then 44 | SyncLock addedHandlerLockObject 45 | If Not addedHandler Then 46 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 47 | addedHandler = True 48 | End If 49 | End SyncLock 50 | End If 51 | #End If 52 | Return defaultInstance 53 | End Get 54 | End Property 55 | End Class 56 | 57 | Namespace My 58 | 59 | _ 62 | Friend Module MySettingsProperty 63 | 64 | _ 65 | Friend ReadOnly Property Settings() As Global.TaskbarXConfiguratorWPF.MySettings 66 | Get 67 | Return Global.TaskbarXConfiguratorWPF.MySettings.Default 68 | End Get 69 | End Property 70 | End Module 71 | End Namespace 72 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/My Project/app.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 59 | 60 | 61 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/Resources/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisAnd1998/TaskbarX/4bc446c147c116c140689ca3de84a336bb29d338/TaskbarX Configurator/TaskbarX Configurator/Resources/grid.png -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/Resources/logo2020-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisAnd1998/TaskbarX/4bc446c147c116c140689ca3de84a336bb29d338/TaskbarX Configurator/TaskbarX Configurator/Resources/logo2020-64.png -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/Resources/logo2020_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisAnd1998/TaskbarX/4bc446c147c116c140689ca3de84a336bb29d338/TaskbarX Configurator/TaskbarX Configurator/Resources/logo2020_64.png -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/StoreLogo2-71.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisAnd1998/TaskbarX/4bc446c147c116c140689ca3de84a336bb29d338/TaskbarX Configurator/TaskbarX Configurator/StoreLogo2-71.ico -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/TaskbarX Configurator.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/TaskbarX Configurator.vbproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | {EB569675-BF03-4E0B-B19B-3551013DB88D} 7 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} 8 | WinExe 9 | TaskbarXConfiguratorWPF 10 | TaskbarX Configurator 11 | v4.8 12 | Custom 13 | true 14 | true 15 | 16 | 17 | 18 | false 19 | D:\Visual Studio Projects\!TaskbarX\Publish\ 20 | true 21 | Disk 22 | false 23 | Foreground 24 | 7 25 | Days 26 | false 27 | false 28 | true 29 | true 30 | 2 31 | 1.0.0.%2a 32 | false 33 | true 34 | true 35 | 36 | 37 | AnyCPU 38 | true 39 | full 40 | true 41 | true 42 | true 43 | bin\Debug\ 44 | TaskbarX Configurator.xml 45 | 42314 46 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 47 | false 48 | 49 | 50 | AnyCPU 51 | pdbonly 52 | false 53 | false 54 | true 55 | false 56 | true 57 | ..\..\APPX\TaskbarX\Release\ 58 | TaskbarX Configurator.xml 59 | 42314 60 | true 61 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 62 | 63 | 64 | On 65 | 66 | 67 | Binary 68 | 69 | 70 | On 71 | 72 | 73 | On 74 | 75 | 76 | StoreLogo2-71.ico 77 | 78 | 79 | My Project\app.manifest 80 | 81 | 82 | true 83 | true 84 | true 85 | bin\x64\Debug\ 86 | TaskbarX Configurator.xml 87 | 42314 88 | full 89 | x64 90 | MinimumRecommendedRules.ruleset 91 | true 92 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 93 | 94 | 95 | true 96 | ..\..\APPX\TaskbarX64\Release\ 97 | TaskbarX Configurator.xml 98 | true 99 | 42314 100 | pdbonly 101 | x64 102 | MinimumRecommendedRules.ruleset 103 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 104 | false 105 | 106 | 107 | true 108 | true 109 | true 110 | bin\x86\Debug\ 111 | TaskbarX Configurator.xml 112 | 42314 113 | full 114 | x86 115 | MinimumRecommendedRules.ruleset 116 | true 117 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 118 | 119 | 120 | true 121 | ..\..\APPX\TaskbarX32\Release\ 122 | TaskbarX Configurator.xml 123 | true 124 | 42314 125 | pdbonly 126 | x86 127 | MinimumRecommendedRules.ruleset 128 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 129 | true 130 | 131 | 132 | 264F8D322D8DA53FB5812F8E791F057AF6D206CC 133 | 134 | 135 | TaskbarX Configurator_TemporaryKey.pfx 136 | 137 | 138 | true 139 | 140 | 141 | false 142 | 143 | 144 | 145 | False 146 | 147 | 148 | 149 | False 150 | 151 | 152 | False 153 | 154 | 155 | False 156 | 157 | 158 | 159 | False 160 | 161 | 162 | False 163 | 164 | 165 | False 166 | 167 | 168 | False 169 | 170 | 171 | False 172 | 173 | 174 | 4.0 175 | False 176 | 177 | 178 | False 179 | 180 | 181 | False 182 | 183 | 184 | False 185 | 186 | 187 | False 188 | 189 | 190 | 191 | 192 | MSBuild:Compile 193 | 194 | 195 | MSBuild:Compile 196 | Designer 197 | 198 | 199 | Application.xaml 200 | Code 201 | 202 | 203 | 204 | MainWindow.xaml 205 | Code 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | Code 230 | 231 | 232 | Microsoft.VisualBasic.WPF.MyExtension 233 | 1.0.0.0 234 | 235 | 236 | True 237 | True 238 | Resources.resx 239 | 240 | 241 | True 242 | Settings.settings 243 | True 244 | 245 | 246 | PublicVbMyResourcesResXFileCodeGenerator 247 | Resources.Designer.vb 248 | My.Resources 249 | Designer 250 | 251 | 252 | 253 | SettingsSingleFileGenerator 254 | Settings.Designer.vb 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 0.3.3 272 | 273 | 274 | 10.0.22621.2 275 | 276 | 277 | 0.9.6 278 | 279 | 280 | 4.7.0 281 | 282 | 283 | 2.10.1 284 | 285 | 286 | 287 | 288 | False 289 | Microsoft .NET Framework 4.7.2 %28x86 and x64%29 290 | true 291 | 292 | 293 | False 294 | .NET Framework 3.5 SP1 295 | false 296 | 297 | 298 | 299 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/TaskbarX Configurator.vbproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | D:\Visual Studio Projects\!TaskbarX\Publish\|publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | 14 | false 15 | 16 | -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisAnd1998/TaskbarX/4bc446c147c116c140689ca3de84a336bb29d338/TaskbarX Configurator/TaskbarX Configurator/grid.png -------------------------------------------------------------------------------- /TaskbarX Configurator/TaskbarX Configurator/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29503.13 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TaskbarX", "TaskbarX\TaskbarX.vbproj", "{280F29CB-27F8-41FA-8111-21E6916583FD}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {280F29CB-27F8-41FA-8111-21E6916583FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {280F29CB-27F8-41FA-8111-21E6916583FD}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {280F29CB-27F8-41FA-8111-21E6916583FD}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {280F29CB-27F8-41FA-8111-21E6916583FD}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {4A800EE9-8779-4772-A980-51ECC0F9AAB6} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.vb] 2 | 3 | # CA2101: Specify marshaling for P/Invoke string arguments 4 | dotnet_diagnostic.CA2101.severity = none 5 | 6 | # CA1401: P/Invokes should not be visible 7 | dotnet_diagnostic.CA1401.severity = none 8 | 9 | # BC42104: Variable is used before it has been assigned a value 10 | dotnet_diagnostic.BC42104.severity = none 11 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/Easings.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | 3 | Public Delegate Function EasingDelegate(ByVal currentTime As Double, ByVal minValue As Double, ByVal maxValue As Double, ByVal duration As Double) As Double 4 | 5 | Public Class Easings 6 | 7 | Public Shared Function Linear(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 8 | Return maxHeight * currentTime / duration + minHeight 9 | End Function 10 | 11 | Public Shared Function ExpoEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 12 | If currentTime <> duration Then 13 | Return maxHeight * (-Math.Pow(2.0, -10.0 * currentTime / duration) + 1.0) + minHeight 14 | End If 15 | Return minHeight + maxHeight 16 | End Function 17 | 18 | Public Shared Function ExpoEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 19 | If currentTime <> 0.0 Then 20 | Return maxHeight * Math.Pow(2.0, 10.0 * (currentTime / duration - 1.0)) + minHeight 21 | End If 22 | Return minHeight 23 | End Function 24 | 25 | Public Shared Function ExpoEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 26 | If currentTime = 0.0 Then 27 | Return minHeight 28 | End If 29 | If currentTime = duration Then 30 | Return minHeight + maxHeight 31 | End If 32 | Dim num As Double = currentTime / (duration / 2.0) 33 | currentTime = num 34 | If num < 1.0 Then 35 | Return maxHeight / 2.0 * Math.Pow(2.0, 10.0 * (currentTime - 1.0)) + minHeight 36 | End If 37 | Dim num2 As Double = maxHeight / 2.0 38 | Dim x As Double = 2.0 39 | Dim num3 As Double = -10.0 40 | Dim num4 As Double = currentTime - 1.0 41 | Return num2 * (-Math.Pow(x, num3 * num4) + 2.0) + minHeight 42 | End Function 43 | 44 | Public Shared Function ExpoEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 45 | If currentTime < duration / 2.0 Then 46 | Return Easings.ExpoEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 47 | End If 48 | Return Easings.ExpoEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 49 | End Function 50 | 51 | Public Shared Function CircEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 52 | Dim num As Double = 1.0 53 | Dim num2 As Double = currentTime / duration - 1.0 54 | currentTime = num2 55 | Return maxHeight * Math.Sqrt(num - num2 * currentTime) + minHeight 56 | End Function 57 | 58 | Public Shared Function CircEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 59 | Dim num As Double = 1.0 60 | Dim num2 As Double = currentTime / duration 61 | currentTime = num2 62 | Dim sqrt As Double = Math.Sqrt(num - num2 * currentTime) 63 | If Double.IsNaN(sqrt) Then 64 | sqrt = 0.0 65 | End If 66 | Return -maxHeight * (sqrt - 1.0) + minHeight 67 | End Function 68 | 69 | Public Shared Function CircEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 70 | Dim num As Double = currentTime / (duration / 2.0) 71 | currentTime = num 72 | If num < 1.0 Then 73 | Return -maxHeight / 2.0 * (Math.Sqrt(1.0 - currentTime * currentTime) - 1.0) + minHeight 74 | End If 75 | Dim num2 As Double = maxHeight / 2.0 76 | Dim num3 As Double = 1.0 77 | Dim num4 As Double = currentTime - 2.0 78 | currentTime = num4 79 | Return num2 * (Math.Sqrt(num3 - num4 * currentTime) + 1.0) + minHeight 80 | End Function 81 | 82 | Public Shared Function CircEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 83 | If currentTime < duration / 2.0 Then 84 | Return Easings.CircEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 85 | End If 86 | Return Easings.CircEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 87 | End Function 88 | 89 | Public Shared Function QuadEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 90 | Dim num As Double = -maxHeight 91 | Dim num2 As Double = currentTime / duration 92 | currentTime = num2 93 | Return num * num2 * (currentTime - 2.0) + minHeight 94 | End Function 95 | 96 | Public Shared Function QuadEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 97 | Dim num As Double = currentTime / duration 98 | currentTime = num 99 | Return maxHeight * num * currentTime + minHeight 100 | End Function 101 | 102 | Public Shared Function QuadEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 103 | Dim num As Double = currentTime / (duration / 2.0) 104 | currentTime = num 105 | If num < 1.0 Then 106 | Return maxHeight / 2.0 * currentTime * currentTime + minHeight 107 | End If 108 | Dim num2 As Double = -maxHeight / 2.0 109 | Dim num3 As Double = currentTime - 1.0 110 | currentTime = num3 111 | Return num2 * (num3 * (currentTime - 2.0) - 1.0) + minHeight 112 | End Function 113 | 114 | Public Shared Function QuadEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 115 | If currentTime < duration / 2.0 Then 116 | Return Easings.QuadEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 117 | End If 118 | Return Easings.QuadEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 119 | End Function 120 | 121 | Public Shared Function SineEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 122 | Return maxHeight * Math.Sin(currentTime / duration * 1.5707963267948966) + minHeight 123 | End Function 124 | 125 | Public Shared Function SineEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 126 | Return -maxHeight * Math.Cos(currentTime / duration * 1.5707963267948966) + maxHeight + minHeight 127 | End Function 128 | 129 | Public Shared Function SineEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 130 | Dim num As Double = currentTime / (duration / 2.0) 131 | currentTime = num 132 | If num < 1.0 Then 133 | Return maxHeight / 2.0 * Math.Sin(3.1415926535897931 * currentTime / 2.0) + minHeight 134 | End If 135 | Dim num2 As Double = -maxHeight / 2.0 136 | Dim num3 As Double = 3.1415926535897931 137 | Dim num4 As Double = currentTime - 1.0 138 | Return num2 * (Math.Cos(num3 * num4 / 2.0) - 2.0) + minHeight 139 | End Function 140 | 141 | Public Shared Function SineEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 142 | If currentTime < duration / 2.0 Then 143 | Return Easings.SineEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 144 | End If 145 | Return Easings.SineEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 146 | End Function 147 | 148 | Public Shared Function CubicEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 149 | Dim num As Double = currentTime / duration - 1.0 150 | currentTime = num 151 | Return maxHeight * (num * currentTime * currentTime + 1.0) + minHeight 152 | End Function 153 | 154 | Public Shared Function CubicEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 155 | Dim num As Double = currentTime / duration 156 | currentTime = num 157 | Return maxHeight * num * currentTime * currentTime + minHeight 158 | End Function 159 | 160 | Public Shared Function CubicEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 161 | Dim num As Double = currentTime / (duration / 2.0) 162 | currentTime = num 163 | If num < 1.0 Then 164 | Return maxHeight / 2.0 * currentTime * currentTime * currentTime + minHeight 165 | End If 166 | Dim num2 As Double = maxHeight / 2.0 167 | Dim num3 As Double = currentTime - 2.0 168 | currentTime = num3 169 | Return num2 * (num3 * currentTime * currentTime + 2.0) + minHeight 170 | End Function 171 | 172 | Public Shared Function CubicEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 173 | If currentTime < duration / 2.0 Then 174 | Return Easings.CubicEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 175 | End If 176 | Return Easings.CubicEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 177 | End Function 178 | 179 | Public Shared Function QuartEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 180 | Dim num As Double = -maxHeight 181 | Dim num2 As Double = currentTime / duration - 1.0 182 | currentTime = num2 183 | Return num * (num2 * currentTime * currentTime * currentTime - 1.0) + minHeight 184 | End Function 185 | 186 | Public Shared Function QuartEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 187 | Dim num As Double = currentTime / duration 188 | currentTime = num 189 | Return maxHeight * num * currentTime * currentTime * currentTime + minHeight 190 | End Function 191 | 192 | Public Shared Function QuartEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 193 | Dim num As Double = currentTime / (duration / 2.0) 194 | currentTime = num 195 | If num < 1.0 Then 196 | Return maxHeight / 2.0 * currentTime * currentTime * currentTime * currentTime + minHeight 197 | End If 198 | Dim num2 As Double = -maxHeight / 2.0 199 | Dim num3 As Double = currentTime - 2.0 200 | currentTime = num3 201 | Return num2 * (num3 * currentTime * currentTime * currentTime - 2.0) + minHeight 202 | End Function 203 | 204 | Public Shared Function QuartEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 205 | If currentTime < duration / 2.0 Then 206 | Return Easings.QuartEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 207 | End If 208 | Return Easings.QuartEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 209 | End Function 210 | 211 | Public Shared Function QuintEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 212 | Dim num As Double = currentTime / duration - 1.0 213 | currentTime = num 214 | Return maxHeight * (num * currentTime * currentTime * currentTime * currentTime + 1.0) + minHeight 215 | End Function 216 | 217 | Public Shared Function QuintEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 218 | Dim num As Double = currentTime / duration 219 | currentTime = num 220 | Return maxHeight * num * currentTime * currentTime * currentTime * currentTime + minHeight 221 | End Function 222 | 223 | Public Shared Function QuintEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 224 | Dim num As Double = currentTime / (duration / 2.0) 225 | currentTime = num 226 | If num < 1.0 Then 227 | Return maxHeight / 2.0 * currentTime * currentTime * currentTime * currentTime * currentTime + minHeight 228 | End If 229 | Dim num2 As Double = maxHeight / 2.0 230 | Dim num3 As Double = currentTime - 2.0 231 | currentTime = num3 232 | Return num2 * (num3 * currentTime * currentTime * currentTime * currentTime + 2.0) + minHeight 233 | End Function 234 | 235 | Public Shared Function QuintEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 236 | If currentTime < duration / 2.0 Then 237 | Return Easings.QuintEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 238 | End If 239 | Return Easings.QuintEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 240 | End Function 241 | 242 | Public Shared Function ElasticEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 243 | Dim num As Double = currentTime / duration 244 | currentTime = num 245 | If num = 1.0 Then 246 | Return minHeight + maxHeight 247 | End If 248 | Dim p As Double = duration * 0.3 249 | Dim s As Double = p / 4.0 250 | Return maxHeight * Math.Pow(2.0, -10.0 * currentTime) * Math.Sin((currentTime * duration - s) * 6.2831853071795862 / p) + maxHeight + minHeight 251 | End Function 252 | 253 | Public Shared Function ElasticEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 254 | Dim num As Double = currentTime / duration 255 | currentTime = num 256 | If num = 1.0 Then 257 | Return minHeight + maxHeight 258 | End If 259 | Dim p As Double = duration * 0.3 260 | Dim s As Double = p / 4.0 261 | Dim x As Double = 2.0 262 | Dim num2 As Double = 10.0 263 | Dim num3 As Double = currentTime - 1.0 264 | currentTime = num3 265 | Return -(maxHeight * Math.Pow(x, num2 * num3) * Math.Sin((currentTime * duration - s) * 6.2831853071795862 / p)) + minHeight 266 | End Function 267 | 268 | Public Shared Function ElasticEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 269 | Dim num As Double = currentTime / (duration / 2.0) 270 | currentTime = num 271 | If num = 2.0 Then 272 | Return minHeight + maxHeight 273 | End If 274 | Dim p As Double = duration * 0.44999999999999996 275 | Dim s As Double = p / 4.0 276 | If currentTime < 1.0 Then 277 | Dim num2 As Double = -0.5 278 | Dim x As Double = 2.0 279 | Dim num3 As Double = 10.0 280 | Dim num4 As Double = currentTime - 1.0 281 | currentTime = num4 282 | Return num2 * (maxHeight * Math.Pow(x, num3 * num4) * Math.Sin((currentTime * duration - s) * 6.2831853071795862 / p)) + minHeight 283 | End If 284 | Dim x2 As Double = 2.0 285 | Dim num5 As Double = -10.0 286 | Dim num6 As Double = currentTime - 1.0 287 | currentTime = num6 288 | Return maxHeight * Math.Pow(x2, num5 * num6) * Math.Sin((currentTime * duration - s) * 6.2831853071795862 / p) * 0.5 + maxHeight + minHeight 289 | End Function 290 | 291 | Public Shared Function ElasticEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 292 | If currentTime < duration / 2.0 Then 293 | Return Easings.ElasticEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 294 | End If 295 | Return Easings.ElasticEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 296 | End Function 297 | 298 | Public Shared Function BounceEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 299 | Dim num As Double = currentTime / duration 300 | currentTime = num 301 | If num < 0.36363636363636365 Then 302 | Return maxHeight * (7.5625 * currentTime * currentTime) + minHeight 303 | End If 304 | If currentTime < 0.72727272727272729 Then 305 | Dim num2 As Double = 7.5625 306 | Dim num3 As Double = currentTime - 0.54545454545454541 307 | currentTime = num3 308 | Return maxHeight * (num2 * num3 * currentTime + 0.75) + minHeight 309 | End If 310 | If currentTime < 0.90909090909090906 Then 311 | Dim num4 As Double = 7.5625 312 | Dim num5 As Double = currentTime - 0.81818181818181823 313 | currentTime = num5 314 | Return maxHeight * (num4 * num5 * currentTime + 0.9375) + minHeight 315 | End If 316 | Dim num6 As Double = 7.5625 317 | Dim num7 As Double = currentTime - 0.95454545454545459 318 | currentTime = num7 319 | Return maxHeight * (num6 * num7 * currentTime + 0.984375) + minHeight 320 | End Function 321 | 322 | Public Shared Function BounceEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 323 | Return maxHeight - Easings.BounceEaseOut(duration - currentTime, 0.0, maxHeight, duration) + minHeight 324 | End Function 325 | 326 | Public Shared Function BounceEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 327 | If currentTime < duration / 2.0 Then 328 | Return Easings.BounceEaseIn(currentTime * 2.0, 0.0, maxHeight, duration) * 0.5 + minHeight 329 | End If 330 | Return Easings.BounceEaseOut(currentTime * 2.0 - duration, 0.0, maxHeight, duration) * 0.5 + maxHeight * 0.5 + minHeight 331 | End Function 332 | 333 | Public Shared Function BounceEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 334 | If currentTime < duration / 2.0 Then 335 | Return Easings.BounceEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 336 | End If 337 | Return Easings.BounceEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 338 | End Function 339 | 340 | Public Shared Function BackEaseOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 341 | Dim num As Double = currentTime / duration - 1.0 342 | currentTime = num 343 | Return maxHeight * (num * currentTime * (2.70158 * currentTime + 1.70158) + 1.0) + minHeight 344 | End Function 345 | 346 | Public Shared Function BackEaseIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 347 | Dim num As Double = currentTime / duration 348 | currentTime = num 349 | Return maxHeight * num * currentTime * (2.70158 * currentTime - 1.70158) + minHeight 350 | 351 | End Function 352 | 353 | Public Shared Function BackEaseInOut(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 354 | Dim s As Double = 1.70158 355 | Dim num As Double = currentTime / (duration / 2.0) 356 | currentTime = num 357 | If num < 1.0 Then 358 | Dim num2 As Double = maxHeight / 2.0 359 | Dim num3 As Double = currentTime * currentTime 360 | Dim num4 As Double = s * 1.525 361 | s = num4 362 | Return num2 * (num3 * ((num4 + 1.0) * currentTime - s)) + minHeight 363 | End If 364 | Dim num5 As Double = maxHeight / 2.0 365 | Dim num6 As Double = currentTime - 2.0 366 | currentTime = num6 367 | Dim num7 As Double = num6 * currentTime 368 | Dim num8 As Double = s * 1.525 369 | s = num8 370 | Return num5 * (num7 * ((num8 + 1.0) * currentTime + s) + 2.0) + minHeight 371 | End Function 372 | 373 | Public Shared Function BackEaseOutIn(currentTime As Double, minHeight As Double, maxHeight As Double, duration As Double) As Double 374 | If currentTime < duration / 2.0 Then 375 | Return Easings.BackEaseOut(currentTime * 2.0, minHeight, maxHeight / 2.0, duration) 376 | End If 377 | Return Easings.BackEaseIn(currentTime * 2.0 - duration, minHeight + maxHeight / 2.0, maxHeight / 2.0, duration) 378 | End Function 379 | 380 | End Class -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/MSAA.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | 3 | Imports System.Runtime.InteropServices 4 | Imports System.Text 5 | Imports Accessibility 6 | 7 | Public Class MSAA 8 | 9 | 10 | Public Shared Function WindowFromAccessibleObject(ByVal pacc As IAccessible, ByRef phwnd As IntPtr) As UInteger 11 | 12 | End Function 13 | 14 | 15 | Public Shared Function AccessibleChildren(ByVal paccContainer As IAccessible, ByVal iChildStart As Integer, ByVal cChildren As Integer, <[Out]()> ByVal rgvarChildren() As Object, ByRef pcObtained As Integer) As UInteger 16 | 17 | End Function 18 | 19 | Private Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal Hwnd As Int32, ByVal dwId As Int32, ByRef riid As Guid, ByRef ppvObject As Object) As Int32 20 | 21 | 22 | Public Shared Function GetStateText(ByVal dwStateBit As UInteger, ByVal lpszStateBit As StringBuilder, ByVal cchStateBitMax As UInteger) As UInteger 23 | End Function 24 | 25 | Public Shared guidAccessible As New Guid("{618736E0-3C3D-11CF-810C-00AA00389B71}") 26 | 27 | Public Shared Function GetAccessibleChildren(ByVal objAccessible As IAccessible) As IAccessible() 28 | Dim childCount As Integer 29 | Try 30 | childCount = objAccessible.accChildCount 31 | Catch ex As Exception 32 | childCount = 0 33 | End Try 34 | 35 | Dim accObjects = New IAccessible((childCount) - 1) {} 36 | Dim count As Integer = 0 37 | 38 | ''Console.WriteLine(count) 39 | 40 | If (childCount <> 0) Then 41 | 42 | AccessibleChildren(objAccessible, 0, childCount, accObjects, count) 43 | End If 44 | 45 | Return accObjects 46 | End Function 47 | 48 | Public Shared Function GetAccessibleObjectFromHandle(ByVal hwnd As IntPtr) As IAccessible 49 | Dim accObject As Object = New Object 50 | Dim objAccessible As IAccessible = Nothing 51 | If (hwnd <> CType(0, IntPtr)) Then 52 | AccessibleObjectFromWindow(CInt(CType(hwnd, IntPtr)), 0, guidAccessible, accObject) 53 | objAccessible = CType(accObject, IAccessible) 54 | End If 55 | 56 | Return objAccessible 57 | End Function 58 | 59 | Public Shared Function GetStateTextFunc(ByVal stateID As UInteger) As String 60 | Dim maxLength As UInteger = 1024 61 | Dim focusableStateText = New StringBuilder(CInt(maxLength)) 62 | Dim sizeableStateText = New StringBuilder(CInt(maxLength)) 63 | Dim moveableStateText = New StringBuilder(CInt(maxLength)) 64 | Dim invisibleStateText = New StringBuilder(CInt(maxLength)) 65 | Dim pressedStateText = New StringBuilder(CInt(maxLength)) 66 | Dim hasPopupStateText = New StringBuilder(CInt(maxLength)) 67 | 68 | If stateID = (MSAAStateConstants.STATE_SYSTEM_INVISIBLE Or MSAAStateConstants.STATE_SYSTEM_FOCUSABLE Or MSAAStateConstants.STATE_SYSTEM_HASPOPUP) Then 69 | GetStateText(MSAAStateConstants.STATE_SYSTEM_INVISIBLE, invisibleStateText, maxLength) 70 | GetStateText(MSAAStateConstants.STATE_SYSTEM_FOCUSABLE, focusableStateText, maxLength) 71 | GetStateText(MSAAStateConstants.STATE_SYSTEM_HASPOPUP, hasPopupStateText, maxLength) 72 | 73 | Return invisibleStateText.ToString & "," & focusableStateText.ToString & "," & hasPopupStateText.ToString 74 | End If 75 | 76 | If stateID = (MSAAStateConstants.STATE_SYSTEM_PRESSED Or MSAAStateConstants.STATE_SYSTEM_INVISIBLE Or MSAAStateConstants.STATE_SYSTEM_FOCUSABLE) Then 77 | GetStateText(MSAAStateConstants.STATE_SYSTEM_PRESSED, pressedStateText, maxLength) 78 | GetStateText(MSAAStateConstants.STATE_SYSTEM_INVISIBLE, invisibleStateText, maxLength) 79 | GetStateText(MSAAStateConstants.STATE_SYSTEM_PRESSED, focusableStateText, maxLength) 80 | 81 | Return pressedStateText.ToString & "," & focusableStateText.ToString & "," & focusableStateText.ToString 82 | End If 83 | 84 | If stateID = (MSAAStateConstants.STATE_SYSTEM_FOCUSABLE Or MSAAStateConstants.STATE_SYSTEM_HASPOPUP) Then 85 | GetStateText(MSAAStateConstants.STATE_SYSTEM_FOCUSABLE, focusableStateText, maxLength) 86 | GetStateText(MSAAStateConstants.STATE_SYSTEM_HASPOPUP, hasPopupStateText, maxLength) 87 | 88 | Return focusableStateText.ToString & "," & hasPopupStateText.ToString 89 | End If 90 | 91 | If stateID = (MSAAStateConstants.STATE_SYSTEM_FOCUSABLE) Then 92 | GetStateText(MSAAStateConstants.STATE_SYSTEM_FOCUSABLE, focusableStateText, maxLength) 93 | Return focusableStateText.ToString 94 | End If 95 | 96 | Dim stateText = New StringBuilder(CInt(maxLength)) 97 | GetStateText(stateID, stateText, maxLength) 98 | Return stateText.ToString() 99 | End Function 100 | 101 | End Class 102 | 103 | Class MSAAStateConstants 104 | 105 | Public Shared STATE_SYSTEM_ALERT_HIGH As UInteger = 268435456 106 | 107 | Public Shared STATE_SYSTEM_ALERT_LOW As UInteger = 67108864 108 | 109 | Public Shared STATE_SYSTEM_ALERT_MEDIUM As UInteger = 134217728 110 | 111 | Public Shared STATE_SYSTEM_ANIMATED As UInteger = 16384 112 | 113 | Public Shared STATE_SYSTEM_BUSY As UInteger = 2048 114 | 115 | Public Shared STATE_SYSTEM_CHECKED As UInteger = 16 116 | 117 | Public Shared STATE_SYSTEM_COLLAPSED As UInteger = 1024 118 | 119 | Public Shared STATE_SYSTEM_DEFAULT As UInteger = 256 120 | 121 | Public Shared STATE_SYSTEM_EXPANDED As UInteger = 512 122 | 123 | Public Shared STATE_SYSTEM_EXTSELECTABLE As UInteger = 33554432 124 | 125 | Public Shared STATE_SYSTEM_FLOATING As UInteger = 4096 126 | 127 | Public Shared STATE_SYSTEM_FOCUSABLE As UInteger = 1048576 128 | 129 | Public Shared STATE_SYSTEM_FOCUSED As UInteger = 4 130 | 131 | Public Shared STATE_SYSTEM_HASPOPUP As UInteger = 1073741824 132 | 133 | Public Shared STATE_SYSTEM_HOTTRACKED As UInteger = 128 134 | 135 | Public Shared STATE_SYSTEM_INVISIBLE As UInteger = 32768 136 | 137 | Public Shared STATE_SYSTEM_LINKED As UInteger = 4194304 138 | 139 | Public Shared STATE_SYSTEM_MARQUEED As UInteger = 8192 140 | 141 | Public Shared STATE_SYSTEM_MIXED As UInteger = 32 142 | 143 | Public Shared STATE_SYSTEM_MOVEABLE As UInteger = 262144 144 | 145 | Public Shared STATE_SYSTEM_MULTISELECTABLE As UInteger = 16777216 146 | 147 | Public Shared STATE_SYSTEM_NORMAL As UInteger = 0 148 | 149 | Public Shared STATE_SYSTEM_OFFSCREEN As UInteger = 65536 150 | 151 | Public Shared STATE_SYSTEM_PRESSED As UInteger = 8 152 | 153 | Public Shared STATE_SYSTEM_READONLY As UInteger = 64 154 | 155 | Public Shared STATE_SYSTEM_SELECTABLE As UInteger = 2097152 156 | 157 | Public Shared STATE_SYSTEM_SELECTED As UInteger = 2 158 | 159 | Public Shared STATE_SYSTEM_SELFVOICING As UInteger = 524288 160 | 161 | Public Shared STATE_SYSTEM_SIZEABLE As UInteger = 131072 162 | 163 | Public Shared STATE_SYSTEM_TRAVERSED As UInteger = 8388608 164 | 165 | Public Shared STATE_SYSTEM_UNAVAILABLE As UInteger = 1 166 | 167 | Public Shared STATE_SYSTEM_VALID As UInteger = 536870911 168 | End Class -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/Main.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | 3 | 4 | Imports System.Text 5 | Imports System.Threading 6 | 7 | 8 | Public Class Main 9 | 10 | Public Shared noty As New NotifyIcon 11 | 12 | Public Shared Sub Main() 13 | Try 14 | 15 | 16 | 'Set default settings 17 | Settings.TaskbarStyle = 0 18 | Settings.PrimaryTaskbarOffset = 0 19 | Settings.SecondaryTaskbarOffset = 0 20 | Settings.CenterPrimaryOnly = 0 21 | Settings.CenterSecondaryOnly = 0 22 | Settings.AnimationStyle = "cubiceaseinout" 23 | Settings.AnimationSpeed = 300 24 | Settings.LoopRefreshRate = 400 25 | Settings.CenterInBetween = 0 26 | Settings.DontCenterTaskbar = 0 27 | Settings.FixToolbarsOnTrayChange = 1 28 | Settings.OnBatteryAnimationStyle = "cubiceaseinout" 29 | Settings.OnBatteryLoopRefreshRate = 400 30 | Settings.RevertZeroBeyondTray = 1 31 | Settings.TaskbarRounding = 0 32 | Settings.TaskbarSegments = 0 33 | 34 | Dim stopgiven As Boolean = False 35 | 36 | 'Read the arguments for the settings 37 | Dim arguments() As String = Environment.GetCommandLineArgs 38 | For Each argument In arguments 39 | Dim val() As String = Split(argument, "=") 40 | If argument.Contains("-stop") Then 41 | stopgiven = True 42 | End If 43 | If argument.Contains("-showstartmenu") Then 44 | Win32.ShowStartMenu() 45 | End 46 | End If 47 | If argument.Contains("-console=") Then 48 | Win32.AllocConsole() 49 | Settings.ConsoleEnabled = 1 50 | End If 51 | If argument.Contains("-tbs=") Then 52 | Settings.TaskbarStyle = CInt(val(1)) 53 | End If 54 | 55 | If argument.Contains("-color=") Then 56 | Dim colorval As String = val(1) 57 | Dim colorsep = colorval.Split(CType(";", Char())) 58 | 59 | Settings.TaskbarStyleRed = CInt(colorsep(0)) 60 | Settings.TaskbarStyleGreen = CInt(colorsep(1)) 61 | Settings.TaskbarStyleBlue = CInt(colorsep(2)) 62 | Settings.TaskbarStyleAlpha = CInt(colorsep(3)) 63 | End If 64 | 65 | If argument.Contains("-ptbo=") Then 66 | Settings.PrimaryTaskbarOffset = CInt(val(1)) 67 | End If 68 | If argument.Contains("-stbo=") Then 69 | Settings.SecondaryTaskbarOffset = CInt(val(1)) 70 | End If 71 | If argument.Contains("-cpo=") Then 72 | Settings.CenterPrimaryOnly = CInt(val(1)) 73 | End If 74 | If argument.Contains("-cso=") Then 75 | Settings.CenterSecondaryOnly = CInt(val(1)) 76 | End If 77 | If argument.Contains("-as=") Then 78 | Settings.AnimationStyle = CType(val(1), String) 79 | End If 80 | If argument.Contains("-asp=") Then 81 | Settings.AnimationSpeed = CInt(val(1)) 82 | End If 83 | If argument.Contains("-lr=") Then 84 | Settings.LoopRefreshRate = CInt(val(1)) 85 | End If 86 | If argument.Contains("-cib=") Then 87 | Settings.CenterInBetween = CInt(val(1)) 88 | End If 89 | If argument.Contains("-obas=") Then 90 | Settings.OnBatteryAnimationStyle = CType(val(1), String) 91 | End If 92 | If argument.Contains("-oblr=") Then 93 | Settings.OnBatteryLoopRefreshRate = CInt(val(1)) 94 | End If 95 | If argument.Contains("-ftotc=") Then 96 | Settings.FixToolbarsOnTrayChange = CInt(val(1)) 97 | End If 98 | If argument.Contains("-rzbt=") Then 99 | Settings.RevertZeroBeyondTray = CInt(val(1)) 100 | End If 101 | If argument.Contains("-sr=") Then 102 | Settings.SkipResolution = CInt(val(1)) 103 | End If 104 | If argument.Contains("-sr2=") Then 105 | Settings.SkipResolution2 = CInt(val(1)) 106 | End If 107 | If argument.Contains("-sr3=") Then 108 | Settings.SkipResolution3 = CInt(val(1)) 109 | End If 110 | If argument.Contains("-dtbsowm=") Then 111 | Settings.DefaultTaskbarStyleOnWinMax = CInt(val(1)) 112 | End If 113 | If argument.Contains("-cfsa=") Then 114 | Settings.CheckFullscreenApp = CInt(val(1)) 115 | End If 116 | If argument.Contains("-dct=") Then 117 | Settings.DontCenterTaskbar = CInt(val(1)) 118 | End If 119 | If argument.Contains("-hps=") Then 120 | Settings.HidePrimaryStartButton = CInt(val(1)) 121 | End If 122 | If argument.Contains("-hss=") Then 123 | Settings.HideSecondaryStartButton = CInt(val(1)) 124 | End If 125 | If argument.Contains("-hpt=") Then 126 | Settings.HidePrimaryNotifyWnd = CInt(val(1)) 127 | End If 128 | If argument.Contains("-hst=") Then 129 | Settings.HideSecondaryNotifyWnd = CInt(val(1)) 130 | End If 131 | If argument.Contains("-sti=") Then 132 | ''Settings.ShowTrayIcon = CInt(val(1)) 133 | Settings.ShowTrayIcon = CInt(0) 134 | End If 135 | If argument.Contains("-tbsom=") Then 136 | Settings.TaskbarStyleOnMax = CInt(val(1)) 137 | End If 138 | If argument.Contains("-stsb=") Then 139 | Settings.StickyStartButton = CInt(val(1)) 140 | End If 141 | If argument.Contains("-tpop=") Then 142 | Settings.TotalPrimaryOpacity = CInt(val(1)) 143 | End If 144 | If argument.Contains("-tsop=") Then 145 | Settings.TotalSecondaryOpacity = CInt(val(1)) 146 | End If 147 | If argument.Contains("-tbr=") Then 148 | Settings.TaskbarRounding = CInt(val(1)) 149 | End If 150 | If argument.Contains("-tbsg=") Then 151 | Settings.TaskbarSegments = CInt(val(1)) 152 | End If 153 | Next 154 | 155 | 'Kill every other running instance of TaskbarX 156 | Try 157 | For Each prog As Process In Process.GetProcessesByName("TaskbarX") 158 | If Not prog.Id = Process.GetCurrentProcess.Id Then 159 | prog.Kill() 160 | End If 161 | Next 162 | Catch 163 | End Try 164 | 165 | 'If animation speed is lower than 1 then make it 1. Otherwise it will give an error. 166 | If Settings.AnimationSpeed <= 1 Then 167 | Settings.AnimationSpeed = 1 168 | End If 169 | 170 | 'Makes the animations run smoother 171 | Dim currentProcess As Process = Process.GetCurrentProcess 172 | currentProcess.PriorityClass = ProcessPriorityClass.Idle 173 | 174 | 'Prevent wrong position calculations 175 | Win32.SetProcessDpiAwareness(Win32.PROCESS_DPI_AWARENESS.Process_Per_Monitor_DPI_Aware) 176 | 177 | 'Wait for Shell_TrayWnd 178 | Dim Handle As IntPtr 179 | Do 180 | Console.WriteLine("Waiting for Shell_TrayWnd") 181 | Handle = Nothing 182 | Thread.Sleep(250) 183 | Dim Shell_TrayWnd = Win32.FindWindowByClass("Shell_TrayWnd", CType(0, IntPtr)) 184 | Dim TrayNotifyWnd = Win32.FindWindowEx(Shell_TrayWnd, CType(0, IntPtr), "TrayNotifyWnd", Nothing) 185 | Dim ReBarWindow32 = Win32.FindWindowEx(Shell_TrayWnd, CType(0, IntPtr), "ReBarWindow32", Nothing) 186 | Dim MSTaskSwWClass = Win32.FindWindowEx(ReBarWindow32, CType(0, IntPtr), "MSTaskSwWClass", Nothing) 187 | Dim MSTaskListWClass = Win32.FindWindowEx(MSTaskSwWClass, CType(0, IntPtr), "MSTaskListWClass", Nothing) 188 | Handle = MSTaskListWClass 189 | 'Lock the Taskbar 190 | ' Win32.PostMessage(Shell_TrayWnd, CUInt(&H111), CType(424, IntPtr), CType(vbNullString, IntPtr)) 191 | Loop Until Not Handle = Nothing 192 | 193 | 194 | Dim Win11Taskbar = Win32.FindWindowEx(Win32.FindWindowByClass("Shell_TrayWnd", CType(0, IntPtr)), CType(0, IntPtr), "Windows.UI.Composition.DesktopWindowContentBridge", Nothing) 195 | If Not Win11Taskbar = CType(0, IntPtr) Then 196 | 'Windows 11 Taskbar present 197 | Settings.DontCenterTaskbar = CInt(Val(1)) 198 | End If 199 | 200 | 201 | If stopgiven = True Then 202 | noty.Visible = False 203 | TaskbarCenter.RevertToZero() 204 | ResetTaskbarStyle() 205 | End 206 | End If 207 | 208 | 209 | 210 | If Settings.ShowTrayIcon = 1 Then 211 | TrayIconBuster.TrayIconBuster.RemovePhantomIcons() 212 | End If 213 | 214 | 'Just empty startup memory before starting 215 | ClearMemory() 216 | 217 | 'Reset the taskbar style... 218 | ResetTaskbarStyle() 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | If Settings.ShowTrayIcon = 1 Then 228 | 229 | 230 | noty.Text = "TaskbarX (L = Restart) (M = Config) (R = Stop)" 231 | noty.Icon = My.Resources.icon 232 | noty.Visible = True 233 | 234 | 235 | End If 236 | 237 | AddHandler noty.MouseClick, AddressOf MnuRef_Click 238 | 239 | 240 | 241 | 'Start the TaskbarCenterer 242 | If Not Settings.DontCenterTaskbar = 1 Then 243 | Dim t1 As Thread = New Thread(AddressOf TaskbarCenter.TaskbarCenterer) 244 | t1.Start() 245 | End If 246 | 247 | 'Start the TaskbarStyler if enabled 248 | If Settings.TaskbarStyle = 1 Or Settings.TaskbarStyle = 2 Or Settings.TaskbarStyle = 3 Or Settings.TaskbarStyle = 4 Or Settings.TaskbarStyle = 5 Then 249 | Dim t2 As Thread = New Thread(AddressOf TaskbarStyle.TaskbarStyler) 250 | t2.Start() 251 | End If 252 | Catch ex As Exception 253 | Console.WriteLine(ex.Message) 254 | End Try 255 | End Sub 256 | 257 | 258 | 259 | 260 | Public Shared Sub Toaster(ByVal message As String) 261 | noty.BalloonTipTitle = "TaskbarX" 262 | noty.BalloonTipText = message 263 | noty.Visible = True 264 | noty.ShowBalloonTip(3000) 265 | End Sub 266 | 267 | Public Shared Sub MnuRef_Click(sender As Object, e As MouseEventArgs) 268 | 269 | If (e.Button = MouseButtons.Left) Then 270 | noty.Visible = False 271 | Application.Restart() 272 | ElseIf (e.Button = MouseButtons.Right) Then 273 | noty.Visible = False 274 | TaskbarCenter.RevertToZero() 275 | ResetTaskbarStyle() 276 | End 277 | ElseIf (e.Button = MouseButtons.Middle) Then 278 | If System.AppDomain.CurrentDomain.BaseDirectory.Contains("40210ChrisAndriessen") Then 279 | Try 280 | Dim processInfo As ProcessStartInfo = New ProcessStartInfo With { 281 | .WindowStyle = ProcessWindowStyle.Hidden, 282 | .FileName = "cmd.exe", 283 | .Arguments = " /c start shell:AppsFolder\40210ChrisAndriessen.FalconX_y1dazs5f5wq00!TaskbarXGUI" 284 | } 285 | Process.Start(processInfo) 286 | Catch 287 | End Try 288 | Else 289 | Try 290 | System.Diagnostics.Process.Start("TaskbarX Configurator.exe") 291 | Catch 292 | End Try 293 | End If 294 | End If 295 | 296 | End Sub 297 | 298 | #Region "Commands" 299 | 300 | Public Declare Function EnumWindows Lib "user32" (ByVal Adress As CallBack, ByVal y As Integer) As Integer 301 | 302 | Public Delegate Function CallBack(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean 303 | 304 | Public Shared ActiveWindows As New System.Collections.ObjectModel.Collection(Of IntPtr) 305 | 306 | Public Shared Function GetActiveWindows() As ObjectModel.Collection(Of IntPtr) 307 | windowHandles.Clear() 308 | EnumWindows(AddressOf Enumerator, 0) 309 | 310 | Dim maintaskbarfound As Boolean = False 311 | Dim sectaskbarfound As Boolean = False 312 | 313 | For Each Taskbar In windowHandles 314 | Dim sClassName As New StringBuilder("", 256) 315 | Call Win32.GetClassName(CType(Taskbar, IntPtr), sClassName, 256) 316 | If sClassName.ToString = "Shell_TrayWnd" Then 317 | maintaskbarfound = True 318 | End If 319 | If sClassName.ToString = "Shell_SecondaryTrayWnd" Then 320 | sectaskbarfound = True 321 | End If 322 | Console.WriteLine("=" & maintaskbarfound) 323 | Next 324 | 325 | If maintaskbarfound = False Then 326 | Try 327 | windowHandles.Add(Win32.FindWindow("Shell_TrayWnd", Nothing)) 328 | Catch 329 | End Try 330 | End If 331 | 332 | If sectaskbarfound = False Then 333 | If Screen.AllScreens.Count >= 2 Then 334 | ''MsgBox(Screen.AllScreens.Count) 335 | Try 336 | windowHandles.Add(Win32.FindWindow("Shell_SecondaryTrayWnd", Nothing)) 337 | Catch 338 | End Try 339 | End If 340 | End If 341 | 342 | 343 | Return ActiveWindows 344 | End Function 345 | 346 | Public Shared Function Enumerator(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean 347 | Dim sClassName As New StringBuilder("", 256) 348 | Call Win32.GetClassName(hwnd, sClassName, 256) 349 | If sClassName.ToString = "Shell_TrayWnd" Or sClassName.ToString = "Shell_SecondaryTrayWnd" Then 350 | windowHandles.Add(hwnd) 351 | End If 352 | Return True 353 | End Function 354 | 355 | Public Shared windowHandles As ArrayList = New ArrayList() 356 | 357 | Public Shared Sub ResetTaskbarStyle() 358 | 359 | 360 | 361 | GetActiveWindows() 362 | 363 | 364 | 365 | Dim trays As New ArrayList 366 | For Each trayWnd As IntPtr In windowHandles 367 | ''Console.WriteLine(trayWnd) 368 | trays.Add(trayWnd) 369 | Next 370 | 371 | For Each tray As IntPtr In trays 372 | Dim trayptr As IntPtr = tray 373 | 374 | 375 | Win32.SendMessage(trayptr, Win32.WM_THEMECHANGED, True, 0) 376 | Win32.SendMessage(trayptr, Win32.WM_DWMCOLORIZATIONCOLORCHANGED, True, 0) 377 | Win32.SendMessage(trayptr, Win32.WM_DWMCOMPOSITIONCHANGED, True, 0) 378 | 379 | 380 | 381 | Dim tt As New Win32.RECT 382 | Win32.GetClientRect(trayptr, tt) 383 | 384 | 385 | 386 | ''Win32.SetWindowRgn(CType(trayptr, IntPtr), Win32.CreateRoundRectRgn(-1, -1, tt.Right + 1, tt.Bottom - tt.Top + 1, -1, -1), True) 387 | Win32.SetWindowRgn(CType(trayptr, IntPtr), Win32.CreateRectRgn(tt.Left, tt.Top, tt.Right, tt.Bottom), True) 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | Next 396 | 397 | 398 | End Sub 399 | 400 | Public Shared Sub RestartExplorer() 401 | For Each MyProcess In Process.GetProcessesByName("explorer") 402 | MyProcess.Kill() 403 | Next 404 | End Sub 405 | 406 | Public Shared Function ClearMemory() As Int32 407 | GC.Collect() 408 | GC.WaitForPendingFinalizers() 409 | GC.Collect() 410 | Return Win32.SetProcessWorkingSetSize(Diagnostics.Process.GetCurrentProcess.Handle, -1, -1) 411 | End Function 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | #End Region 421 | 422 | End Class -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | 0 6 | true 7 | 0 8 | true 9 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Reflection 2 | Imports System.Runtime.InteropServices 3 | 4 | ' General Information about an assembly is controlled through the following 5 | ' set of attributes. Change these attribute values to modify the information 6 | ' associated with an assembly. 7 | 8 | ' Review the values of the assembly attributes 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 20 | 21 | 22 | ' Version information for an assembly consists of the following four values: 23 | ' 24 | ' Major Version 25 | ' Minor Version 26 | ' Build Number 27 | ' Revision 28 | ' 29 | ' You can specify all the values or you can default the Build and Revision Numbers 30 | ' by using the '*' as shown below: 31 | ' 32 | 33 | 34 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | 'This class was auto-generated by the StronglyTypedResourceBuilder 19 | 'class via a tool like ResGen or Visual Studio. 20 | 'To add or remove a member, edit your .ResX file then rerun ResGen 21 | 'with the /str option, or rebuild your VS project. 22 | ''' 23 | ''' A strongly-typed resource class, for looking up localized strings, etc. 24 | ''' 25 | _ 29 | Friend Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' Returns the cached ResourceManager instance used by this class. 37 | ''' 38 | _ 39 | Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("TaskbarX.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' Overrides the current thread's CurrentUICulture property for all 51 | ''' resource lookups using this strongly typed resource class. 52 | ''' 53 | _ 54 | Friend Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | 63 | ''' 64 | ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). 65 | ''' 66 | Friend ReadOnly Property icon() As System.Drawing.Icon 67 | Get 68 | Dim obj As Object = ResourceManager.GetObject("icon", resourceCulture) 69 | Return CType(obj,System.Drawing.Icon) 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/My Project/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings Auto-Save Functionality" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | End Class 57 | End Namespace 58 | 59 | Namespace My 60 | 61 | _ 64 | Friend Module MySettingsProperty 65 | 66 | _ 67 | Friend ReadOnly Property Settings() As Global.TaskbarX.My.MySettings 68 | Get 69 | Return Global.TaskbarX.My.MySettings.Default 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/My Project/app.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 59 | 60 | 61 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/Resources/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisAnd1998/TaskbarX/4bc446c147c116c140689ca3de84a336bb29d338/TaskbarX/TaskbarX/Resources/icon.ico -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/Settings.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | 3 | Public Class Settings 4 | Public Shared Pause As Boolean 5 | 6 | Public Shared TaskbarStyle As Integer 7 | Public Shared SecondaryTaskbarStyle As Integer 8 | Public Shared PrimaryTaskbarOffset As Integer 9 | Public Shared SecondaryTaskbarOffset As Integer 10 | Public Shared CenterPrimaryOnly As Integer 11 | Public Shared CenterSecondaryOnly As Integer 12 | Public Shared AnimationStyle As String 13 | Public Shared AnimationSpeed As Integer 14 | Public Shared LoopRefreshRate As Integer 15 | Public Shared CenterInBetween As Integer 16 | Public Shared FixToolbarsOnTrayChange As Integer 17 | Public Shared SkipResolution As Integer 18 | Public Shared SkipResolution2 As Integer 19 | Public Shared SkipResolution3 As Integer 20 | Public Shared CheckFullscreenApp As Integer 21 | Public Shared DefaultTaskbarStyleOnWinMax As Integer 22 | Public Shared DontCenterTaskbar As Integer 23 | Public Shared HidePrimaryStartButton As Integer 24 | Public Shared HideSecondaryStartButton As Integer 25 | Public Shared HidePrimaryNotifyWnd As Integer 26 | Public Shared HideSecondaryNotifyWnd As Integer 27 | Public Shared ShowTrayIcon As Integer 28 | Public Shared TaskbarStyleOnMax As Integer 29 | Public Shared TaskbarStyleRed As Integer 30 | Public Shared TaskbarStyleGreen As Integer 31 | Public Shared TaskbarStyleBlue As Integer 32 | Public Shared TaskbarStyleAlpha As Integer 33 | Public Shared ConsoleEnabled As Integer 34 | Public Shared StickyStartButton As Integer 35 | Public Shared TotalPrimaryOpacity As Integer 36 | Public Shared TotalSecondaryOpacity As Integer 37 | Public Shared RevertZeroBeyondTray As Integer 38 | Public Shared TaskbarRounding As Integer 39 | Public Shared TaskbarSegments As Integer 40 | 41 | Public Shared UseUIA As Integer 42 | 43 | 'If on battery TaskbarX will override with these 44 | Public Shared OnBatteryAnimationStyle As String 45 | 46 | Public Shared OnBatteryLoopRefreshRate As Integer 47 | 48 | End Class -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/StoreLogo-71.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisAnd1998/TaskbarX/4bc446c147c116c140689ca3de84a336bb29d338/TaskbarX/TaskbarX/StoreLogo-71.ico -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/TaskbarAnimate.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | 3 | Public Class TaskbarAnimate 4 | 5 | Public Shared current As New ArrayList 6 | 7 | Public Shared Sub Animate(ByVal hwnd As IntPtr, ByVal oldpos As Integer, ByVal orient As String, ByVal easing As EasingDelegate, ByVal valueToReach As Integer, ByVal duration As Integer, ByVal isPrimary As Boolean, ByVal width As Integer) 8 | 9 | 10 | Try 11 | 12 | If Math.Abs(CInt((valueToReach - oldpos))) = 0 Then 13 | 'The difference is 0 so there is no need to trigger the animator. 14 | Exit Sub 15 | End If 16 | 17 | 18 | 19 | If Settings.RevertZeroBeyondTray = 1 Then 20 | 'Prevent moving beyond Tray area. 21 | Dim TrayPos2 As Win32.RECT 22 | Win32.GetWindowRect(Win32.GetParent(hwnd), TrayPos2) 23 | Dim rightposition = valueToReach + width 24 | 25 | If orient = "H" Then 26 | If rightposition >= TrayPos2.Right - TrayPos2.Left Then 27 | Win32.SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, Win32.SWP_NOSIZE Or Win32.SWP_ASYNCWINDOWPOS Or Win32.SWP_NOACTIVATE Or Win32.SWP_NOZORDER Or Win32.SWP_NOSENDCHANGING) 28 | Exit Sub 29 | End If 30 | Else 31 | If rightposition >= TrayPos2.Bottom - TrayPos2.Top Then 32 | Win32.SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, Win32.SWP_NOSIZE Or Win32.SWP_ASYNCWINDOWPOS Or Win32.SWP_NOACTIVATE Or Win32.SWP_NOZORDER Or Win32.SWP_NOSENDCHANGING) 33 | Exit Sub 34 | End If 35 | End If 36 | End If 37 | 38 | 39 | If valueToReach = oldpos Or Math.Abs(CInt((valueToReach - oldpos))) <= 10 Then 40 | 'Prevent Wiggling (if the new position has a difference of 10 or lower then there is no reason to move) 41 | Exit Sub 42 | End If 43 | 44 | For Each tt In current 45 | If CType(tt, IntPtr) = hwnd Then 46 | 'If hwnd is already getting animated then hwnd is in this arraylist and exit the animator because it's uneeded. 47 | Exit Sub 48 | End If 49 | Next 50 | 51 | ' Console.WriteLine(CInt((valueToReach - oldpos).ToString.Replace("-", ""))) 52 | 53 | current.Add(hwnd) 54 | 55 | Dim sw As New Stopwatch 56 | Dim originalValue As Integer = oldpos 57 | Dim elapsed As New Integer 58 | Dim minValue As Integer 59 | 60 | If originalValue <= valueToReach Then 61 | minValue = originalValue 62 | Else 63 | minValue = valueToReach 64 | End If 65 | 66 | Dim maxValue As Integer = Math.Abs(CInt((valueToReach - originalValue))) 67 | Dim increasing As Boolean = originalValue < valueToReach 68 | 69 | elapsed = 0 70 | sw.Start() 71 | 72 | If isPrimary = True Then 73 | TaskbarCenter.isanimating = True 74 | End If 75 | 76 | While Not elapsed >= duration 77 | 78 | elapsed = CInt(sw.ElapsedMilliseconds) 79 | 80 | Dim newValue As Integer = CInt((easing(elapsed, minValue, maxValue, duration))) 81 | 82 | If Not increasing Then 83 | newValue = (originalValue + valueToReach) - newValue 84 | End If 85 | 86 | If orient = "H" Then 87 | Win32.SetWindowPos(hwnd, IntPtr.Zero, newValue, 0, 0, 0, Win32.SWP_NOSIZE Or Win32.SWP_ASYNCWINDOWPOS Or Win32.SWP_NOACTIVATE Or Win32.SWP_NOZORDER Or Win32.SWP_NOSENDCHANGING) 88 | Else 89 | Win32.SetWindowPos(hwnd, IntPtr.Zero, 0, newValue, 0, 0, Win32.SWP_NOSIZE Or Win32.SWP_ASYNCWINDOWPOS Or Win32.SWP_NOACTIVATE Or Win32.SWP_NOZORDER Or Win32.SWP_NOSENDCHANGING) 90 | End If 91 | End While 92 | 93 | If isPrimary = True Then 94 | TaskbarCenter.isanimating = False 95 | End If 96 | 97 | sw.Stop() 98 | current.Remove(hwnd) 99 | 100 | Main.ClearMemory() 101 | Catch ex As Exception 102 | Console.WriteLine(ex.Message) 103 | End Try 104 | 105 | End Sub 106 | 107 | End Class -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/TaskbarStyle.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | 3 | Imports System.Drawing 4 | Imports System.Runtime.InteropServices 5 | Imports System.Text 6 | Imports System.Threading 7 | 8 | Public Class TaskbarStyle 9 | 10 | Public Delegate Function CallBack(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean 11 | 12 | Public Declare Function EnumWindows Lib "user32" (ByVal Adress As CallBack, ByVal y As Integer) As Integer 13 | Public Shared ActiveWindows As New System.Collections.ObjectModel.Collection(Of IntPtr) 14 | 15 | Public Shared Function GetActiveWindows() As ObjectModel.Collection(Of IntPtr) 16 | windowHandles.Clear() 17 | EnumWindows(AddressOf Enumerator, 0) 18 | 19 | 20 | Dim maintaskbarfound As Boolean = False 21 | Dim sectaskbarfound As Boolean = False 22 | 23 | For Each Taskbar In windowHandles 24 | Dim sClassName As New StringBuilder("", 256) 25 | Call Win32.GetClassName(CType(Taskbar, IntPtr), sClassName, 256) 26 | If sClassName.ToString = "Shell_TrayWnd" Then 27 | maintaskbarfound = True 28 | End If 29 | If sClassName.ToString = "Shell_SecondaryTrayWnd" Then 30 | sectaskbarfound = True 31 | End If 32 | Console.WriteLine("=" & maintaskbarfound) 33 | Next 34 | 35 | If maintaskbarfound = False Then 36 | Try 37 | windowHandles.Add(Win32.FindWindow("Shell_TrayWnd", Nothing)) 38 | Catch 39 | End Try 40 | End If 41 | 42 | If sectaskbarfound = False Then 43 | If Screen.AllScreens.Count >= 2 Then 44 | ''MsgBox(Screen.AllScreens.Count) 45 | Try 46 | windowHandles.Add(Win32.FindWindow("Shell_SecondaryTrayWnd", Nothing)) 47 | Catch 48 | End Try 49 | End If 50 | End If 51 | 52 | 53 | 54 | Return ActiveWindows 55 | End Function 56 | 57 | Public Shared windowHandles As ArrayList = New ArrayList() 58 | Public Shared maximizedwindows As ArrayList = New ArrayList() 59 | Public Shared trays As ArrayList = New ArrayList() 60 | Public Shared traysbackup As ArrayList = New ArrayList() 61 | Public Shared normalwindows As ArrayList = New ArrayList() 62 | Public Shared resetted As ArrayList = New ArrayList() 63 | 64 | Public Shared Function Enumerator(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean 65 | Dim sClassName As New StringBuilder("", 256) 66 | Call Win32.GetClassName(hwnd, sClassName, 256) 67 | If sClassName.ToString = "Shell_TrayWnd" Or sClassName.ToString = "Shell_SecondaryTrayWnd" Then 68 | windowHandles.Add(hwnd) 69 | End If 70 | Return True 71 | End Function 72 | 73 | Shared Function IsPhanthom(ByVal hWnd As IntPtr) As Boolean 74 | Dim CloakedVal As Integer 75 | Dim hRes As Integer = Win32.DwmGetWindowAttribute(hWnd, Win32.DWMWINDOWATTRIBUTE.Cloaked, CloakedVal, Len(CloakedVal)) 76 | If hRes = Not 0 Then 77 | CloakedVal = 0 78 | End If 79 | Return If(CBool(CloakedVal), True, False) 80 | End Function 81 | 82 | Public Shared Function Enumerator2(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean 83 | Try 84 | Dim intRet As Integer 85 | Dim wpTemp As New Win32.WINDOWPLACEMENT 86 | wpTemp.Length = System.Runtime.InteropServices.Marshal.SizeOf(wpTemp) 87 | intRet = CInt(Win32.GetWindowPlacement(hwnd, wpTemp)) 88 | Dim style As Integer = Win32.GetWindowLong(hwnd, Win32.GWL_STYLE) 89 | 90 | If IsPhanthom(hwnd) = False Then 'Fix phanthom windows 91 | If (style And Win32.WS_VISIBLE) = Win32.WS_VISIBLE Then 92 | If wpTemp.showCmd = 3 Then 93 | maximizedwindows.Remove(hwnd) 94 | maximizedwindows.Add(hwnd) 95 | Else 96 | normalwindows.Remove(hwnd) 97 | normalwindows.Add(hwnd) 98 | End If 99 | End If 100 | End If 101 | Catch ex As Exception 102 | End Try 103 | Return True 104 | End Function 105 | 106 | Public Shared Sub Tbsm() 107 | Do 108 | 109 | Dim windowsold As Integer 110 | Dim windowsnew As Integer 111 | windowsold = maximizedwindows.Count 112 | 113 | maximizedwindows.Clear() 114 | System.Threading.Thread.Sleep(250) 115 | EnumWindows(AddressOf Enumerator2, 0) 116 | 117 | windowsnew = maximizedwindows.Count 118 | 119 | If Not windowsnew = windowsold Then 120 | For Each tray As IntPtr In traysbackup 121 | For Each normalwindow As IntPtr In normalwindows 122 | Dim curmonx As Screen = Screen.FromHandle(normalwindow) 123 | Dim curmontbx As Screen = Screen.FromHandle(tray) 124 | If curmonx.DeviceName = curmontbx.DeviceName Then 125 | trays.Remove(tray) 126 | trays.Add(tray) 127 | 128 | ''If Not Settings.TaskbarRounding = 0 Then 129 | ''Dim tt As New Win32.RECT 130 | ''Win32.GetClientRect(tray, tt) 131 | ''Win32.SetWindowRgn(CType(tray, IntPtr), Win32.CreateRoundRectRgn(0, 0, tt.Right, tt.Bottom - tt.Top, Settings.TaskbarRounding, Settings.TaskbarRounding), True) 132 | ''End If 133 | End If 134 | Next 135 | Next 136 | 137 | For Each tray As IntPtr In traysbackup 138 | For Each maxedwindow As IntPtr In maximizedwindows 139 | Dim curmonx As Screen = Screen.FromHandle(maxedwindow) 140 | Dim curmontbx As Screen = Screen.FromHandle(tray) 141 | If curmonx.DeviceName = curmontbx.DeviceName Then 142 | trays.Remove(tray) 143 | Win32.PostMessage(tray, &H31E, CType(&H1, IntPtr), CType(&H0, IntPtr)) 144 | '' If Not Settings.TaskbarRounding = 0 Then 145 | '' Dim tt As New Win32.RECT 146 | '' Win32.GetClientRect(tray, tt) 147 | '' Win32.SetWindowRgn(CType(tray, IntPtr), Win32.CreateRoundRectRgn(0, 0, tt.Right, tt.Bottom - tt.Top, 0, 0), True) 148 | ''End If 149 | End If 150 | Next 151 | Next 152 | End If 153 | 154 | Loop 155 | End Sub 156 | 157 | Public Shared Sub TaskbarStyler() 158 | Try 159 | 160 | GetActiveWindows() 161 | 162 | 163 | Dim accent = New Win32.AccentPolicy() 164 | Dim accentStructSize = Marshal.SizeOf(accent) 165 | 166 | 'Select accent based on settings 167 | If Settings.TaskbarStyle = 1 Then 168 | accent.AccentState = Win32.AccentState.ACCENT_ENABLE_TRANSPARANT 169 | End If 170 | 171 | If Settings.TaskbarStyle = 2 Then 172 | accent.AccentState = Win32.AccentState.ACCENT_ENABLE_BLURBEHIND 173 | End If 174 | 175 | If Settings.TaskbarStyle = 3 Then 176 | accent.AccentState = Win32.AccentState.ACCENT_ENABLE_ACRYLICBLURBEHIND 177 | End If 178 | 179 | If Settings.TaskbarStyle = 4 Then 180 | accent.AccentState = Win32.AccentState.ACCENT_ENABLE_TRANSPARENTGRADIENT 181 | End If 182 | 183 | If Settings.TaskbarStyle = 5 Then 184 | accent.AccentState = Win32.AccentState.ACCENT_ENABLE_GRADIENT 185 | End If 186 | 187 | accent.AccentFlags = 2 'enable colorize 188 | accent.GradientColor = BitConverter.ToInt32(New Byte() {CByte(Settings.TaskbarStyleRed), CByte(Settings.TaskbarStyleGreen), CByte(Settings.TaskbarStyleBlue), CByte(Settings.TaskbarStyleAlpha * 2.55)}, 0) 189 | 190 | 'Save accent data 191 | Dim accentPtr = Marshal.AllocHGlobal(accentStructSize) 192 | Marshal.StructureToPtr(accent, accentPtr, False) 193 | 194 | Dim data = New Win32.WindowCompositionAttributeData 195 | data.Attribute = Win32.WindowCompositionAttribute.WCA_ACCENT_POLICY 196 | data.SizeOfData = accentStructSize 197 | data.Data = accentPtr 198 | 199 | 'Put all TrayWnds into an ArrayList 200 | For Each trayWnd As IntPtr In windowHandles 201 | trays.Add(trayWnd) 202 | traysbackup.Add(trayWnd) 203 | Next 204 | 205 | If Settings.DefaultTaskbarStyleOnWinMax = 1 Then 206 | Dim t2 As Thread = New Thread(AddressOf Tbsm) 207 | t2.Start() 208 | End If 209 | 210 | 'Set taskbar style for all TrayWnds each 14 millisecond 211 | For Each tray As IntPtr In trays 212 | Dim trayptr As IntPtr = CType(tray.ToString, IntPtr) 213 | Win32.SetWindowCompositionAttribute(CType(trayptr, IntPtr), data) 214 | 215 | 216 | 217 | 218 | '' Dim tt As New ListBox 219 | '' Dim TrayPos2 As Win32.RECT 220 | '' Win32.GetWindowRect(tray, TrayPos2) 221 | '' tt.Top = 0 222 | '' tt.Left = 0 223 | '' tt.Height = 2000 224 | '' tt.Width = 2000 225 | '' tt.BackColor = Color.Red 226 | 227 | '' tt.FormBorderStyle = FormBorderStyle.None 228 | '' Win32.SetWindowLong(tt.Handle, CType(Win32.GWL_STYLE, Win32.WindowStyles), &H80000000L) 229 | '' tt.Show() 230 | '' Dim myProg As New Process 231 | '' With myProg.StartInfo 232 | '' .FileName = "D:\Visual Studio Projects\!TaskbarX\APPX\TaskbarX\Release\TaskbarX Configurator.exe" 233 | '' .Arguments = "" 234 | '' End With 235 | '' myProg.Start() 236 | 237 | '' Thread.Sleep(5000) 238 | 239 | 240 | ''Win32.SetParent(myProg.MainWindowHandle, tray) 241 | 242 | Next 243 | 244 | Do 245 | Try 246 | 247 | For Each tray As IntPtr In trays 248 | Win32.SetWindowCompositionAttribute(tray, data) 249 | Next 250 | System.Threading.Thread.Sleep(10) 251 | Catch 252 | End Try 253 | Loop 254 | Catch ex As Exception 255 | Console.WriteLine(ex.Message) 256 | End Try 257 | End Sub 258 | 259 | Public Shared childLeft As Integer 260 | Public Shared childTop As Integer 261 | Public Shared childWidth As Integer 262 | Public Shared childHeight As Integer 263 | 264 | Public Shared Function GetLocation(ByVal acc As Accessibility.IAccessible, ByVal idChild As Integer) As Integer 265 | acc.accLocation(childLeft, childTop, childWidth, childHeight, idChild) 266 | Return Nothing 267 | End Function 268 | 269 | End Class -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/TaskbarX.vbproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {280F29CB-27F8-41FA-8111-21E6916583FD} 8 | WinExe 9 | Sub Main 10 | TaskbarX 11 | TaskbarX 12 | 512 13 | WindowsFormsWithCustomSubMain 14 | v4.8 15 | true 16 | true 17 | false 18 | 19 | 20 | publish\ 21 | true 22 | Disk 23 | false 24 | Foreground 25 | 7 26 | Days 27 | false 28 | false 29 | true 30 | 1 31 | 1.0.0.%2a 32 | false 33 | true 34 | true 35 | 36 | 37 | AnyCPU 38 | true 39 | full 40 | true 41 | true 42 | bin\Debug\ 43 | TaskbarX.xml 44 | 45 | 46 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 47 | true 48 | 49 | 50 | AnyCPU 51 | pdbonly 52 | false 53 | true 54 | true 55 | ..\..\APPX\TaskbarX\Release\ 56 | TaskbarX.xml 57 | 58 | 59 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 60 | true 61 | false 62 | 63 | 64 | On 65 | 66 | 67 | Binary 68 | 69 | 70 | On 71 | 72 | 73 | On 74 | 75 | 76 | StoreLogo-71.ico 77 | 78 | 79 | My Project\app.manifest 80 | 81 | 82 | true 83 | true 84 | true 85 | bin\x64\Debug\ 86 | TaskbarX.xml 87 | full 88 | x64 89 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 90 | MinimumRecommendedRules.ruleset 91 | true 92 | 93 | 94 | true 95 | ..\..\APPX\TaskbarX64\Release\ 96 | TaskbarX.xml 97 | true 98 | pdbonly 99 | x64 100 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 101 | MinimumRecommendedRules.ruleset 102 | false 103 | 104 | 105 | true 106 | true 107 | true 108 | bin\x86\Debug\ 109 | TaskbarX.xml 110 | full 111 | x86 112 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 113 | MinimumRecommendedRules.ruleset 114 | true 115 | 116 | 117 | true 118 | ..\..\APPX\TaskbarX32\Release\ 119 | TaskbarX.xml 120 | true 121 | pdbonly 122 | x86 123 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 124 | MinimumRecommendedRules.ruleset 125 | false 126 | 127 | 128 | A30E266A1B577C5BECBC296B8B085D7B41991D7B 129 | 130 | 131 | TaskbarX_TemporaryKey.pfx 132 | 133 | 134 | true 135 | 136 | 137 | false 138 | 139 | 140 | 141 | False 142 | True 143 | 144 | 145 | 146 | 147 | True 148 | False 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | True 170 | Application.myapp 171 | True 172 | 173 | 174 | True 175 | True 176 | Resources.resx 177 | 178 | 179 | True 180 | Settings.settings 181 | True 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | VbMyResourcesResXFileCodeGenerator 191 | Resources.Designer.vb 192 | My.Resources 193 | Designer 194 | 195 | 196 | 197 | 198 | 199 | 200 | MyApplicationCodeGenerator 201 | Application.Designer.vb 202 | 203 | 204 | SettingsSingleFileGenerator 205 | My 206 | Settings.Designer.vb 207 | 208 | 209 | 210 | 211 | 212 | False 213 | Microsoft .NET Framework 4.8 %28x86 and x64%29 214 | true 215 | 216 | 217 | False 218 | .NET Framework 3.5 SP1 219 | false 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | {1EA4DBF0-3C3B-11CF-810C-00AA00389B71} 229 | 1 230 | 1 231 | 0 232 | tlbimp 233 | False 234 | True 235 | 236 | 237 | 238 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/TaskbarX.vbproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -skipresolution=1920 -taskbarstyle=1 5 | Project 6 | 7 | 8 | publish\ 9 | 10 | 11 | 12 | 13 | 14 | en-US 15 | false 16 | 17 | 18 | 19 | 20 | Project 21 | false 22 | 23 | 24 | -skipresolution=1920 -taskbarstyle=1 25 | 26 | 27 | -tbs=1 28 | 29 | 30 | -skipresolution=1920 -taskbarstyle=1 31 | 32 | 33 | -dtbsowm=1 -as=linear -asp=200 -hpt=0 -tbs=1 -sti=1 -as=expoeaseout -stsb=1 -tbs=1 34 | 35 | 36 | false 37 | 38 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/TaskbarX_TemporaryKey.pfx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisAnd1998/TaskbarX/4bc446c147c116c140689ca3de84a336bb29d338/TaskbarX/TaskbarX/TaskbarX_TemporaryKey.pfx -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/TrayIconBuster.vb: -------------------------------------------------------------------------------- 1 |  2 | Imports System.Runtime.InteropServices 3 | Imports System.Text 4 | 5 | 6 | Namespace TrayIconBuster 7 | Friend Class TrayIconBuster 8 | Private Const TB_BUTTONCOUNT As UInteger = &H418 9 | Private Const TB_GETBUTTON As UInteger = &H417 10 | Private Const TB_DELETEBUTTON As UInteger = &H416 11 | 12 | Private Shared key As New Object() 13 | 14 | Public Shared is64bit As Boolean 15 | 16 | 17 | 18 | 19 | Public Structure SYSTEM_INFO 20 | Public processorArchitecture As UShort 21 | Private reserved As UShort 22 | Public pageSize As UInteger 23 | Public minimumApplicationAddress As IntPtr 24 | Public maximumApplicationAddress As IntPtr 25 | Public activeProcessorMask As UIntPtr 26 | Public numberOfProcessors As UInteger 27 | Public processorType As UInteger 28 | Public allocationGranularity As UInteger 29 | Public processorLevel As UShort 30 | Public processorRevision As UShort 31 | End Structure 32 | 33 | 34 | Private Shared Sub GetSystemInfo(ByRef lpSystemInfo As SYSTEM_INFO) 35 | End Sub 36 | 37 | Public Shared Function RemovePhantomIcons() As UInteger 38 | Dim is64bitWin As Boolean = Environment.Is64BitOperatingSystem 39 | Dim tbb64 As New ToolBarButton64() 40 | Dim tbb32 As New ToolBarButton32() 41 | Dim td As New TrayData() 42 | Dim foundSomeExe As Boolean = False 43 | Dim totalRemovedCount As Integer = 0 44 | Dim totalItemCount As Integer = 0 45 | 46 | SyncLock key 47 | For pass As Integer = 1 To 2 48 | For kind As Integer = 0 To 1 49 | Dim hWnd As IntPtr = IntPtr.Zero 50 | If kind = 0 Then 51 | FindNestedWindow(hWnd, "Shell_TrayWnd") 52 | FindNestedWindow(hWnd, "TrayNotifyWnd") 53 | FindNestedWindow(hWnd, "SysPager") 54 | FindNestedWindow(hWnd, "ToolbarWindow32") 55 | Else 56 | ' get the hidden icon collection that exists since Windows 7 57 | Try 58 | FindNestedWindow(hWnd, "NotifyIconOverflowWindow") 59 | FindNestedWindow(hWnd, "ToolbarWindow32") 60 | Catch 61 | ' fail silently, as NotifyIconOverflowWindow did not exist prior to Win7 62 | Exit For 63 | End Try 64 | End If 65 | ' create an object so we can exchange data with other process 66 | Using process As New LP_Process(hWnd) 67 | Dim remoteButtonPtr As IntPtr 68 | If is64bitWin Then 69 | remoteButtonPtr = process.Allocate(tbb64) 70 | Else 71 | remoteButtonPtr = process.Allocate(tbb32) 72 | End If 73 | process.Allocate(td) 74 | Dim itemCount As UInteger = CUInt(Math.Truncate(CDec(SendMessage(hWnd, TB_BUTTONCOUNT, IntPtr.Zero, IntPtr.Zero)))) 75 | 'log("There are "+itemCount+" tray icons (some of them hidden)"); 76 | Dim removedCount As Integer = 0 77 | For item As UInteger = 0 To CUInt(itemCount - 1) 78 | 79 | totalItemCount += 1 80 | ' index changes when previous items got removed ! 81 | Dim item2 As UInteger = CUInt(item - removedCount) 82 | Dim SOK As UInteger = CUInt(Math.Truncate(CDec(SendMessage(hWnd, TB_GETBUTTON, New IntPtr(item2), remoteButtonPtr)))) 83 | If SOK <> 1 Then 84 | Throw New ApplicationException("TB_GETBUTTON failed") 85 | End If 86 | If is64bitWin Then 87 | process.Read(tbb64, remoteButtonPtr) 88 | process.Read(td, tbb64.dwData) 89 | Else 90 | process.Read(tbb32, remoteButtonPtr) 91 | process.Read(td, tbb32.dwData) 92 | End If 93 | Dim hWnd2 As IntPtr = td.hWnd 94 | 95 | Using proc As New LP_Process(hWnd2) 96 | Dim filename As String = proc.GetImageFileName() 97 | 98 | ' a phantom icon has no imagefilename 99 | If filename Is Nothing Then 100 | SOK = CUInt(Math.Truncate(CDec(SendMessage(hWnd, TB_DELETEBUTTON, New IntPtr(item2), IntPtr.Zero)))) 101 | 102 | removedCount += 1 103 | totalRemovedCount += 1 104 | End If 105 | End Using 106 | Next item 107 | End Using 108 | Next kind ' next kind 109 | 110 | 111 | Next pass 112 | End SyncLock ' release lock 113 | 114 | Return CUInt(totalRemovedCount) 115 | End Function 116 | 117 | ' Find a topmost or nested window with specified name 118 | Private Shared Sub FindNestedWindow(ByRef hWnd As IntPtr, ByVal name As String) 119 | If hWnd = IntPtr.Zero Then 120 | hWnd = FindWindow(name, Nothing) 121 | Else 122 | hWnd = FindWindowEx(hWnd, IntPtr.Zero, name, Nothing) 123 | End If 124 | End Sub 125 | 126 | 127 | Public Shared Function SendMessage(ByVal Hdc As IntPtr, ByVal Msg_Const As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr 128 | End Function 129 | 130 | 131 | Public Shared Function FindWindow(ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr 132 | End Function 133 | 134 | 135 | Public Shared Function FindWindowEx(ByVal hwndParent As IntPtr, ByVal hwndChildAfter As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr 136 | End Function 137 | 138 | 139 | 140 | Public Class ToolBarButton32 141 | Public iBitmap As UInteger 142 | Public idCommand As UInteger 143 | Public fsState As Byte 144 | Public fsStyle As Byte 145 | Private bReserved0 As Byte 146 | Private bReserved1 As Byte 147 | Public dwData As IntPtr 148 | Public iString As UInteger 149 | End Class 150 | 151 | Public Class ToolBarButton64 152 | Public iBitmap As UInteger 153 | Public idCommand As UInteger 154 | Public fsState As Byte 155 | Public fsStyle As Byte 156 | Private bReserved0 As Byte 157 | Private bReserved1 As Byte 158 | Private bReserved2 As Byte 159 | Private bReserved3 As Byte 160 | Private bReserved4 As Byte 161 | Private bReserved5 As Byte 162 | Public dwData As IntPtr 163 | Public iString As UInteger 164 | End Class 165 | 166 | 167 | 168 | Public Class TrayData 169 | Public hWnd As IntPtr 170 | Public uID As UInteger 171 | Public uCallbackMessage As UInteger 172 | Private reserved0 As UInteger 173 | Private reserved1 As UInteger 174 | Public hIcon As IntPtr 175 | End Class 176 | End Class 177 | 178 | 179 | Public Class LP_Process 180 | Implements IDisposable 181 | 182 | 183 | Private Const PROCESS_VM_OPERATION As UInteger = &H8 184 | Private Const PROCESS_VM_READ As UInteger = &H10 185 | Private Const PROCESS_VM_WRITE As UInteger = &H20 186 | Private Const PROCESS_QUERY_INFORMATION As UInteger = &H400 187 | 188 | Private Const MEM_COMMIT As UInteger = &H1000 189 | Private Const MEM_RELEASE As UInteger = &H8000 190 | Private Const PAGE_READWRITE As UInteger = &H4 191 | 192 | 193 | Private hProcess As IntPtr 194 | 195 | 196 | Private ownerProcessID As UInteger 197 | 198 | 199 | Private allocations As New ArrayList() 200 | 201 | Public Sub New(ByVal hWnd As IntPtr) 202 | GetWindowThreadProcessId(hWnd, ownerProcessID) 203 | 204 | hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE Or PROCESS_QUERY_INFORMATION, False, ownerProcessID) 205 | 206 | End Sub 207 | 208 | 209 | Public Sub Dispose() Implements IDisposable.Dispose 210 | If hProcess <> IntPtr.Zero Then 211 | For Each ptr As IntPtr In allocations 212 | VirtualFreeEx(hProcess, ptr, 0, MEM_RELEASE) 213 | Next ptr 214 | CloseHandle(hProcess) 215 | End If 216 | End Sub 217 | 218 | 219 | Public Function GetImageFileName() As String 220 | Dim sb As New StringBuilder(1024) 221 | Dim OK As Boolean = GetProcessImageFileName(hProcess, sb, sb.Capacity - 1) 222 | If Not OK Then 223 | Return Nothing 224 | End If 225 | Return sb.ToString() 226 | End Function 227 | 228 | 229 | Public Function Allocate(ByVal managedObject As Object) As IntPtr 230 | Dim size As Integer = Marshal.SizeOf(managedObject) 231 | Dim ptr As IntPtr = VirtualAllocEx(hProcess, 0, size, MEM_COMMIT, PAGE_READWRITE) 232 | 233 | If ptr <> IntPtr.Zero Then 234 | allocations.Add(ptr) 235 | End If 236 | Return ptr 237 | End Function 238 | 239 | 240 | Public Sub Read(ByVal obj As Object, ByVal ptr As IntPtr) 241 | Using pin As New LP_Pinner(obj) 242 | Dim bytesRead As UInteger = 0 243 | Dim size As Integer = Marshal.SizeOf(obj) 244 | If Not ReadProcessMemory(hProcess, ptr, pin.Ptr, size, bytesRead) Then 245 | Dim err As Integer = GetLastError() 246 | Dim s As String = "Read failed; err=" & err & "; bytesRead=" & bytesRead 247 | Throw New ApplicationException(s) 248 | End If 249 | End Using 250 | End Sub 251 | 252 | 253 | Public Function ReadString(ByVal size As Integer, ByVal ptr As IntPtr) As String 254 | Dim sb As New StringBuilder(size) 255 | Dim bytesRead As UInteger = 0 256 | If Not ReadProcessMemory(hProcess, ptr, sb, size, bytesRead) Then 257 | Dim err As Integer = GetLastError() 258 | Dim s As String = "Read failed; err=" & err & "; bytesRead=" & bytesRead 259 | Throw New ApplicationException(s) 260 | End If 261 | Return sb.ToString() 262 | End Function 263 | 264 | 265 | Public Sub Write(ByVal obj As Object, ByVal size As Integer, ByVal ptr As IntPtr) 266 | Using pin As New LP_Pinner(obj) 267 | Dim bytesWritten As UInteger = 0 268 | If Not WriteProcessMemory(hProcess, ptr, pin.Ptr, size, bytesWritten) Then 269 | Dim err As Integer = GetLastError() 270 | Dim s As String = "Write failed; err=" & err & "; bytesWritten=" & bytesWritten 271 | Throw New ApplicationException(s) 272 | End If 273 | End Using 274 | End Sub 275 | 276 | 277 | 278 | Private Shared Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, ByRef procId As UInteger) As UInteger 279 | End Function 280 | 281 | 282 | Private Shared Function OpenProcess(ByVal access As UInteger, ByVal inheritHandle As Boolean, ByVal procID As UInteger) As IntPtr 283 | End Function 284 | 285 | 286 | Private Shared Function CloseHandle(ByVal handle As IntPtr) As Boolean 287 | End Function 288 | 289 | 290 | Private Shared Function VirtualAllocEx(ByVal hProcess As IntPtr, ByVal address As Integer, ByVal size As Integer, ByVal allocationType As UInteger, ByVal protection As UInteger) As IntPtr 291 | End Function 292 | 293 | 294 | Private Shared Function VirtualFreeEx(ByVal hProcess As IntPtr, ByVal address As IntPtr, ByVal size As Integer, ByVal freeType As UInteger) As Boolean 295 | End Function 296 | 297 | 298 | Private Shared Function WriteProcessMemory(ByVal hProcess As IntPtr, ByVal otherAddress As IntPtr, ByVal localAddress As IntPtr, ByVal size As Integer, ByRef bytesWritten As UInteger) As Boolean 299 | End Function 300 | 301 | 302 | Private Shared Function ReadProcessMemory(ByVal hProcess As IntPtr, ByVal otherAddress As IntPtr, ByVal localAddress As IntPtr, ByVal size As Integer, ByRef bytesRead As UInteger) As Boolean 303 | End Function 304 | 305 | 306 | Private Shared Function ReadProcessMemory(ByVal hProcess As IntPtr, ByVal otherAddress As IntPtr, ByVal localAddress As StringBuilder, ByVal size As Integer, ByRef bytesRead As UInteger) As Boolean 307 | End Function 308 | 309 | 310 | Private Shared Function GetProcessImageFileName(ByVal hProcess As IntPtr, ByVal fileName As StringBuilder, ByVal fileNameSize As Integer) As Boolean 311 | End Function 312 | 313 | 314 | Public Shared Function GetLastError() As Integer 315 | End Function 316 | End Class 317 | 318 | Public Class LP_Pinner 319 | Implements IDisposable 320 | 321 | Private handle As GCHandle 322 | Private disposed As Boolean 323 | 324 | Private ptr_Conflict As IntPtr 325 | 326 | 327 | Public Sub New(ByVal obj As Object) 328 | 329 | handle = GCHandle.Alloc(obj, GCHandleType.Pinned) 330 | ptr_Conflict = handle.AddrOfPinnedObject() 331 | End Sub 332 | 333 | 334 | Protected Overrides Sub Finalize() 335 | Dispose() 336 | End Sub 337 | 338 | 339 | Public Sub Dispose() Implements IDisposable.Dispose 340 | If Not disposed Then 341 | 342 | disposed = True 343 | handle.Free() 344 | ptr_Conflict = IntPtr.Zero 345 | End If 346 | End Sub 347 | 348 | 349 | Public ReadOnly Property Ptr() As IntPtr 350 | Get 351 | Return ptr_Conflict 352 | End Get 353 | End Property 354 | End Class 355 | End Namespace 356 | -------------------------------------------------------------------------------- /TaskbarX/TaskbarX/Win32.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | 3 | Imports System.Runtime.InteropServices 4 | Imports System.Text 5 | 6 | Public Class Win32 7 | 8 | 9 | Public Shared Function ShowWindow(hWnd As IntPtr, nCmdShow As ShowWindowCommands) As Boolean 10 | End Function 11 | 12 | 13 | Public Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As UInt32) As Boolean 14 | End Function 15 | 16 | 17 | Public Shared Function GetClassName(ByVal hWnd As System.IntPtr, ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer) As Integer 18 | End Function 19 | 20 | 21 | Public Shared Function GetWindowPlacement(ByVal hWnd As IntPtr, ByRef lpwndpl As WINDOWPLACEMENT) As Boolean 22 | End Function 23 | 24 | 25 | Public Shared Function EnumChildWindows(ByVal WindowHandle As IntPtr, ByVal Callback As EnumWindowProcess, ByVal lParam As IntPtr) As Boolean 26 | End Function 27 | 28 | 29 | Public Shared Function SetWindowCompositionAttribute(ByVal hwnd As IntPtr, ByRef data As WindowCompositionAttributeData) As Integer 30 | End Function 31 | 32 | 33 | Public Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr 34 | End Function 35 | 36 | 37 | Public Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr 38 | End Function 39 | 40 | 41 | Public Shared Function GetParent(ByVal hWnd As IntPtr) As IntPtr 42 | End Function 43 | 44 | 45 | Public Shared Function GetClientRect(ByVal hWnd As System.IntPtr, ByRef lpRECT As RECT) As Integer 46 | End Function 47 | 48 | 49 | Shared Function SetWindowRgn(ByVal hWnd As IntPtr, ByVal hRgn As IntPtr, ByVal bRedraw As Boolean) As Integer 50 | End Function 51 | 52 | 53 | Shared Function GetWindowRgn(ByVal hWnd As IntPtr, ByVal hRgn As IntPtr) As Integer 54 | End Function 55 | 56 | 57 | Public Shared Function CreateRoundRectRgn(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer, ByVal w As Integer, ByVal h As Integer) As IntPtr 58 | End Function 59 | 60 | 61 | Public Shared Function CreateRectRgn(ByVal nLeftRect As Integer, ByVal nTopRect As Integer, ByVal nRightRect As Integer, ByVal nBottomRect As Integer) As IntPtr 62 | End Function 63 | 64 | 65 | 66 | Public Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr 67 | End Function 68 | 69 | 70 | Public Shared Function MonitorFromWindow(ByVal hwnd As IntPtr, ByVal dwFlags As UInteger) As IntPtr 71 | End Function 72 | 73 | 74 | Public Shared Function GetMonitorInfo(ByVal hMonitor As IntPtr, ByRef lpmi As MONITORINFO) As Boolean 75 | End Function 76 | 77 | 78 | Public Shared Function GetForegroundWindow() As IntPtr 79 | End Function 80 | 81 | 82 | Public Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Boolean 83 | End Function 84 | 85 | 86 | Public Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer 87 | End Function 88 | 89 | 90 | Public Shared Function SetProcessDpiAwareness(ByVal awareness As PROCESS_DPI_AWARENESS) As Boolean 91 | End Function 92 | 93 | 94 | Public Shared Function FindWindowByClass(ByVal lpClassName As String, ByVal zero As IntPtr) As IntPtr 95 | End Function 96 | 97 | 98 | Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal wMsg As Int32, ByVal wParam As Boolean, ByVal lParam As Int32) As Integer 99 | End Function 100 | 101 | 102 | Public Shared Function SetProcessWorkingSetSize(ByVal hProcess As IntPtr, ByVal dwMinimumWorkingSetSize As Int32, ByVal dwMaximumWorkingSetSize As Int32) As Int32 103 | End Function 104 | 105 | 106 | Public Shared Function SetWindowLong(ByVal hWnd As IntPtr, nIndex As WindowStyles, ByVal dwNewLong As Integer) As Integer 107 | End Function 108 | 109 | 110 | Public Shared Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Boolean 111 | End Function 112 | 113 | 114 | Public Shared Function AllocConsole() As Boolean 115 | End Function 116 | 117 | 118 | Public Shared Function GetDesktopWindow() As IntPtr 119 | End Function 120 | 121 | 122 | Public Shared Function DwmGetWindowAttribute(ByVal hwnd As IntPtr, ByVal dwAttribute As DWMWINDOWATTRIBUTE, ByRef pvAttribute As Integer, ByVal cbAttribute As Integer) As Integer 123 | End Function 124 | 125 | 126 | Public Shared Function DwmSetWindowAttribute(ByVal hwnd As IntPtr, ByVal dwAttribute As DWMWINDOWATTRIBUTE, ByRef pvAttribute As RECT, ByVal cbAttribute As Integer) As Integer 127 | End Function 128 | 129 | 130 | Public Shared Function SendNotifyMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As String) As Boolean 131 | End Function 132 | 133 | 134 | 135 | Public Shared Function SetLayeredWindowAttributes(ByVal hwnd As IntPtr, ByVal crKey As UInteger, ByVal bAlpha As Byte, ByVal dwFlags As UInteger) As Boolean 136 | End Function 137 | 138 | 139 | 140 | Public Shared Function RedrawWindow(hWnd As IntPtr, lprcUpdate As IntPtr, hrgnUpdate As IntPtr, flags As RedrawWindowFlags) As Boolean 141 | End Function 142 | 143 | 144 | Public Shared Function CombineRgn(ByVal hrgnDest As IntPtr, 145 | ByVal hrgnSrc1 As IntPtr, ByVal hrgnSrc2 As IntPtr, 146 | ByVal fnCombineMode As Integer) As Integer 147 | End Function 148 | 149 | 150 | Enum DWMWINDOWATTRIBUTE As UInteger 151 | NCRenderingEnabled = 1 152 | NCRenderingPolicy 153 | TransitionsForceDisabled 154 | AllowNCPaint 155 | CaptionButtonBounds 156 | NonClientRtlLayout 157 | ForceIconicRepresentation 158 | Flip3DPolicy 159 | ExtendedFrameBounds 160 | HasIconicBitmap 161 | DisallowPeek 162 | ExcludedFromPeek 163 | Cloak 164 | Cloaked 165 | FreezeRepresentation 166 | End Enum 167 | 168 | 169 | Enum RedrawWindowFlags As UInteger 170 | Invalidate = &H1 171 | InternalPaint = &H2 172 | [Erase] = &H4 173 | Validate = &H8 174 | NoInternalPaint = &H10 175 | NoErase = &H20 176 | NoChildren = &H40 177 | AllChildren = &H80 178 | UpdateNow = &H100 179 | EraseNow = &H200 180 | Frame = &H400 181 | NoFrame = &H800 182 | End Enum 183 | 184 | Public Structure POINTAPI 185 | Public x As Integer 186 | Public y As Integer 187 | End Structure 188 | 189 | Public Shared WS_BORDER As Integer = 8388608 190 | Public Shared WS_DLGFRAME As Integer = 4194304 191 | Public Shared WS_CAPTION As Integer = WS_BORDER Or WS_DLGFRAME 192 | Public Shared WS_VISIBLE As Integer = 268435456 193 | 194 | Public Structure WINDOWPLACEMENT 195 | Public Length As Integer 196 | Public flags As Integer 197 | Public showCmd As Integer 198 | Public ptMinPosition As POINTAPI 199 | Public ptMaxPosition As POINTAPI 200 | Public rcNormalPosition As RECT 201 | End Structure 202 | 203 | Public Enum PROCESS_DPI_AWARENESS 204 | Process_DPI_Unaware = 0 205 | Process_System_DPI_Aware = 1 206 | Process_Per_Monitor_DPI_Aware = 2 207 | End Enum 208 | 209 | Public Shared WM_DWMCOLORIZATIONCOLORCHANGED As Integer = &H320 210 | Public Shared WM_DWMCOMPOSITIONCHANGED As Integer = &H31E 211 | Public Shared WM_THEMECHANGED As Integer = &H31A 212 | 213 | Public Const WM_SETREDRAW As Integer = 11 214 | 215 | Public Structure WindowCompositionAttributeData 216 | Public Attribute As WindowCompositionAttribute 217 | Public Data As IntPtr 218 | Public SizeOfData As Integer 219 | End Structure 220 | 221 | Public Enum WindowCompositionAttribute 222 | WCA_ACCENT_POLICY = 19 223 | End Enum 224 | 225 | Public Structure RECT 226 | Public Left As Integer 227 | Public Top As Integer 228 | Public Right As Integer 229 | Public Bottom As Integer 230 | End Structure 231 | 232 | Public Structure MONITORINFO 233 | Public cbSize As Long 234 | Public rcMonitor As RECT 235 | Public rcWork As RECT 236 | Public dwFlags As Long 237 | End Structure 238 | 239 | Friend Enum AccentState 240 | ACCENT_DISABLED = 0 241 | ACCENT_ENABLE_GRADIENT = 1 242 | ACCENT_ENABLE_TRANSPARENTGRADIENT = 2 243 | ACCENT_ENABLE_BLURBEHIND = 3 244 | ACCENT_ENABLE_TRANSPARANT = 6 245 | ACCENT_ENABLE_ACRYLICBLURBEHIND = 4 246 | ACCENT_NORMAL = 150 247 | End Enum 248 | 249 | 250 | Friend Structure AccentPolicy 251 | Public AccentState As AccentState 252 | Public AccentFlags As Integer 253 | Public GradientColor As Integer 254 | Public AnimationId As Integer 255 | End Structure 256 | 257 | Public Const GWL_STYLE = -16 258 | Public Const GWL_EXSTYLE = -20 259 | Public Const WS_MAXIMIZE = 16777216 260 | Public Const WS_POPUP = 2147483648 261 | Public Const WS_EX_LAYERED As Integer = 524288 262 | 263 | Public Enum WindowStyles 264 | WS_BORDER = &H800000 265 | WS_CAPTION = &HC00000 266 | WS_CHILD = &H40000000 267 | WS_CLIPCHILDREN = &H2000000 268 | WS_CLIPSIBLINGS = &H4000000 269 | WS_DISABLED = &H8000000 270 | WS_DLGFRAME = &H400000 271 | WS_GROUP = &H20000 272 | WS_HSCROLL = &H100000 273 | WS_MAXIMIZE = &H1000000 274 | WS_MAXIMIZEBOX = &H10000 275 | WS_MINIMIZE = &H20000000 276 | WS_MINIMIZEBOX = &H20000 277 | WS_OVERLAPPED = &H0 278 | WS_OVERLAPPEDWINDOW = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_SIZEFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX 279 | WS_SIZEFRAME = &H40000 280 | WS_SYSMENU = &H80000 281 | WS_TABSTOP = &H10000 282 | WS_VISIBLE = &H10000000 283 | WS_VSCROLL = &H200000 284 | End Enum 285 | 286 | Enum ShowWindowCommands As Integer 287 | Hide = 0 288 | Normal = 1 289 | ShowMinimized = 2 290 | Maximize = 3 291 | ShowMaximized = 3 292 | ShowNoActivate = 4 293 | Show = 5 294 | Minimize = 6 295 | ShowMinNoActive = 7 296 | ShowNA = 8 297 | Restore = 9 298 | ShowDefault = 10 299 | ForceMinimize = 11 300 | End Enum 301 | 302 | Public Delegate Function EnumWindowProcess(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean 303 | 304 | Public Shared SWP_NOSIZE As UInt32 = 1 305 | Public Shared SWP_ASYNCWINDOWPOS As UInt32 = 16384 306 | Public Shared SWP_NOACTIVATE As UInt32 = 16 307 | Public Shared SWP_NOSENDCHANGING As UInt32 = 1024 308 | Public Shared SWP_NOZORDER As UInt32 = 4 309 | Public Shared WM_COMMAND As Long = &H111 310 | Public Shared HWND_BROADCAST As IntPtr = New IntPtr(65535) 311 | Public Shared WM_SETTINGCHANGE As UInteger = 26 312 | Public Shared SMTO_ABORTIFHUNG As Integer = 2 313 | 314 | 315 | 316 | Public Shared TOPMOST_FLAGS As UInt32 = &H2 Or &H1 317 | Public Shared ReadOnly HWND_TOPMOST As IntPtr = New IntPtr(-1) 318 | 319 | 320 | 321 | Public Shared Sub ShowStartMenu() 322 | Dim shell = FindWindow("Shell_TrayWnd", Nothing) 323 | 324 | 325 | '' Const keyControl As Byte = &H11 326 | '' Const keyEscape As Byte = &H1B 327 | '' keybd_event(keyControl, 0, 0, UIntPtr.Zero) 328 | '' keybd_event(keyEscape, 0, 0, UIntPtr.Zero) 329 | '' Const KEYEVENTF_KEYUP As UInteger = &H2 330 | '' keybd_event(keyControl, 0, KEYEVENTF_KEYUP, UIntPtr.Zero) 331 | ''keybd_event(keyEscape, 0, KEYEVENTF_KEYUP, UIntPtr.Zero) 332 | 333 | '' keybd_event(CByte(Keys.LWin), 0, &H0, CType(0, UIntPtr)) : Application.DoEvents() 'Press the Left Win key 334 | ''keybd_event(CByte(Keys.LWin), 0, &H0, CType(0, UIntPtr)) : Application.DoEvents() 'Press the Left Win key 335 | 336 | '' Dim tt As New RECT 337 | '' GetWindowRect(shell, tt) 338 | 339 | '' MsgBox(tt.Top) 340 | 341 | ''SHOWS DESKTOP 342 | ''SendMessage(shell, &H400 + 377, CBool(CType(&H1, IntPtr)), CInt(CType(0, IntPtr))) 343 | 344 | 345 | 346 | '' Dim sClassName As New StringBuilder("", 256) 347 | '' GetClassName(GetActiveWindow(), sClassName, 256) 348 | 349 | '' PostMessage(shell, &H400 + 465, CType(&H1, IntPtr), CType(&H10001, IntPtr)) 350 | '' PostMessage(shell, &H127, CType(&H30001, IntPtr), CType(0, IntPtr)) 351 | ''SendMessage(shell, &H400 + 377, CBool(CType(&H100, IntPtr)), CInt(CType(1, IntPtr))) 352 | 353 | ''PostMessage(shell, &H400 + 243, CType(shell, IntPtr), CType(0, IntPtr)) 354 | ''SetFocus(shell) 355 | keybd_event(CByte(Keys.LWin), 0, &H0, CType(0, UIntPtr)) 'Press the Left Win key 356 | 357 | 358 | keybd_event(CByte(Keys.LWin), 0, &H2, CType(0, UIntPtr)) 'Press the Left Win key 359 | '' SetFocus(shell) 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | '' End If 368 | 369 | '' SetFocus(shell) 370 | 371 | 372 | '' keybd_event(CByte(Keys.LWin), 0, &H2, CType(0, UIntPtr)) : Application.DoEvents() 'Press the Left Win key 373 | '' keybd_event(CByte(Keys.LWin), 0, &H2, CType(0, UIntPtr)) : Application.DoEvents() 'Press the Left Win key 374 | 375 | '' PostMessage(shell, &H112, CType(&HF131, IntPtr), CType(&H1, IntPtr)) 376 | 377 | ''PostMessage(shell, wm_s, CType(&H1, IntPtr), CType(&H10001, IntPtr)) 378 | 379 | '' PostMessage(shell, &H400 + 465, CType(&H1, IntPtr), CType(&H10001, IntPtr)) 380 | '' PostMessage(shell, &H400 + 443, CType(&H1, IntPtr), CType(0, IntPtr)) 381 | '' PostMessage(shell, &H400 + 377, CType(&H0, IntPtr), CType(0, IntPtr)) 382 | 383 | 384 | 385 | '' keybd_event(CByte(Keys.LWin), 0, &H2, CType(0, UIntPtr)) 'Press the Left Win key 386 | 387 | End Sub 388 | 389 | 390 | Public Shared Sub keybd_event(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As UInteger, ByVal dwExtraInfo As UIntPtr) 391 | 392 | End Sub 393 | 394 | Private Declare Function SetFocus Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr 395 | 396 | 397 | Public Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As System.Text.StringBuilder, ByVal cch As Integer) As IntPtr 398 | End Function 399 | 400 | 401 | Private Shared Function GetActiveWindow() As IntPtr 402 | End Function 403 | 404 | 405 | Private Shared Function GetWindowLongPtr(ByVal hWnd As HandleRef, nIndex As WindowLongFlags) As IntPtr 406 | End Function 407 | 408 | 409 | Public Enum WindowLongFlags As Integer 410 | GWL_EXSTYLE = -20 411 | GWLP_HINSTANCE = -6 412 | GWLP_HWNDPARENT = -8 413 | GWL_ID = -12 414 | GWL_STYLE = -16 415 | GWL_USERDATA = -21 416 | GWL_WNDPROC = -4 417 | DWLP_USER = &H8 418 | DWLP_MSGRESULT = &H0 419 | DWLP_DLGPROC = &H4 420 | End Enum 421 | 422 | End Class -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 1.7.8.0 2 | --------------------------------------------------------------------------------