├── .github ├── FUNDING.yml └── workflows │ └── build.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── docs ├── configuration │ ├── index.html │ ├── modify-items.html │ ├── new-items.html │ ├── properties.html │ ├── settings.html │ └── themes.html ├── examples │ ├── copy-path.html │ ├── favorites.html │ ├── goto.html │ ├── index.html │ └── taskbar.html ├── expressions │ ├── color.html │ ├── comments.html │ ├── identifier.html │ ├── index.html │ ├── numeric.html │ ├── operators.html │ ├── string.html │ └── variables.html ├── functions │ ├── app.html │ ├── appx.html │ ├── clipboard.html │ ├── color.html │ ├── command.html │ ├── id.html │ ├── image.html │ ├── index.html │ ├── ini.html │ ├── input.html │ ├── io.html │ ├── key.html │ ├── msg.html │ ├── path.html │ ├── process.html │ ├── reg.html │ ├── regex.html │ ├── sel.html │ ├── str.html │ ├── sys.html │ ├── this.html │ ├── user.html │ └── window.html ├── get-started.html ├── images │ ├── config.png │ ├── copypath1.png │ ├── copypath2.png │ ├── copypath3.png │ ├── dark │ │ └── goto.png │ ├── fav1.png │ ├── fav2.png │ ├── fav3.png │ ├── goto.png │ ├── helloworld.png │ └── light │ │ └── goto.png ├── index.html ├── installation.html └── menu.json ├── packages ├── assets │ ├── logo-128.png │ ├── logo-256.png │ ├── logo-32.png │ └── logo-512.png └── choco │ ├── nilesoft-shell.1.8.1.nupkg │ ├── nilesoft-shell.1.9.10.nupkg │ ├── nilesoft-shell.1.9.15.nupkg │ ├── nilesoft-shell.1.9.nupkg │ ├── nilesoft-shell.nuspec │ └── tools │ ├── chocolateyinstall.ps1 │ └── chocolateyuninstall.ps1 ├── screenshots ├── acrylic.png ├── edit.png ├── file-manage.png ├── folder-back.png ├── goto2.png ├── gradient.png ├── sel.png ├── taskbar.png ├── terminal.png └── view.png ├── src ├── 3rdparty │ ├── detours │ │ ├── Makefile │ │ ├── src │ │ │ ├── Makefile │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ └── disasm.cpp │ │ ├── system.mak │ │ └── vc │ │ │ ├── Detours.sln │ │ │ ├── Detours.vcxproj │ │ │ └── Detours.vcxproj.filters │ └── plutosvg │ │ ├── plutosvg.sln │ │ └── plutosvg │ │ ├── VC-LTL.props │ │ ├── plutosvg.vcxproj │ │ ├── plutosvg.vcxproj.filters │ │ ├── plutosvg.vcxproj.user │ │ └── source │ │ ├── plutosvg.c │ │ ├── plutosvg.h │ │ ├── plutovg-blend.c │ │ ├── plutovg-dash.c │ │ ├── plutovg-font.c │ │ ├── plutovg-geometry.c │ │ ├── plutovg-paint.c │ │ ├── plutovg-private.h │ │ ├── plutovg-rle.c │ │ ├── plutovg.c │ │ ├── plutovg.h │ │ ├── stb_truetype.h │ │ ├── sw_ft_math.c │ │ ├── sw_ft_math.h │ │ ├── sw_ft_raster.c │ │ ├── sw_ft_raster.h │ │ ├── sw_ft_stroker.c │ │ ├── sw_ft_stroker.h │ │ └── sw_ft_types.h ├── Shell.sln ├── bin │ ├── imports │ │ ├── develop.nss │ │ ├── file-manage.nss │ │ ├── goto.nss │ │ ├── images.nss │ │ ├── lang │ │ │ ├── ar.nss │ │ │ ├── de-DE.nss │ │ │ ├── en.nss │ │ │ ├── ko.nss │ │ │ ├── no.nss │ │ │ ├── pt-BR.nss │ │ │ ├── zh-CN.nss │ │ │ └── zh-TW.nss │ │ ├── modify.nss │ │ ├── taskbar.nss │ │ ├── terminal.nss │ │ └── theme.nss │ ├── license.txt │ ├── readme.txt │ └── shell.nss ├── dll │ ├── Shell.vcxproj │ ├── Shell.vcxproj.filters │ ├── Shell.vcxproj.user │ ├── packages.config │ └── src │ │ ├── ContextMenu.cpp │ │ ├── Expression │ │ ├── ArrayExpression.cpp │ │ ├── ArrayExpression.h │ │ ├── Constants.h │ │ ├── Context.cpp │ │ ├── Context.h │ │ ├── Expression.cpp │ │ ├── Expression.h │ │ ├── ExpressionType.h │ │ ├── FuncExpression.cpp │ │ ├── IdentExpression.h │ │ ├── LiteralExpression.h │ │ ├── OperatorExpression.cpp │ │ ├── OperatorExpression.h │ │ ├── Scope.cpp │ │ ├── Scope.h │ │ ├── StatementExpression.h │ │ └── Variable.h │ │ ├── Include │ │ ├── Cache.h │ │ ├── ContextMenu.h │ │ ├── Exception.h │ │ ├── FileSystemObjects.h │ │ ├── FindPattern.h │ │ ├── Hooker.h │ │ ├── Initializer.h │ │ ├── Keyboard.h │ │ ├── Menu.h │ │ ├── MenuItem.h │ │ ├── Selections.h │ │ ├── Styles.h │ │ ├── Theme.h │ │ ├── Tip.h │ │ ├── UTheme.h │ │ ├── stb_image_write.h │ │ ├── targetver.h │ │ └── win32_hook.h │ │ ├── Initializer.cpp │ │ ├── Main.cpp │ │ ├── Parser │ │ ├── Ident.h │ │ ├── IdentHash.h │ │ ├── Lexer.cpp │ │ ├── Lexer.h │ │ ├── Parser.cpp │ │ ├── Parser.h │ │ ├── Properties.cpp │ │ ├── Token.h │ │ └── Verification.cpp │ │ ├── Selections.cpp │ │ ├── Shell.def │ │ ├── dija.h │ │ └── pch.h ├── exe │ ├── exe.vcxproj │ ├── exe.vcxproj.filters │ ├── exe.vcxproj.user │ ├── packages.config │ └── src │ │ ├── Control.h │ │ └── Main.cpp ├── setup │ ├── build.cmd │ ├── ca │ │ ├── ca.def │ │ ├── ca.vcxproj │ │ ├── ca.vcxproj.user │ │ ├── dllmain.cpp │ │ └── packages.config │ └── wix │ │ ├── res │ │ ├── WixUI_Banner.png │ │ ├── WixUI_Bmp_New.bmp │ │ ├── WixUI_Bmp_Up.bmp │ │ ├── WixUI_Dialog.png │ │ ├── WixUI_Ico_Exclam.ico │ │ └── WixUI_Ico_Info.ico │ │ ├── setup.wixproj │ │ ├── setup.wxs │ │ ├── ui.wxi │ │ └── var.wxi ├── shared │ ├── FileSystemObjects.h │ ├── Globals.h │ ├── Library │ │ ├── PlutoVGWrap.h │ │ ├── detours-arm64.lib │ │ ├── detours-x64.lib │ │ ├── detours-x86.lib │ │ ├── detours.h │ │ ├── plutosvg-arm64.lib │ │ ├── plutosvg-x64.lib │ │ ├── plutosvg-x86.lib │ │ ├── plutosvg.h │ │ └── plutovg.h │ ├── RegistryConfig.h │ ├── Resource.h │ ├── Resource │ │ ├── Shell.rc │ │ ├── Shell.ttf │ │ ├── main.ico │ │ ├── manifest.txt │ │ └── manifest.xml │ ├── System.h │ ├── System │ │ ├── Collections │ │ │ ├── Array.h │ │ │ ├── LList.h │ │ │ ├── List.h │ │ │ └── StringList.h │ │ ├── CommandLine.h │ │ ├── DLL.h │ │ ├── Diagnostics │ │ │ ├── Process.h │ │ │ ├── Shell.h │ │ │ └── Thread.h │ │ ├── Drawing │ │ │ ├── Bitmap.h │ │ │ ├── Brush.h │ │ │ ├── Color.h │ │ │ ├── DC.h │ │ │ ├── Drawing.h │ │ │ ├── Icon.h │ │ │ ├── Image.h │ │ │ ├── Utility.h │ │ │ └── WICImagingFactory.h │ │ ├── Environment.h │ │ ├── Exception.h │ │ ├── IO │ │ │ ├── File.h │ │ │ ├── IO.h │ │ │ └── Path.h │ │ ├── Int.h │ │ ├── Log.cpp │ │ ├── Log.h │ │ ├── MemoryManager.h │ │ ├── Object.h │ │ ├── Security │ │ │ ├── Elevation.h │ │ │ └── Permission.h │ │ ├── Text │ │ │ ├── Buffer.h │ │ │ ├── Char.h │ │ │ ├── Encoding.h │ │ │ ├── Hash.h │ │ │ ├── StringBuffer.h │ │ │ ├── TString.h │ │ │ ├── Text.h │ │ │ └── string.h │ │ ├── Windows │ │ │ ├── Forms │ │ │ │ └── MessageBox.h │ │ │ ├── Registry.cpp │ │ │ ├── Registry.h │ │ │ ├── Window.h │ │ │ └── Windows.h │ │ └── auto_ptr.h │ ├── VC-LTL.props │ ├── shared.vcxitems │ ├── shared.vcxitems.filters │ ├── shared.vcxitems.user │ └── targetver.h └── tools │ ├── font │ ├── Shell.ttf │ └── shell.sfd │ ├── hash │ ├── hash.sln │ ├── hash │ │ ├── Program.cs │ │ ├── forms.cs │ │ ├── hash.cs │ │ └── hash.csproj │ └── publish │ │ └── hash.exe │ └── version │ ├── Resource.h │ ├── Shell.def │ ├── manifest.xml │ ├── var.wxi │ ├── version.cmd │ └── version.ps1 └── templates ├── colors.shl ├── glyphs.shl └── themes ├── blue.shl ├── gray.shl ├── green.shl ├── images ├── blue.png ├── colors.png ├── columns.png ├── font-brush-script.png ├── font-fixedsys.png ├── font-segoe-script.png ├── gray.png ├── green.png └── yellow.png └── yellow.shl /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: moudey 2 | patreon: moudey 3 | custom: ['https://www.buymeacoffee.com/moudey','https://paypal.me/nilesoft'] 4 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | permissions: 10 | contents: read 11 | 12 | jobs: 13 | build: 14 | 15 | strategy: 16 | matrix: 17 | # configuration: [debug, release] 18 | configuration: [release] 19 | platform: [x64, x86, arm64] 20 | fail-fast: false 21 | 22 | env: 23 | SOLUTION_FILE_PATH: src/Shell.sln 24 | BUILD_CONFIGURATION: ${{matrix.configuration}} 25 | BUILD_PLATFORM: ${{matrix.platform}} 26 | BIN_PATH: D:\a\Shell\Shell\src\bin 27 | runs-on: windows-latest 28 | 29 | steps: 30 | - uses: actions/checkout@v4 31 | 32 | - name: Add MSBuild to PATH 33 | uses: microsoft/setup-msbuild@v2 34 | 35 | - name: Restore NuGet packages 36 | working-directory: ${{env.GITHUB_WORKSPACE}} 37 | run: nuget restore ${{env.SOLUTION_FILE_PATH}} 38 | 39 | - name: Build 40 | working-directory: ${{env.GITHUB_WORKSPACE}} 41 | run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=${{env.BUILD_PLATFORM}} ${{env.SOLUTION_FILE_PATH}} 42 | 43 | - name: Upload artifacts 44 | uses: actions/upload-artifact@v4 45 | with: 46 | name: shell-${{matrix.platform}} 47 | path: | 48 | ${{env.BIN_PATH}}\* 49 | !${{env.BIN_PATH}}\*.lib 50 | !${{env.BIN_PATH}}\*.exp 51 | !${{env.BIN_PATH}}\*.wixpdb 52 | !${{env.BIN_PATH}}\ca.dll 53 | if-no-files-found: warn 54 | retention-days: 0 55 | compression-level: 6 56 | overwrite: false 57 | include-hidden-files: false 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | 28 | # Executables 29 | *.exe 30 | *.out 31 | *.app 32 | 33 | # Other junk 34 | .DS_Store 35 | 36 | src/.vs/ 37 | src/exe/obj/ 38 | src/dll/obj/ 39 | src/setup/ca/obj/ 40 | src/setup/wix/obj/ 41 | src/packages/ 42 | #src/bin/*.exe -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "src/lib/plutosvg"] 2 | path = src/lib/plutosvg 3 | url = https://github.com/sammycage/plutosvg.git 4 | [submodule "src/lib/detours"] 5 | path = src/lib/detours 6 | url = https://github.com/microsoft/Detours.git 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Nilesoft 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 | [![Ceasefire Now](https://badge.techforpalestine.org/default)](https://techforpalestine.org/learn-more) 2 | 3 | [![Build](../../actions/workflows/build.yml/badge.svg)](../../actions/workflows/build.yml) 4 | [![Nightly](https://img.shields.io/badge/Nightly-nightly.link-purple)](https://nightly.link/moudey/Shell/workflows/build/main) 5 | 6 | # [Shell](https://nilesoft.org) 7 | Powerful manager for Windows File Explorer context menu. 8 |
9 | 10 |

11 | 12 |
13 |
14 |

15 | 16 | ## Details 17 |

18 | Shell is a context menu extender that lets you handpick the items to integrate into the Windows File Explorer context menu, create custom commands to access all your favorite web pages, files, and folders, and launch any application directly from the context menu.
19 | It also provides you a convenient solution to modify or remove any context menu item added by the system or third-party software. 20 |

21 | 22 | Features 23 | ------------------ 24 | * Lightweight, portable, and relatively easy to use. 25 | * Fully customize the appearance. 26 | * Adding new custom items such as (sub-menu, menu-items, and separator). 27 | * Modify or remove items that already exist. 28 | * Support all file system objects, including files, folders, desktop, and the taskbar. 29 | * Support expressions syntax. with built-in functions and predefined variables. 30 | * Support colors, glyphs, SVG, embedded icons, and image files such as .ico, .png or .bmp. 31 | * Support search and filter. 32 | * Support for complex nested menus. 33 | * Support multiple columns. 34 | * Quickly and easily configure file in plain text. 35 | * Minimal resource usage. 36 | * No limitations. 37 | 38 | 39 | Requirements 40 | ------------------ 41 | * Microsoft Windows 7/8/10/11 42 | 43 | 44 | Documentation 45 | ------------------ 46 | Browse the [online documentation here.](https://nilesoft.org/docs) 47 | 48 | [Ask DeepWiki.com](https://deepwiki.com/moudey/Shell) 49 | 50 | Download 51 | ------------------ 52 | Download the latest version: 53 | https://nilesoft.org/download 54 | 55 | Screenshots 56 | ------------------ 57 |

58 |
59 |
60 |
61 |
62 |
63 | 64 |
65 |
66 |

67 | 68 | Donate 69 | ------------------ 70 | If you really love Shell and would like to see it continue to improve. 71 | 72 | [![Paypal](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://www.paypal.me/nilesoft) 73 | [![BuyMeACoffee](https://img.shields.io/badge/Donate-BuyMeACoffee-yellow.svg)](https://www.buymeacoffee.com/moudey) 74 | 75 | 76 | -------------------------------------------------------------------------------- /docs/configuration/settings.html: -------------------------------------------------------------------------------- 1 |

Settings

2 |

3 |

Settings are containers for storing default values.

4 |
settings
 5 | {
 6 | 	// show menu delay value from 0 to 4000
 7 | 	showdelay = 200
 8 | 
 9 | 	// Prevent interaction with these windows or processes
10 | 	exclude
11 | 	{
12 | 		where = boolean value
13 | 		window = window name
14 | 		process = process name
15 | 	}
16 | 
17 | 	tip = true
18 | 	// or
19 | 	tip
20 | 	{
21 | 		enabled = true
22 | 
23 | 		// normal = [background, text]
24 | 		normal = [default, default]
25 | 
26 | 		// normal = [background, text]
27 | 		primary = [#000, #fff]
28 | 
29 | 		// info = [background, text]
30 | 		info = [#88f, #fff]
31 | 
32 | 		// success = [background, text]
33 | 		success = [#8f8, #fff]
34 | 
35 | 		// warning = [background, text]
36 | 		warning = [#ff8, #fff]
37 | 
38 | 		// danger = [background, text]
39 | 		danger = [#f88, #fff]
40 | 
41 | 		// max width value from 200 to 2000
42 | 		width = 400
43 | 
44 | 		// opacity value from 0 to 100
45 | 		opacity = 100
46 | 
47 | 		// radius size value from 0 to 3
48 | 		radius = 1
49 | 
50 | 		time = 1.5
51 | 
52 | 		padding = [8, 4]
53 | 	}
54 | 
55 | 	// Disable/Enable modify items processing
56 | 	modify
57 | 	{
58 | 		enabled = boolean value
59 | 		image = [0 = disable, 1 = enable, 2 = auto reimage]
60 | 
61 | 		// Allow/disallow modification of title
62 | 		title = boolean value
63 | 
64 | 		// Allow/disallow modification of visibility
65 | 		visibility = boolean value
66 | 
67 | 		// Allow/disallow modification of parent
68 | 		parent = boolean value
69 | 
70 | 		// Allow/disallow modification of position
71 | 		position = boolean value
72 | 
73 | 		// Allow/disallow to add separator
74 | 		separator = boolean value
75 | 
76 | 		// auto set image and group
77 | 		auto = boolean value
78 | 	}
79 | 
80 | 	// Disable/Enable new items processing
81 | 	new
82 | 	{
83 | 		enabled = boolean value
84 | 		// disable/enable image
85 | 		image = boolean value
86 | 	}
87 | }
88 | -------------------------------------------------------------------------------- /docs/examples/copy-path.html: -------------------------------------------------------------------------------- 1 | 
Copy Path example
2 |
// type can set with '~taskbar' equals all file types except taskbar.
 3 | menu(type='file|dir|back|root|namespace' mode="multiple"  title='copy to clipboard' image=#ff00ff)
 4 | {
 5 | 	// Appears only when multiple selections.
 6 | 	item(vis=@(sel.count > 1) title='Copy path (@sel.count) items selected'
 7 | 			cmd=command.copy(sel(false, "\n")))
 8 | 
 9 | 	item(mode="single" title=sel.path 
10 | 			cmd=command.copy(sel.path))
11 | 
12 | 	item(mode="single" type='file|dir|back.dir'
13 | 			vis=sel.short.len!=sel.path.len title=sel.short
14 | 			cmd=command.copy(sel.short))
15 | 	separator
16 | 	item(mode="single" vis=@(sel.parent.len>3) title=sel.parent 
17 | 			cmd=command.copy(sel.parent))
18 | 	separator
19 | 	item(mode="single" type='file|dir|back.dir' title=sel.file.name
20 | 			cmd=command.copy(sel.file.name))
21 | 		   
22 | 	item(mode="single" type='file' title=sel.file.title
23 | 			cmd=command.copy(sel.file.title))
24 | 
25 | 	item(mode="single" type='file' title=sel.file.ext
26 | 		   cmd=command.copy(sel.file.ext))
27 | }
28 | 
29 | 30 | 31 | 32 |
33 | -------------------------------------------------------------------------------- /docs/examples/favorites.html: -------------------------------------------------------------------------------- 1 | 
Favorite applications and directories example
2 |
menu(type='desktop|taskbar' title='Favorites' image=#00ff00)
 3 | {
 4 | 	menu(title='Applications' image=#ff0000)
 5 | 	{
 6 | 		item(title='Command prompt' image cmd='cmd.exe')
 7 | 		item(title='PowerShell' image cmd='powershell.exe')
 8 | 		item(title='Registry editor' image cmd='regedit.exe')
 9 | 		separator
10 | 		item(title='Paint' image cmd='mspaint.exe')
11 | 		item(title='Notepad' image cmd='notepad.exe')
12 | 	}
13 | 	separator
14 | 	menu(title='Directories' image=#0000ff)
15 | 	{
16 | 		item(title='Downloads' cmd=user.downloads)
17 | 		item(title='Pictures' cmd=user.pictures)
18 | 		item(title='Home' cmd=user.directory)
19 | 		separator
20 | 		item(title='Windows' cmd=sys.directory)
21 | 		item(title='Program files' cmd=sys.prog())
22 | 	}
23 | }
24 |
25 | 26 | 27 |
28 | -------------------------------------------------------------------------------- /docs/examples/goto.html: -------------------------------------------------------------------------------- 1 | 
Goto example
2 |
menu(mode="multiple" title='Goto' sep="both" image= \uE14A)
 3 | {
 4 | 	menu(title='Folder' image=\uE1F4)
 5 | 	{
 6 | 		item(title='Windows' image=inherit cmd=sys.dir)
 7 | 		item(title='System' image=inherit cmd=sys.bin)
 8 | 		item(title='Program Files' image=inherit cmd=sys.prog)
 9 | 		item(title='Program Files x86' image=inherit cmd=sys.prog32)
10 | 		item(title='ProgramData' image=inherit cmd=sys.programdata)
11 | 		item(title='Applications' image=inherit cmd='shell:appsfolder')
12 | 		item(title='Users' image=inherit cmd=sys.users)
13 | 		separator
14 | 		item(title='Desktop' image=inherit cmd=user.desktop)
15 | 		item(title='Downloads' image=inherit cmd=user.downloads)
16 | 		item(title='Pictures' image=inherit cmd=user.pictures)
17 | 		item(title='Documents' image=inherit cmd=user.documents)
18 | 		item(title='Startmenu' image=inherit cmd=user.startmenu)
19 | 		item(title='Profile' image=inherit cmd=user.dir)
20 | 		item(title='AppData' image=inherit cmd=user.appdata)
21 | 		item(title='Temp' image=inherit cmd=user.temp)
22 | 	}
23 | 	
24 | 	item(title=title.control_panel image=\uE0F3 cmd='shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}')
25 | 	item(title='All Control Panel Items' image=\uE0F3 cmd='shell:::{ED7BA470-8E54-465E-825C-99712043E01C}')
26 | 	item(title=title.run image=\uE14B cmd='shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}')
27 |    
28 | 	menu(title=title.settings sep="before" image=id.settings.icon)
29 | 	{
30 | 		// https://docs.microsoft.com/en-us/windows/uwp/launch-resume/launch-settings-app
31 | 		item(title='systeminfo' image=inherit cmd arg='/K systeminfo')
32 | 		item(title='search' cmd='search-ms:' image=inherit)
33 | 		item(title='settings' image=inherit cmd='ms-settings:')
34 | 		item(title='about' image=inherit cmd='ms-settings:about')
35 | 		item(title='usb' image=inherit cmd='ms-settings:usb')
36 | 		item(title='network-status' image=inherit cmd='ms-settings:network-status')
37 | 		item(title='network-ethernet' image=inherit cmd='ms-settings:network-ethernet')
38 | 		item(title='personalization-background' image=inherit cmd='ms-settings:personalization-background')
39 | 		item(title='personalization-colors' image=inherit cmd='ms-settings:colors')
40 | 		item(title='lockscreen' image=\uE0F3 cmd='ms-settings:lockscreen')
41 | 		item(title='personalization-start' image=inherit cmd='ms-settings:personalization-start')
42 | 		item(title='appsfeatures' image=inherit cmd='ms-settings:appsfeatures')
43 | 		item(title='optionalfeatures' image=inherit cmd='ms-settings:optionalfeatures')
44 | 		item(title='defaultapps' image=inherit cmd='ms-settings:defaultapps')
45 | 		item(title='yourinfo' image=inherit cmd='ms-settings:yourinfo')
46 | 		item(title='windowsupdate' image=inherit cmd='ms-settings:windowsupdate')
47 | 		item(title='windowsdefender' image=inherit cmd='ms-settings:windowsdefender')
48 | 		item(title='network connections' image=inherit cmd='shell:::{7007ACC7-3202-11D1-AAD2-00805FC1270E}')
49 | 	}
50 | }
51 |
52 | 53 |
54 | -------------------------------------------------------------------------------- /docs/examples/index.html: -------------------------------------------------------------------------------- 1 | 

Examples


2 |

This page contains some examples of what Shell can do.

-------------------------------------------------------------------------------- /docs/examples/taskbar.html: -------------------------------------------------------------------------------- 1 | 
Taskbar example
2 |
$hello_world = 'Hello World!'
 3 | 
 4 | item(title=hello_world cmd=msg(hello_world))
 5 | separator
 6 | item(title='Command prompt' cmd args='/k echo @hello_world')
 7 | separator
 8 | menu(title='Sub menu')
 9 | {
10 |   item(title='Open Paint' cmd='paint.exe' arg=sel.path)
11 |   separator
12 |   item(title='Open Notepad' cmd='notepad.exe' arg='"@sel.path"')
13 | }
-------------------------------------------------------------------------------- /docs/expressions/color.html: -------------------------------------------------------------------------------- 1 | 

Color literal

2 |
3 |
Hexadecimal Colors
4 |

interprets color constants as hexadecimal if they are preceded by # and hexadecimal color is specified with: 5 | #RRGGBB or #RRGGBBAA, where the RR (red), GG (green) and BB (blue)and AA (alpha) hexadecimal integers specify the components of the color. All values must be between 00 and FF.
For example, the #0000FF value is rendered as blue, because the blue component is set to its highest value (FF) and the others are set to 00.
There are 140 color names are predefined under the color scope.

-------------------------------------------------------------------------------- /docs/expressions/comments.html: -------------------------------------------------------------------------------- 1 | 

Comments

2 |

Comments can be used to explain Shell code, and to make it more readable. It can also be used to prevent execution Shell code. Comments can be singled-lined or multi-lined.

3 |
4 |
Single-line Comments
5 |

6 | Single-line comments start with two forward slashes (//).
7 | Any text between // and the end of the line is ignored (will not be executed). 8 |

9 |

This example uses a single-line comment before a line of code:

10 |
dynamic 
11 | {
12 | 	// This is a comment
13 | 	item(title='Hello World!')
14 | 	
15 | 	//item(title='Hello World!')
16 | }
17 | 18 |

This example uses a single-line comment at the end of a line of code:

19 |
dynamic 
20 | {
21 |     item(title='Hello World!') // This is a comment
22 | }
23 |
24 |
25 |
26 |
Multi-line Comments
27 |

28 | Multi-line comments start with /* and ends with */.
29 | Any text between /* and */ will be ignored. 30 |

31 |
dynamic
32 | {
33 | 	item(title='Hello,/* multiple-lines comment inside */ world')
34 | 	
35 | 	/*
36 | 	item(title='test item 1')
37 | 	item(title='test item 2')
38 | 	*/
39 | }
40 |

41 | Single or multi-line comments?
42 | It is up to you which you want to use. Normally, we use // for short comments, and /* */ for longer. 43 |

44 |
-------------------------------------------------------------------------------- /docs/expressions/identifier.html: -------------------------------------------------------------------------------- 1 | 

Identifier

2 |
3 |

The identifier have unique titles described by fully qualified names that indicate a logical hierarchy.
The identifier that has no parameters. Parentheses are added when necessary to separate:

4 |

There is a hierarchy of keywords in that some keywords are always followed by others.

5 |
sel.path
6 | sel.path().ext
7 | -------------------------------------------------------------------------------- /docs/expressions/index.html: -------------------------------------------------------------------------------- 1 | 

Expressions

2 |
3 |

Shell provides a variety of statements and expressions. Most of these will be familiar to developers who have programmed in Java script, C, C++, C#.

4 |

Expressions gives you all the power of Shell, but is using a simplified syntax that's easier to learn if you're a beginner, and makes you more productive if you're an expert.

5 |

To use expressions, you write them by using proper syntax. Syntax is the set of rules by which the words and symbols in an expression are correctly combined. Initially, expressions in Shell are a little bit hard to read. But with a good understanding of expression syntax and a little practice, it becomes much easier.

6 | 12 | 13 | -------------------------------------------------------------------------------- /docs/expressions/numeric.html: -------------------------------------------------------------------------------- 1 | 

Numeric literals

2 |
3 |

There are two types of numbers. Integer and floating point.

4 |
Integer literals
5 |

An integer is a numeric literal(associated with numbers) without any fractional or exponential part. There are two types of integer literals:

6 |
    7 |
  1. Decimal literal (base 10)
  2. 8 |
  3. Hexadecimal literal (base 16)
  4. 9 |
10 |

1. Decimal-literal(base 10):
A non-zero decimal digit followed by zero or more decimal digits(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).

11 | For example:
Decimal: 0, -9, 22 etc
12 |

2. Hexadecimal-literal(base 16):
0x followed by one or more hexadecimal digits(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f).

13 | For example: 14 |
Hexadecimal: 0x7f, 0x2a, 0x521 etc
15 |
Floating-point iterals
16 | 17 |

Floating-point literals specify values that must have a fractional part. These values contain decimal points (.)

18 | For example: 19 |
-2.0
0.0000234
20 | 21 | 22 | -------------------------------------------------------------------------------- /docs/expressions/string.html: -------------------------------------------------------------------------------- 1 |

String literal

2 |
3 |

string is zero or more characters written inside single or double quotes.

4 |

You can use quotes inside a string, as long as they don't match the quotes surrounding the string:

5 |
$var1 = "It's alright"
 6 | $var2 = "He is called 'Johnny'"
 7 | $var3 = 'He is called "Johnny"'
8 |
9 |
Single quotes
10 |
11 |

single quotes allow you to use the syntax of expressions within them.
The @ sign must be placed before the expressions.

12 |
item(title = 'windows dir path: @sys.dir')
13 |
14 |
Double quotes
15 |
16 |

double quotes allow you to use the Escape Character inside them only.
The backslash (\) escape character turns special characters into characters.
The sequence \" inserts a double quote in a string:

17 |
$var1 = "hello\"world"
18 | // result: hello"world
19 |

The complete set of escape sequences is as follows:

20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
\'Single quote
\"Double quote
\\Backslash
\0Null
\aAlert
\bBackspace
\fForm Feed
\nNew Line
\rCarriage Return
\tHorizontal Tab
\vVertical Tab
\uxxxxUnicode escape sequence (UTF-16) \uHHHH (range: 0000 - FFFF)
\xnnnnUnicode escape sequence for character with hex value nnnn (variable length version of \uxxxx)
\UxxxxxxxxUnicode escape sequence (UTF-32) \U00HHHHHH (range: 000000 - 10FFFF)
38 | -------------------------------------------------------------------------------- /docs/expressions/variables.html: -------------------------------------------------------------------------------- 1 | 

Variables

2 |
3 |

Variables are containers for storing data values.

4 | 8 |

The general rules for constructing names for variables (unique identifiers) are:

9 | 16 |

17 | All variables must be identified with unique names.
18 | These unique names are called identifiers. 19 | Identifiers can be short names (like x and y) or more descriptive names (age, sum, totalVolume). 20 |

21 |

Note: It is recommended to use descriptive names in order to create understandable and maintainable code

22 |
Example
23 |
$hello_world = 'Hello World!'
24 | $test_add1 = 5 + 6
25 | 
26 | item(title = hello_world cmd = msg(hello_world))
27 | 
28 | menu(title = test_add1)
29 | {
30 | 	$test_sub1 = 11 - 5
31 | 	item(title = test_sub1)
32 | }
33 | 34 | -------------------------------------------------------------------------------- /docs/functions/app.html: -------------------------------------------------------------------------------- 1 | 
APP
2 |
3 |

The namespace of the application contains file paths, version and some details.

4 |
5 |
6 |
app.directory
7 |

Returns the path of Shell directory.

8 |

Syntax

9 |
app.directory     // usage in section context
10 | '@app.directory'  // usage inside quoted-string literals
11 |
12 | 13 |
14 |
app.cfg
15 |

Returns the path of the configuration file shell.nss (or shell.shl 16 | in older installations).

17 |

Syntax

18 |
app.cfg     // usage in section context
19 | '@app.cfg'  // usage inside quoted-string literals
20 |
21 | 22 |
23 |
app.dll
24 |

Returns the path of shell.dll.

25 |

Syntax

26 |
app.dll     // usage in section context
27 | '@app.dll'  // usage inside quoted-string literals
28 |
29 | 30 |
31 |
app.exe
32 |

Returns the path of shell.exe.

33 |

Syntax

34 |
app.exe     // usage in section context
35 | '@app.exe'  // usage inside quoted-string literals
36 |
37 | 38 |
39 |
app.name
40 |

Returns application name.

41 |

Syntax

42 |
app.name     // usage in section context
43 | '@app.name'  // usage inside quoted-string literals
44 |
45 | 46 |
47 |
app.version
48 |

Returns Shell version.

49 |

Syntax

50 |
app.version     // usage in section context
51 | '@app.version'  // usage inside quoted-string literals
52 |
53 | 54 |
55 |
app.is64
56 |

Returns the architecture of the application.

57 |

Syntax

58 |
app.is64     // usage in section context
59 | '@app.is64'  // usage inside quoted-string literals
60 |
61 | 62 |
63 |
app.about
64 |

Returns Shell information.

65 |

Syntax

66 |
app.about     // usage in section context
67 | '@app.about'  // usage inside quoted-string literals
68 |
69 | 70 |
71 |
app.reload
72 |

Reload the configuration file. 73 |

74 |

Syntax

75 |
app.reload     // usage in section context
76 | '@app.reload'  // usage inside quoted-string literals
77 |
78 | 79 |
80 |
app.unload
81 |

Unload the configuration file. 82 |

83 |

Syntax

84 |
app.unload     // usage in section context
85 | '@app.unload'  // usage inside quoted-string literals
86 |
87 | -------------------------------------------------------------------------------- /docs/functions/appx.html: -------------------------------------------------------------------------------- 1 |

APPX

2 |
3 |
4 |
appx or appx.path
5 |

Returns the path of Package.

6 |

Syntax

7 | appx(packageName)
8 | appx.path(packageName)
9 |

Parameters

10 |
11 |
packageName
12 |
can be passed in full name or part of name.
13 |
14 |

Example

15 |
appx.path("WindowsTerminal")
 16 | // result:
 17 | // C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.11.3471.0_x64__8wekyb3d8bbwe
 18 | 
19 |
20 | 21 |
22 |
appx.name
23 |

Returns the display name of the Package.

24 |

Syntax

25 | appx.name(packageName) 26 |

Parameters

27 |
28 |
packageName
29 |
can be passed in full name or part of name.
30 |
31 |

Example

32 |
appx.name("WindowsTerminal")
 33 | // result:
 34 | // Windows Terminal
 35 | 
36 |
37 | 38 |
39 |
appx.id
40 |

Returns the full name of the Package.

41 |

Syntax

42 | appx.id(packageName) 43 |

Parameters

44 |
45 |
packageName
46 |
can be passed in full name or part of name.
47 |
48 |

Example

49 |
appx.id("WindowsTerminal")
 50 | // result:
 51 | // Microsoft.WindowsTerminal_1.11.3471.0_x64__8wekyb3d8bbwe
 52 | 
53 |
54 | 55 |
56 |
appx.family
57 |

Returns the family name of the Package.

58 |

Syntax

59 | appx.family(packageName) 60 |

Parameters

61 |
62 |
packageName
63 |
can be passed in full name or part of name.
64 |
65 |

Example

66 |
appx.family("WindowsTerminal")
 67 | // result:
 68 | // Microsoft.WindowsTerminal_8wekyb3d8bbwe
 69 | 
70 |
71 | 72 |
73 |
appx.version
74 |

Returns version of the Package.

75 |

Syntax

76 | appx.version(packageName) 77 |

Parameters

78 |
79 |
packageName
80 |
can be passed in full name or part of name.
81 |
82 |

Example

83 |
appx.version("WindowsTerminal")
 84 | // result:
 85 | // 1.11.3471.0
 86 | 
87 |
88 | 89 |
90 |
appx.shell
91 |

Return package settings to run.

92 |

Syntax

93 | appx.shell(packageName) 94 |

Parameters

95 |
96 |
packageName
97 |
can be passed in full name or part of name.
98 |
99 |

Example

100 |
appx.shell("WindowsTerminal")
101 | // result:
102 | // shell:appsFolder\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App
103 | 
104 |
105 | -------------------------------------------------------------------------------- /docs/functions/clipboard.html: -------------------------------------------------------------------------------- 1 | 
CLIPBOARD
2 |
3 |

Clipboard handling functions.

4 |
5 | 6 |
7 |
clipboard.get
8 |

Returns the value of the stored clipboard.

9 |

Syntax

10 | clipboard.get 11 |
12 | 13 |
14 |
clipboard.set
15 |

Store a value in the clipboard.

16 |

Syntax

17 | clipboard.set("Hello world!") 18 |
19 | 20 |
21 |
clipboard.length
22 |

Returns the length of the value stored in the clipboard.

23 |

Syntax

24 | clipboard.length 25 |
26 | 27 |
28 |
clipboard.is_empty
29 |

Verifies that there is a value stored in the clipboard.

30 |

Syntax

31 | clipboard.is_empty 32 |
33 | 34 |
35 |
clipboard.empty
36 |

Empty values stored in the clipboard.

37 |

Syntax

38 | clipboard.empty 39 |
40 | -------------------------------------------------------------------------------- /docs/functions/color.html: -------------------------------------------------------------------------------- 1 | 
COLOR
2 |
3 |

Color namespace contains predefined colors

4 |
5 |
  6 | color.aliceblue
  7 | color.antiquewhite
  8 | color.aqua
  9 | color.aquamarine
 10 | color.azure
 11 | color.beige
 12 | color.bisque
 13 | color.black
 14 | color.blanchedalmond
 15 | color.blue
 16 | color.blueviolet
 17 | color.brown
 18 | color.burlywood
 19 | color.cadetblue
 20 | color.chartreuse
 21 | color.chocolate
 22 | color.coral
 23 | color.cornflowerblue
 24 | color.cornsilk
 25 | color.crimson
 26 | color.cyan
 27 | color.darkblue
 28 | color.darkcyan
 29 | color.darkgoldenrod
 30 | color.darkgray
 31 | color.darkgreen
 32 | color.darkkhaki
 33 | color.darkmagenta
 34 | color.darkolivegreen
 35 | color.darkorange
 36 | color.darkorchid
 37 | color.darkred
 38 | color.darksalmon
 39 | color.darkseagreen
 40 | color.darkslateblue
 41 | color.darkslategray
 42 | color.darkturquoise
 43 | color.darkviolet
 44 | color.deeppink
 45 | color.deepskyblue
 46 | color.dimgray
 47 | color.dodgerblue
 48 | color.firebrick
 49 | color.floralwhite
 50 | color.forestgreen
 51 | color.fuchsia
 52 | color.gainsboro
 53 | color.ghostwhite
 54 | color.gold
 55 | color.goldenrod
 56 | color.gray
 57 | color.green
 58 | color.greenyellow
 59 | color.honeydew
 60 | color.hotpink
 61 | color.indianred
 62 | color.indigo
 63 | color.ivory
 64 | color.khaki
 65 | color.lavender
 66 | color.lavenderblush
 67 | color.lawngreen
 68 | color.lemonchiffon
 69 | color.lightblue
 70 | color.lightcoral
 71 | color.lightcyan
 72 | color.lightgoldenrodyellow
 73 | color.lightgray
 74 | color.lightgreen
 75 | color.lightpink
 76 | color.lightsalmon
 77 | color.lightseagreen
 78 | color.lightskyblue
 79 | color.lightslategray
 80 | color.lightsteelblue
 81 | color.lightyellow
 82 | color.lime
 83 | color.limegreen
 84 | color.linen
 85 | color.magenta
 86 | color.maroon
 87 | color.mediumaquamarine
 88 | color.mediumblue
 89 | color.mediumorchid
 90 | color.mediumpurple
 91 | color.mediumseagreen
 92 | color.mediumslateblue
 93 | color.mediumspringgreen
 94 | color.mediumturquoise
 95 | color.mediumvioletred
 96 | color.midnightblue
 97 | color.mintcream
 98 | color.mistyrose
 99 | color.moccasin
100 | color.navajowhite
101 | color.navy
102 | color.oldlace
103 | color.olive
104 | color.olivedrab
105 | color.orange
106 | color.orangered
107 | color.orchid
108 | color.palegoldenrod
109 | color.palegreen
110 | color.paleturquoise
111 | color.palevioletred
112 | color.papayawhip
113 | color.peachpuff
114 | color.peru
115 | color.pink
116 | color.plum
117 | color.powderblue
118 | color.purple
119 | color.red
120 | color.rosybrown
121 | color.royalblue
122 | color.saddlebrown
123 | color.salmon
124 | color.sandybrown
125 | color.seagreen
126 | color.seashell
127 | color.sienna
128 | color.silver
129 | color.skyblue
130 | color.slateblue
131 | color.slategray
132 | color.snow
133 | color.springgreen
134 | color.steelblue
135 | color.tan
136 | color.teal
137 | color.thistle
138 | color.tomato
139 | color.transparent
140 | color.turquoise
141 | color.violet
142 | color.wheat
143 | color.white
144 | color.whitesmoke
145 | color.yellow
146 | color.yellowgreen
147 | 
148 |
149 |
color.rgb(red, green, blue)
150 |
151 |
color.box
152 |
color.box(#ff0000)
153 |
154 |
color.random or color.random(min, max)
155 |
color.random
156 | color.random(0x808080, 0xf0f0f0)
157 | 
158 |
159 |
160 | color.default
161 | color.invert
162 | color.accent
163 | color.accent_light1
164 | color.accent_light2
165 | color.accent_light3
166 | color.accent_dark1
167 | color.accent_dark2
168 | color.accent_dark3
169 | color.opacity
170 | color.lighten
171 | color.darken
172 | color.rgba
173 | 
174 | -------------------------------------------------------------------------------- /docs/functions/command.html: -------------------------------------------------------------------------------- 1 | 
COMMAND
2 |
3 |
command.copy, command.copy_to_clipboard
4 |

copy to parameter clipboard.

5 |

Syntax

6 | command.copy('string copy to clipboard') 7 |
8 | 9 |
10 |
command.sleep(milliseconds)
11 |

Suspends the execution of the current thread until the time-out interval elapses.

12 |

Syntax

13 | command.sleep(1000) 14 |
15 | 16 |
17 |
command.random
18 |

Suspends the execution of the current thread until the time-out interval elapses.

19 |

Syntax

20 | command.random(min value, max value) 21 |
22 | 23 |
24 |
command.navigate
25 |

Opens a folder in the same explorer window.

26 |

Syntax

27 | command.navigate(path) 28 |
29 | 30 |
31 |
command.cascade_windows
32 | command.copy_to_folder
33 | command.customize_this_folder
34 | command.find
35 | command.folder_options
36 | command.invert_selection
37 | command.minimize_all_windows
38 | command.move_to_folder
39 | command.redo
40 | command.refresh
41 | command.restart_explorer
42 | command.restore_all_windows
43 | command.run
44 | command.search
45 | command.select_all
46 | command.select_none
47 | command.show_windows_side_by_side
48 | command.show_windows_stacked
49 | command.switcher
50 | command.toggle_desktop
51 | command.toggleext
52 | command.togglehidden
53 | command.undo
54 | 
55 |
56 | -------------------------------------------------------------------------------- /docs/functions/image.html: -------------------------------------------------------------------------------- 1 |
IMAGE (ICON)
2 |

The image namespace contains functions that return an icon and are only assigned to the image property 3 |

4 |
5 |
image.glyph
6 |

Return font icon with color and size option.

7 |

Syntax

8 | image.glyph(0xE00B)
9 | image.glyph(\uE00B)
10 | image.glyph("\uE00B")
11 | image.glyph("\xE00B")
12 |
13 | image.glyph(0xE00B, #0000ff)
14 | image.glyph(0xE00B, #0000ff, 10)
15 | image.glyph(0xE00B, #0000ff, 12, "Segoe MDL2 Assets")
16 |
17 |
18 |
image.res
19 |

Returns an icon through a path or through resources.

20 |

Syntax

21 | image.res(path)
22 | image.res(path, index)
23 | image.res(path, -id)
24 |
25 | image(path)
26 | image(path, index)
27 | image(path, -id)
28 |
29 |
30 |
image.svg, image.svgf
31 |

Returns an svg image via a string or from a file path.

32 |

Syntax

33 | image.svg('<svg viewBox="0 0 100 100"><path fill="red" d="M0 0 L 100 0 L50 34 | 100 Z"/></svg>')
35 | image.svgf(path)
36 |
37 |
38 |
image.rect
39 |

Returns a colored rectangle icon of an optional size.

40 |

Syntax

41 | image.rect(#0000ff)
42 | image.rect(#0000ff, 10)
43 |
44 | 45 |
46 |
image.segoe
47 |

Returns a glyph from "Segoe Fluent Icons" if present then "Segoe MDL2 Assets".

48 |

Syntax

49 | image.segoe(\uxxxx)
50 | image.segoe(\uxxxx, 10)
51 |
52 | 53 |
54 |
image.fluent
55 |

Returns a glyph from "Segoe Fluent Icons" with optional size.

56 |

Syntax

57 | image.fluent(\uxxxx)
58 | image.fluent(\uxxxx, 10)
59 |
60 | 61 |
62 |
image.mdl
63 |

Returns a glyph from "Segoe MDL2 Assets" with optional size.

64 |

Syntax

65 | image.mdl(\uxxxx)
66 | image.mdl(\uxxxx, 10)
67 |
68 | 69 |
70 |
image.default
71 |

72 |

Syntax

73 | image.default 74 |
75 | 76 |
77 |
icon.box
78 |

79 |

Syntax

80 | icon.box([["path to file"], [index]]) 81 |
82 | -------------------------------------------------------------------------------- /docs/functions/ini.html: -------------------------------------------------------------------------------- 1 | 
INI
2 |
3 |

Functions for handling with .ini files.

4 |
5 |
6 |
ini.get
7 |

Returns the value of the key

8 |

Syntax

9 | ini.get('path\to\ini file', "section", "key") 10 |
11 | 12 |
13 |
ini.set
14 |

Set the key value.

15 |

Syntax

16 | ini.set('path\to\ini file', "section", "key", "value") 17 |
-------------------------------------------------------------------------------- /docs/functions/input.html: -------------------------------------------------------------------------------- 1 | 
INPUT
2 |
3 |

The input box allows the user to enter and pass data.

4 |
5 |
6 |
input
7 |

Show the input box with the window title and call parameter passed.
8 | The function returns a non-zero value if the OK button is pressed. Otherwise, it returns zero.

9 |

Syntax

10 | input("Title", "Prompt") 11 |
12 | 13 |
14 |
input.result
15 |

Returns the input value resulting from the input box.

16 |

Syntax

17 | input.result 18 |
19 | -------------------------------------------------------------------------------- /docs/functions/key.html: -------------------------------------------------------------------------------- 1 | 
KEY
2 |

Keyboard functions

3 |
4 |
keys enumerations
5 |
key.alt
 6 | key.apps
 7 | key.back
 8 | key.cancel
 9 | key.capital
10 | key.capslock
11 | key.control
12 | key.delete
13 | key.down
14 | key.end
15 | key.enter
16 | key.escape
17 | key.execute
18 | key.f1
19 | key.f10
20 | key.f11
21 | key.f12
22 | key.f2
23 | key.f3
24 | key.f4
25 | key.f5
26 | key.f6
27 | key.f7
28 | key.f8
29 | key.f9
30 | key.help
31 | key.home
32 | key.insert
33 | key.lalt
34 | key.lcontrol
35 | key.left
36 | key.lshift
37 | key.lwin
38 | key.next
39 | key.none
40 | key.pagedown
41 | key.pageup
42 | key.pause
43 | key.play
44 | key.print
45 | key.printscreen
46 | key.prior
47 | key.ralt
48 | key.rcontrol
49 | key.return
50 | key.right
51 | key.rshift
52 | key.rwin
53 | key.shift
54 | key.snapshot
55 | key.space
56 | key.tab
57 | key.up
58 | key.win
59 |
60 | 61 |
62 |
key
63 |

Syntax

64 |
65 | // check if SHIFT key is pressed
66 | key(key.shift)
67 | 
68 | // or
69 | key == key.shift
70 | 
71 | // or
72 | key.shift()
73 | 
74 | // check if tow keys (SHIFT+CTRL) is pressed
75 | key(key.shift, key.control)
76 | 
77 | // check if keys (SHIFT+CTRL+X) is pressed
78 | key(key.shift, key.control, 87)
79 | 	
80 |
81 | 82 |
83 |
key.send
84 |

Send one or more keys to the current window.

85 |

Syntax

86 |
key.send(key.f5)
87 | key.send(key.ctrl,'n')
88 | key.send(key.shift, key.delete)
89 |
90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /docs/functions/process.html: -------------------------------------------------------------------------------- 1 |
PROCESS
2 |
3 |

4 |
5 |
6 |
Syntax
7 |

 8 | process.handle
 9 | process.name
10 | process.id
11 | process.path
12 | process.is_explorer
13 | process.used
14 | 
15 |
-------------------------------------------------------------------------------- /docs/functions/reg.html: -------------------------------------------------------------------------------- 1 | 
REG
2 |

Registry functions

3 |
4 |
5 |
Registry hive enum
6 |

Syntax

7 |
HKCU
 8 | HKCR
 9 | HKLM
10 | HKU
11 | HKEY_CLASSES_ROOT
12 | HKEY_CURRENT_USER
13 | HKEY_LOCAL_MACHINE
14 | HKEY_USERS
15 | 
16 |
17 |
18 |
Registry value type Enum
19 |

Syntax

20 |
reg.none	// No data type
21 | reg.sz		// REG_SZ
22 | reg.expand	// REG_EXPAND_SZ
23 | reg.binary	// REG_BINARY
24 | reg.multi	// REG_MULTI_SZ
25 | reg.dword	// REG_DWORD
26 | reg.qword	// REG_QWORD
27 |
28 | 29 |
30 |
The function of reading from the Registry.
31 |

Syntax

32 | reg(reg.lm, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion','ProductName')

33 | reg(reg.cr, 'txtfile\DefaultIcon') 34 |
35 | 36 |
37 |
reg.exists
38 |

Check that the key or value name exists

39 |

Syntax

40 |

Check that the key exists

41 | reg.exists('HKCU\Control Panel\Desktop') 42 |

Check that the value name exists

43 | reg.exists('HKCU\Control Panel\Desktop', "WallPaper") 44 |
45 | 46 |
47 |
reg.get
48 |

Read data by value name

49 |

Syntax

50 |
reg('HKCU\Control Panel\Desktop', "WallPaper")
51 | reg.get('HKCU\Control Panel\Desktop', "WallPaper")
52 | reg.get('HKCU\Control Panel\Desktop')
53 |
54 | 55 |
56 |
reg.set
57 |

Allows creating a subkey with the value name and value data

58 |

Syntax

59 |

Create Subkey

60 |
reg.set('HKCU\Software\Nilesoft\Shell')
61 |

Create Subkey with value and set value data type.

62 |
reg.set('HKCU\Software\Nilesoft\Shell', "test-int", 1, reg.dword)
63 | reg.set('HKCU\Software\Nilesoft\Shell', "test-str", 1, reg.sz)
64 | reg.set('HKCU\Software\Nilesoft\Shell', "test-str", 'some string', reg.sz)
65 | 66 |

Set value data with auto type detection.


67 | reg.set('HKCU\Software\Nilesoft\Shell', 'test-auto-int', 1)
68 | reg.set('HKCU\Software\Nilesoft\Shell', 'test-auto-str', 'some string')
69 |
70 | 71 |
72 |
reg.delete
73 |

Allows deleting a subkey or deleting a value

74 |

Syntax

75 |

Delete value name.

76 |
reg.delete('HKCU\Software\Nilesoft\Shell', 'test-auto')
77 |

Delete subkey.

78 |
reg.delete('HKCU\Software\Nilesoft\Shell')
79 |
80 | 81 |
82 |
reg.keys
83 |

Returns all subkey names

84 |

Syntax

85 |
reg.keys('HKCU\Software\Nilesoft\Shell')
86 |
87 |
88 |
reg.values
89 |

Returns all value names

90 |

Syntax

91 |
reg.values('HKCU\Software\Nilesoft\Shell')
92 |
93 | -------------------------------------------------------------------------------- /docs/functions/regex.html: -------------------------------------------------------------------------------- 1 |
REGEX
2 |

regex functions

3 |
4 |
5 |
regex.match
6 |

Returns true if a match exists, false otherwise.

7 |

Syntax

8 |
regex.match(str, pattern)
9 |
10 |
11 |
regex.matches
12 |

Returns an array of strings

13 |

Syntax

14 |
regex.matches(str, pattern)
pre> 15 |
16 |
17 |
regex.replace
18 |

Syntax

19 |
regex.replace(str, pattern, "new str")
20 |
21 | -------------------------------------------------------------------------------- /docs/functions/this.html: -------------------------------------------------------------------------------- 1 |
THIS
2 |
3 |

This namespace contains functions that are used with the current item in the context menu.

4 |
5 |
6 |
Syntax
7 |

 8 | this.type	// Returns the type of the current item [item = 0, menu = 1, separator = 2]
 9 | this.checked	// Returns true if the current item is checked
10 | this.pos	// Returns the position of the current item in the context menu
11 | this.disabled	// Returns true if the current item is disabled
12 | this.sys	// Returns true if the current item is a system item
13 | this.title	// Returns the title of the current item
14 | this.id		// Returns the ID of the current item
15 | this.count	// Returns the number of items in the context menu
16 | this.length	// Returns the length of the current item's title
17 | 
18 |
19 | -------------------------------------------------------------------------------- /docs/functions/user.html: -------------------------------------------------------------------------------- 1 | 
USER
2 |
3 |
4 |
user.name
5 |

Returns the current username.

6 |

Syntax

7 | user.name 8 |
9 | 10 |
11 |
Functions to return the path of user directories
12 |

Syntax

13 |
user.home
14 | user.appdata
15 | user.contacts
16 | user.desktop
17 | user.directory (user.dir)
18 | user.documents
19 | user.documentslibrary
20 | user.downloads
21 | user.favorites
22 | user.libraries
23 | user.localappdata
24 | user.music
25 | user.personal
26 | user.pictures
27 | user.profile
28 | user.quicklaunch
29 | user.sendto
30 | user.startmenu
31 | user.temp
32 | user.templates
33 | user.videos
34 | 
35 |
36 | 37 | -------------------------------------------------------------------------------- /docs/functions/window.html: -------------------------------------------------------------------------------- 1 |
WINDOW, WND
2 |
3 |

4 |
5 |
6 |
Syntax
7 |

 8 | window.is_taskbar	// Returns true if the window handle is for the Taskbar window
 9 | window.is_desktop	// Returns true if the window handle is for the Desktop window
10 | window.is_explorer	// Returns true if the window handle is for the Explorer window
11 | window.is_tree		// Returns true if the window handle is for the Side window
12 | window.is_edit		// Returns true if the window handle is for the Edit menu
13 | window.is_start		// Returns true if the window handle is for the Win+X menu
14 | 
15 | window.send(name, msg, wparam, lparam)	// Search for the window by name and send the specified message
16 | window.post(name, msg, wparam, lparam)	// Search for the window by name and send the specified message without waiting
17 | 
18 | window.send(null, msg, wparam, lparam)	// Send the specified message to current window.
19 | window.post(null, msg, wparam, lparam)	// Send the specified message without waiting to current window.
20 | 
21 | window.command(command)	// Send WM_COMMAND to current window.
22 | window.command(command, name)	// Search for the window by name and send the command to it.
23 | 
24 | window.handle
25 | window.name
26 | window.title
27 | window.owner
28 | window.parent
29 | window.parent.handle
30 | window.parent.name
31 | window.is_contextmenuhandler
32 | 						
33 | 
34 |
-------------------------------------------------------------------------------- /docs/get-started.html: -------------------------------------------------------------------------------- 1 | 

Get Started

2 |
3 |

4 | This tutorial will teach you the basics of Shell.
5 | It is not necessary to have any prior experience. 6 |

7 |

8 | To start using Shell, you need:
9 | A text editor, like Notepad, to write Shell code. 10 |

11 |
Quickstart
12 |

Let's create our first menu item.

13 |

Open the configuration file "shell.nss" and Write the following code and save.

14 | 20 |
21 |
item(title='Hello, World!' cmd=msg('Hello @user.name'))
22 | 
23 |

Don't worry if you don't understand the code above - we will discuss it in detail in later chapters.

24 | 29 |

The result will look something for this when you press the right-click in an empty place on the desktop:

30 |
31 | 32 |
33 |

Congratulations You have now added the first time a menu item to the context menu

34 | -------------------------------------------------------------------------------- /docs/images/config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/config.png -------------------------------------------------------------------------------- /docs/images/copypath1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/copypath1.png -------------------------------------------------------------------------------- /docs/images/copypath2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/copypath2.png -------------------------------------------------------------------------------- /docs/images/copypath3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/copypath3.png -------------------------------------------------------------------------------- /docs/images/dark/goto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/dark/goto.png -------------------------------------------------------------------------------- /docs/images/fav1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/fav1.png -------------------------------------------------------------------------------- /docs/images/fav2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/fav2.png -------------------------------------------------------------------------------- /docs/images/fav3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/fav3.png -------------------------------------------------------------------------------- /docs/images/goto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/goto.png -------------------------------------------------------------------------------- /docs/images/helloworld.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/helloworld.png -------------------------------------------------------------------------------- /docs/images/light/goto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/docs/images/light/goto.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 

Introduction

2 |
3 |
What is Shell?
4 |

5 | Shell is an extension of Windows File Explorer that can be used to create high-performance context menu items. 6 | And gives user a high level of control over context menu of Windows File Explorer. 7 |

8 |

The Right Click Menu or the Context Menu is the menu, which appears when you right-click on the desktop, file, folder or taskbar in Windows. This menu gives you added functionality by offering you actions you can take with the item.

9 |

Shell is all you need to customize or add new items with several functions to Windows File Explorer Context menu and Much More.(cascade menus, advanced menus, multi-level menus, command menus, separator).

10 |
11 | 12 |
13 |
Why Use Shell
14 | 27 | -------------------------------------------------------------------------------- /docs/menu.json: -------------------------------------------------------------------------------- 1 | [ 2 | {"title":"Introduction", "link":"/docs"}, 3 | {"title":"Installation", "link":"/docs/installation"}, 4 | {"title":"Get Started", "link":"/docs/get-started"}, 5 | { 6 | "title":"Configuration", "link":"/docs/configuration", 7 | "items": [ 8 | {"title":"Settings", "link":"/docs/configuration/settings"}, 9 | {"title":"Themes", "link":"/docs/configuration/themes"}, 10 | {"title":"Modify items", "link":"/docs/configuration/modify-items"}, 11 | {"title":"New items", "link":"/docs/configuration/new-items"}, 12 | {"title":"Properties", "link":"/docs/configuration/properties" } 13 | ] 14 | },{ 15 | "title":"Expressions", "link":"/docs/expressions", 16 | "items": [ 17 | {"title":"Comments", "link":"/docs/expressions/comments"}, 18 | {"title":"Variables", "link":"/docs/expressions/variables"}, 19 | {"title":"String literal", "link":"/docs/expressions/string"}, 20 | {"title":"Numeric literal", "link":"/docs/expressions/numeric"}, 21 | {"title":"Color literal", "link":"/docs/expressions/color"}, 22 | {"title":"Operators", "link":"/docs/expressions/operators"}, 23 | {"title":"Identifier", "link":"/docs/expressions/identifier"} 24 | ] 25 | },{ 26 | "title":"Functions", "link":"/docs/functions", 27 | "items": [ 28 | {"title":"app", "link":"/docs/functions/app"}, 29 | {"title":"appx", "link":"/docs/functions/appx"}, 30 | {"title":"color", "link":"/docs/functions/color"}, 31 | {"title":"command", "link":"/docs/functions/command"}, 32 | {"title":"id", "link":"/docs/functions/id"}, 33 | {"title":"image", "link":"/docs/functions/image"}, 34 | {"title":"io", "link":"/docs/functions/io"}, 35 | {"title":"key", "link":"/docs/functions/key"}, 36 | {"title":"msg", "link":"/docs/functions/msg"}, 37 | {"title":"path", "link":"/docs/functions/path"}, 38 | {"title":"process", "link":"/docs/functions/process"}, 39 | {"title":"reg", "link":"/docs/functions/reg"}, 40 | {"title":"sel", "link":"/docs/functions/sel"}, 41 | {"title":"str", "link":"/docs/functions/str"}, 42 | {"title":"sys", "link":"/docs/functions/sys"}, 43 | {"title":"this", "link":"/docs/functions/this"}, 44 | {"title":"user", "link":"/docs/functions/user"}, 45 | {"title":"window", "link":"/docs/functions/window"}, 46 | {"title":"clipboard", "link":"/docs/functions/clipboard"}, 47 | {"title":"input", "link":"/docs/functions/input"}, 48 | {"title":"ini", "link":"/docs/functions/ini"}, 49 | {"title":"regex", "link":"/docs/functions/regex"} 50 | ] 51 | },{ 52 | "title":"Examples", "link":"/docs/examples", 53 | "items": [ 54 | {"title":"Copy path", "link":"/docs/examples/copy-path"}, 55 | {"title":"Favorites", "link":"/docs/examples/favorites"}, 56 | {"title":"Go to", "link":"/docs/examples/goto"} 57 | ] 58 | } 59 | ] -------------------------------------------------------------------------------- /packages/assets/logo-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/packages/assets/logo-128.png -------------------------------------------------------------------------------- /packages/assets/logo-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/packages/assets/logo-256.png -------------------------------------------------------------------------------- /packages/assets/logo-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/packages/assets/logo-32.png -------------------------------------------------------------------------------- /packages/assets/logo-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/packages/assets/logo-512.png -------------------------------------------------------------------------------- /packages/choco/nilesoft-shell.1.8.1.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/packages/choco/nilesoft-shell.1.8.1.nupkg -------------------------------------------------------------------------------- /packages/choco/nilesoft-shell.1.9.10.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/packages/choco/nilesoft-shell.1.9.10.nupkg -------------------------------------------------------------------------------- /packages/choco/nilesoft-shell.1.9.15.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/packages/choco/nilesoft-shell.1.9.15.nupkg -------------------------------------------------------------------------------- /packages/choco/nilesoft-shell.1.9.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/packages/choco/nilesoft-shell.1.9.nupkg -------------------------------------------------------------------------------- /packages/choco/nilesoft-shell.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | nilesoft-shell 5 | 1.9 6 | Nilesoft Shell 7 | Mahmoud Gomaa 8 | Mahmoud Gomaa 9 | https://nilesoft.org 10 | https://cdn.jsdelivr.net/gh/moudey/Shell@main/packages/assets/logo-256.png 11 | 2023 Nilesoft Ltd. 12 | https://raw.githubusercontent.com/moudey/Shell/main/LICENSE 13 | https://github.com/moudey/Shell/tree/main/packages/choco 14 | https://nilesoft.org/docs 15 | context-menu right-click file-explorer shell-extension 16 | Powerful context menu manager for Windows File Explorer. 17 | Shell is a context menu extender that lets you handpick the items to integrate into Windows File Explorer context menu, create custom commands to access all your favorite web pages, files, and folders, and launch any application directly from the context menu. It also provides you a convenient solution to modify or remove any context menu item added by the system or third party software. 18 | Changes in the configuration file structure, making it more flexible, improving performance, fixing some issues, and adding more helper functions make the Explorer more powerful. 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /packages/choco/tools/chocolateyinstall.ps1: -------------------------------------------------------------------------------- 1 | $ErrorActionPreference = 'Stop' # stop on all errors 2 | $url = 'https://nilesoft.org/download/shell/1.9/setup.exe' 3 | $packageArgs = @{ 4 | packageName = $env:ChocolateyPackageName 5 | fileType = 'exe' 6 | url = $url 7 | softwareName = 'Nilesoft Shell' 8 | checksum = '4df2b30fc6b9d6d7c95c7e5070fbeb305c7d1b30ef3c135bb9e2838c10114fb6' 9 | checksumType = 'sha256' 10 | silentArgs = '/VERYSILENT /NORESTART' # Inno Setup 11 | validExitCodes= @(0) 12 | } 13 | Install-ChocolateyPackage @packageArgs -------------------------------------------------------------------------------- /packages/choco/tools/chocolateyuninstall.ps1: -------------------------------------------------------------------------------- 1 | $ErrorActionPreference = 'Stop' # stop on all errors 2 | $packageArgs = @{ 3 | packageName = $env:ChocolateyPackageName 4 | softwareName = 'Nilesoft Shell' 5 | fileType = 'exe' 6 | silentArgs = '/VERYSILENT /NORESTART' # Inno Setup 7 | validExitCodes= @(0) 8 | } 9 | 10 | [array]$key = Get-UninstallRegistryKey -SoftwareName $packageArgs['softwareName'] 11 | 12 | if ($key.Count -eq 1) { 13 | $key | % { 14 | $packageArgs['file'] = "$($_.UninstallString)" 15 | Uninstall-ChocolateyPackage @packageArgs 16 | } 17 | } elseif ($key.Count -eq 0) { 18 | Write-Warning "$packageName has already been uninstalled by other means." 19 | } elseif ($key.Count -gt 1) { 20 | Write-Warning "$($key.Count) matches found!" 21 | Write-Warning "To prevent accidental data loss, no programs will be uninstalled." 22 | Write-Warning "Please alert package maintainer the following keys were matched:" 23 | $key | % {Write-Warning "- $($_.DisplayName)"} 24 | } 25 | -------------------------------------------------------------------------------- /screenshots/acrylic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/acrylic.png -------------------------------------------------------------------------------- /screenshots/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/edit.png -------------------------------------------------------------------------------- /screenshots/file-manage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/file-manage.png -------------------------------------------------------------------------------- /screenshots/folder-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/folder-back.png -------------------------------------------------------------------------------- /screenshots/goto2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/goto2.png -------------------------------------------------------------------------------- /screenshots/gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/gradient.png -------------------------------------------------------------------------------- /screenshots/sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/sel.png -------------------------------------------------------------------------------- /screenshots/taskbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/taskbar.png -------------------------------------------------------------------------------- /screenshots/terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/terminal.png -------------------------------------------------------------------------------- /screenshots/view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/screenshots/view.png -------------------------------------------------------------------------------- /src/3rdparty/detours/Makefile: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | ## 3 | ## Makefile for Detours. 4 | ## 5 | ## Microsoft Research Detours Package 6 | ## 7 | ## Copyright (c) Microsoft Corporation. All rights reserved. 8 | ## 9 | 10 | ROOT = . 11 | !include "$(ROOT)\system.mak" 12 | 13 | all: 14 | cd "$(MAKEDIR)\src" 15 | @$(MAKE) /NOLOGO /$(MAKEFLAGS) 16 | 17 | clean: 18 | cd "$(MAKEDIR)\src" 19 | @$(MAKE) /NOLOGO /$(MAKEFLAGS) clean 20 | 21 | realclean: clean 22 | cd "$(MAKEDIR)\src" 23 | @$(MAKE) /NOLOGO /$(MAKEFLAGS) realclean 24 | 25 | -rmdir /q /s $(BINDS) 2> nul 26 | -rmdir /q /s dist 2> nul 27 | 28 | -del /q /f /s *~ 2>nul 29 | 30 | ################################################################# End of File. 31 | -------------------------------------------------------------------------------- /src/3rdparty/detours/src/Makefile: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | ## 3 | ## Makefile for Detours. 4 | ## 5 | ## Microsoft Research Detours Package, Version 4.0.1 6 | ## 7 | ## Copyright (c) Microsoft Corporation. All rights reserved. 8 | ## 9 | 10 | #DETOURS_DEBUG="debug" 11 | 12 | DETOURS_NAME=detours-$(DETOURS_TARGET_PROCESSOR)$(DETOURS_CONFIG) 13 | ROOT = .. 14 | !include "$(ROOT)\system.mak" 15 | 16 | #######################/####################################################### 17 | ## 18 | CFLAGS=/nologo /W4 /WX /we4777 /we4800 /Zi /MT /Gy /Gm- /Zl /Od /DDETOUR_DEBUG=$(DETOURS_DEBUG) 19 | 20 | CFLAGS=$(CFLAGS) /DWIN32_LEAN_AND_MEAN /D_WIN32_WINNT=0x0601 $(DETOURS_DEFINITION) 21 | 22 | !if defined(DETOURS_ANALYZE) 23 | CFLAGS=$(CFLAGS) /analyze 24 | !endif 25 | 26 | OBJS = \ 27 | $(OBJD)\detours.obj \ 28 | $(OBJD)\disasm.obj \ 29 | 30 | ############################################################################## 31 | ## 32 | .SUFFIXES: .cpp .h .obj 33 | 34 | !ifdef DETOURS_ANALYZE 35 | .cpp{$(OBJD)}.obj: 36 | $(CC) $(CFLAGS) /Fd$(BIND)\$(DETOURS_NAME).pdb /Fo$(OBJD)\ /c $< 37 | !else 38 | .cpp{$(OBJD)}.obj:: 39 | $(CC) $(CFLAGS) /Fd$(BIND)\$(DETOURS_NAME).pdb /Fo$(OBJD)\ /c $< 40 | !endif 41 | 42 | ############################################################################## 43 | 44 | all: dirs \ 45 | $(BIND)\$(DETOURS_NAME).lib \ 46 | $(BIND)\detours.h \ 47 | 48 | ############################################################################## 49 | 50 | clean: 51 | -del *~ 2>nul 52 | -del $(BIND)\$(DETOURS_NAME).pdb $(BIND)\$(DETOURS_NAME).pdb 2>nul 53 | -rmdir /q /s $(OBJD) 2>nul 54 | 55 | realclean: clean 56 | -rmdir /q /s $(OBJDS) 2>nul 57 | 58 | ############################################################################## 59 | 60 | dirs: 61 | @if not exist "$(BIND)" mkdir "$(BIND)" && echo. Created $(BIND) 62 | @if not exist "$(OBJD)" mkdir "$(OBJD)" && echo. Created $(OBJD) 63 | 64 | $(BIND)\$(DETOURS_NAME).lib : $(OBJS) 65 | link /lib /MACHINE:$(DETOURS_TARGET_PROCESSOR) /out:$@ /nologo $(OBJS) 66 | 67 | $(BIND)\detours.h : detours.h 68 | copy detours.h $@ 69 | 70 | $(OBJD)\detours.obj : detours.cpp detours.h 71 | $(OBJD)\disasm.obj : disasm.cpp detours.h 72 | 73 | 74 | ################################################################# End of File. 75 | -------------------------------------------------------------------------------- /src/3rdparty/detours/vc/Detours.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29519.181 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Detours", "Detours.vcxproj", "{37489709-8054-4903-9C49-A79846049FC9}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | DebugMDd|ARM = DebugMDd|ARM 11 | DebugMDd|ARM64 = DebugMDd|ARM64 12 | DebugMDd|x64 = DebugMDd|x64 13 | DebugMDd|x86 = DebugMDd|x86 14 | ReleaseMD|ARM = ReleaseMD|ARM 15 | ReleaseMD|ARM64 = ReleaseMD|ARM64 16 | ReleaseMD|x64 = ReleaseMD|x64 17 | ReleaseMD|x86 = ReleaseMD|x86 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|ARM.ActiveCfg = DebugMDd|ARM 21 | {37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|ARM.Build.0 = DebugMDd|ARM 22 | {37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|ARM64.ActiveCfg = DebugMDd|ARM64 23 | {37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|ARM64.Build.0 = DebugMDd|ARM64 24 | {37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|x64.ActiveCfg = DebugMDd|x64 25 | {37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|x64.Build.0 = DebugMDd|x64 26 | {37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|x86.ActiveCfg = DebugMDd|Win32 27 | {37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|x86.Build.0 = DebugMDd|Win32 28 | {37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|ARM.ActiveCfg = ReleaseMD|ARM 29 | {37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|ARM.Build.0 = ReleaseMD|ARM 30 | {37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|ARM64.ActiveCfg = ReleaseMD|ARM64 31 | {37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|ARM64.Build.0 = ReleaseMD|ARM64 32 | {37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|x64.ActiveCfg = ReleaseMD|x64 33 | {37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|x64.Build.0 = ReleaseMD|x64 34 | {37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|x86.ActiveCfg = ReleaseMD|Win32 35 | {37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|x86.Build.0 = ReleaseMD|Win32 36 | EndGlobalSection 37 | GlobalSection(SolutionProperties) = preSolution 38 | HideSolutionNode = FALSE 39 | EndGlobalSection 40 | GlobalSection(ExtensibilityGlobals) = postSolution 41 | SolutionGuid = {1E71C644-7F30-4025-B1DF-6A4F07A2EDB3} 42 | EndGlobalSection 43 | EndGlobal 44 | -------------------------------------------------------------------------------- /src/3rdparty/plutosvg/plutosvg.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.0.31903.59 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plutosvg", "plutosvg\plutosvg.vcxproj", "{0FB29240-171B-41E9-B255-95BE753D0EB2}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|ARM = Debug|ARM 11 | Debug|ARM64 = Debug|ARM64 12 | Debug|x64 = Debug|x64 13 | Debug|x86 = Debug|x86 14 | Release|ARM = Release|ARM 15 | Release|ARM64 = Release|ARM64 16 | Release|x64 = Release|x64 17 | Release|x86 = Release|x86 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|ARM.ActiveCfg = Debug|ARM 21 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|ARM.Build.0 = Debug|ARM 22 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|ARM64.ActiveCfg = Debug|ARM64 23 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|ARM64.Build.0 = Debug|ARM64 24 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|x64.ActiveCfg = Debug|x64 25 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|x64.Build.0 = Debug|x64 26 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|x86.ActiveCfg = Debug|Win32 27 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|x86.Build.0 = Debug|Win32 28 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|ARM.ActiveCfg = Release|ARM 29 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|ARM.Build.0 = Release|ARM 30 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|ARM64.ActiveCfg = Release|ARM64 31 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|ARM64.Build.0 = Release|ARM64 32 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|x64.ActiveCfg = Release|x64 33 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|x64.Build.0 = Release|x64 34 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|x86.ActiveCfg = Release|Win32 35 | {0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|x86.Build.0 = Release|Win32 36 | EndGlobalSection 37 | GlobalSection(SolutionProperties) = preSolution 38 | HideSolutionNode = FALSE 39 | EndGlobalSection 40 | GlobalSection(ExtensibilityGlobals) = postSolution 41 | SolutionGuid = {2B021D4C-7D18-41AB-BA19-8F6DC4160B22} 42 | EndGlobalSection 43 | EndGlobal 44 | -------------------------------------------------------------------------------- /src/3rdparty/plutosvg/plutosvg/VC-LTL.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 29 | 30 | 31 | 32 | 33 | false 34 | 35 | 36 | 37 | 38 | 39 | $(MSBuildThisFileDirectory) 40 | 41 | 42 | $(ProjectDir)VC-LTL 43 | 44 | 45 | $(SolutionDir)VC-LTL 46 | 47 | 48 | $(ProjectDir)..\VC-LTL 49 | 50 | 51 | $(SolutionDir)..\VC-LTL 52 | 53 | 54 | $(Registry:HKEY_CURRENT_USER\Code\VC-LTL@Root) 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /src/3rdparty/plutosvg/plutosvg/plutosvg.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | Source Files 23 | 24 | 25 | Source Files 26 | 27 | 28 | Source Files 29 | 30 | 31 | Source Files 32 | 33 | 34 | Source Files 35 | 36 | 37 | Source Files 38 | 39 | 40 | Source Files 41 | 42 | 43 | Source Files 44 | 45 | 46 | Source Files 47 | 48 | 49 | Source Files 50 | 51 | 52 | 53 | 54 | Header Files 55 | 56 | 57 | Header Files 58 | 59 | 60 | Header Files 61 | 62 | 63 | Header Files 64 | 65 | 66 | Header Files 67 | 68 | 69 | Header Files 70 | 71 | 72 | Header Files 73 | 74 | 75 | Header Files 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /src/3rdparty/plutosvg/plutosvg/plutosvg.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | false 5 | 6 | -------------------------------------------------------------------------------- /src/3rdparty/plutosvg/plutosvg/source/plutosvg.h: -------------------------------------------------------------------------------- 1 | #ifndef PLUTOSVG_H 2 | #define PLUTOSVG_H 3 | 4 | #include "plutovg.h" 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | /** 11 | * @brief Load the image from a file in memory 12 | * @param data - pointer to the file data in memory 13 | * @param size - size of the data to load, in bytes 14 | * @param font - font to use for text rendering 15 | * @param width - requested width, in pixels 16 | * @param height - requested height, in pixels 17 | * @param dpi - dots per inch to use for units conversion to pixels 18 | * @return pointer to surface object on success, otherwise NULL 19 | */ 20 | plutovg_surface_t* plutosvg_load_from_memory(const char* data, int size, plutovg_font_t* font, int width, int height, double dpi); 21 | 22 | /** 23 | * @brief Load the image from a file on disk 24 | * @param filename - path of the image file to load 25 | * @param font - font to use for text rendering 26 | * @param width - requested width, in pixels 27 | * @param height - requested height, in pixels 28 | * @param dpi - dots per inch to use for units conversion to pixels 29 | * @return pointer to surface object on success, otherwise NULL 30 | */ 31 | plutovg_surface_t* plutosvg_load_from_file(const char* filename, plutovg_font_t* font, int width, int height, double dpi); 32 | 33 | /** 34 | * @brief Get image dimensions from a file in memory 35 | * @param data - pointer to the file data in memory 36 | * @param size - size of the data to load, in bytes 37 | * @param font - font to use for text rendering 38 | * @param width - width of the image, in pixels 39 | * @param height - height of the image, in pixels 40 | * @param dpi - dots per inch to use for units conversion to pixels 41 | * @return true on success, otherwise false 42 | */ 43 | int plutosvg_dimensions_from_memory(const char* data, int size, plutovg_font_t* font, int* width, int* height, double dpi); 44 | 45 | /** 46 | * @brief Get image dimensions from a file on disk 47 | * @param filename - path of the image file to load 48 | * @param font - font to use for text rendering 49 | * @param width - width of the image, in pixels 50 | * @param height - height of the image, in pixels 51 | * @param dpi - dots per inch to use for units conversion to pixels 52 | * @return true on success, otherwise false 53 | */ 54 | int plutosvg_dimensions_from_file(const char* filename, plutovg_font_t* font, int* width, int* height, double dpi); 55 | 56 | #ifdef __cplusplus 57 | } 58 | #endif 59 | 60 | #endif // PLUTOSVG_H 61 | -------------------------------------------------------------------------------- /src/3rdparty/plutosvg/plutosvg/source/plutovg-dash.c: -------------------------------------------------------------------------------- 1 | #include "plutovg-private.h" 2 | 3 | #include 4 | 5 | plutovg_dash_t* plutovg_dash_create(double offset, const double* data, int size) 6 | { 7 | if(data == NULL || size == 0) 8 | return NULL; 9 | 10 | plutovg_dash_t* dash = malloc(sizeof(plutovg_dash_t)); 11 | dash->offset = offset; 12 | dash->data = malloc((size_t)size * sizeof(double)); 13 | dash->size = size; 14 | memcpy(dash->data, data, (size_t)size * sizeof(double)); 15 | return dash; 16 | } 17 | 18 | plutovg_dash_t* plutovg_dash_clone(const plutovg_dash_t* dash) 19 | { 20 | if(dash == NULL) 21 | return NULL; 22 | 23 | return plutovg_dash_create(dash->offset, dash->data, dash->size); 24 | } 25 | 26 | void plutovg_dash_destroy(plutovg_dash_t* dash) 27 | { 28 | if(dash == NULL) 29 | return; 30 | 31 | free(dash->data); 32 | free(dash); 33 | } 34 | 35 | plutovg_path_t* plutovg_dash_path(const plutovg_dash_t* dash, const plutovg_path_t* path) 36 | { 37 | plutovg_path_t* flat = plutovg_path_clone_flat(path); 38 | plutovg_path_t* result = plutovg_path_create(); 39 | 40 | plutovg_array_ensure(result->elements, flat->elements.size); 41 | plutovg_array_ensure(result->points, flat->points.size); 42 | 43 | int toggle = 1; 44 | int offset = 0; 45 | double phase = dash->offset; 46 | while(phase >= dash->data[offset]) 47 | { 48 | toggle = !toggle; 49 | phase -= dash->data[offset]; 50 | offset += 1; 51 | if(offset == dash->size) offset = 0; 52 | } 53 | 54 | plutovg_path_element_t* elements = flat->elements.data; 55 | plutovg_path_element_t* end = elements + flat->elements.size; 56 | plutovg_point_t* points = flat->points.data; 57 | while(elements < end) 58 | { 59 | int itoggle = toggle; 60 | int ioffset = offset; 61 | double iphase = phase; 62 | 63 | double x0 = points->x; 64 | double y0 = points->y; 65 | 66 | if(itoggle) 67 | plutovg_path_move_to(result, x0, y0); 68 | 69 | ++elements; 70 | ++points; 71 | 72 | while(elements < end && *elements == plutovg_path_element_line_to) 73 | { 74 | double dx = points->x - x0; 75 | double dy = points->y - y0; 76 | double dist0 = sqrt(dx*dx + dy*dy); 77 | double dist1 = 0; 78 | while(dist0 - dist1 > dash->data[ioffset] - iphase) 79 | { 80 | dist1 += dash->data[ioffset] - iphase; 81 | double a = dist1 / dist0; 82 | double x = x0 + a * dx; 83 | double y = y0 + a * dy; 84 | 85 | if(itoggle) 86 | plutovg_path_line_to(result, x, y); 87 | else 88 | plutovg_path_move_to(result, x, y); 89 | 90 | itoggle = !itoggle; 91 | iphase = 0; 92 | ioffset += 1; 93 | if(ioffset == dash->size) ioffset = 0; 94 | } 95 | 96 | iphase += dist0 - dist1; 97 | 98 | x0 = points->x; 99 | y0 = points->y; 100 | 101 | if(itoggle) 102 | plutovg_path_line_to(result, x0, y0); 103 | 104 | ++elements; 105 | ++points; 106 | } 107 | } 108 | 109 | plutovg_path_destroy(flat); 110 | return result; 111 | } 112 | -------------------------------------------------------------------------------- /src/Shell.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.1.32319.34 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shared", "shared\shared.vcxitems", "{096F9029-DBBB-4CB7-A0C5-615007DCA000}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dll", "dll\Shell.vcxproj", "{BAF011AC-D5E9-42C5-BA26-BA6115A45DAC}" 9 | EndProject 10 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exe", "exe\exe.vcxproj", "{FFFD0DDB-48FB-4681-A3B6-8E787FA98C98}" 11 | EndProject 12 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ca", "setup\ca\ca.vcxproj", "{F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}" 13 | EndProject 14 | Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "setup", "setup\wix\setup.wixproj", "{F8A8D368-F53D-4EA1-9E17-404DA0CC89CD}" 15 | ProjectSection(ProjectDependencies) = postProject 16 | {BAF011AC-D5E9-42C5-BA26-BA6115A45DAC} = {BAF011AC-D5E9-42C5-BA26-BA6115A45DAC} 17 | {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981} = {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981} 18 | {FFFD0DDB-48FB-4681-A3B6-8E787FA98C98} = {FFFD0DDB-48FB-4681-A3B6-8E787FA98C98} 19 | EndProjectSection 20 | EndProject 21 | Global 22 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 23 | release|ARM64 = release|ARM64 24 | release|x64 = release|x64 25 | release|x86 = release|x86 26 | EndGlobalSection 27 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 28 | {BAF011AC-D5E9-42C5-BA26-BA6115A45DAC}.release|ARM64.ActiveCfg = release|ARM64 29 | {BAF011AC-D5E9-42C5-BA26-BA6115A45DAC}.release|ARM64.Build.0 = release|ARM64 30 | {BAF011AC-D5E9-42C5-BA26-BA6115A45DAC}.release|x64.ActiveCfg = release|x64 31 | {BAF011AC-D5E9-42C5-BA26-BA6115A45DAC}.release|x64.Build.0 = release|x64 32 | {BAF011AC-D5E9-42C5-BA26-BA6115A45DAC}.release|x86.ActiveCfg = release|Win32 33 | {BAF011AC-D5E9-42C5-BA26-BA6115A45DAC}.release|x86.Build.0 = release|Win32 34 | {FFFD0DDB-48FB-4681-A3B6-8E787FA98C98}.release|ARM64.ActiveCfg = release|ARM64 35 | {FFFD0DDB-48FB-4681-A3B6-8E787FA98C98}.release|ARM64.Build.0 = release|ARM64 36 | {FFFD0DDB-48FB-4681-A3B6-8E787FA98C98}.release|x64.ActiveCfg = release|x64 37 | {FFFD0DDB-48FB-4681-A3B6-8E787FA98C98}.release|x64.Build.0 = release|x64 38 | {FFFD0DDB-48FB-4681-A3B6-8E787FA98C98}.release|x86.ActiveCfg = release|Win32 39 | {FFFD0DDB-48FB-4681-A3B6-8E787FA98C98}.release|x86.Build.0 = release|Win32 40 | {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.release|ARM64.ActiveCfg = release|ARM64 41 | {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.release|ARM64.Build.0 = release|ARM64 42 | {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.release|x64.ActiveCfg = release|x64 43 | {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.release|x64.Build.0 = release|x64 44 | {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.release|x86.ActiveCfg = release|Win32 45 | {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981}.release|x86.Build.0 = release|Win32 46 | {F8A8D368-F53D-4EA1-9E17-404DA0CC89CD}.release|ARM64.ActiveCfg = Release|ARM64 47 | {F8A8D368-F53D-4EA1-9E17-404DA0CC89CD}.release|ARM64.Build.0 = Release|ARM64 48 | {F8A8D368-F53D-4EA1-9E17-404DA0CC89CD}.release|x64.ActiveCfg = Release|x64 49 | {F8A8D368-F53D-4EA1-9E17-404DA0CC89CD}.release|x64.Build.0 = Release|x64 50 | {F8A8D368-F53D-4EA1-9E17-404DA0CC89CD}.release|x86.ActiveCfg = Release|x86 51 | {F8A8D368-F53D-4EA1-9E17-404DA0CC89CD}.release|x86.Build.0 = Release|x86 52 | EndGlobalSection 53 | GlobalSection(SolutionProperties) = preSolution 54 | HideSolutionNode = FALSE 55 | EndGlobalSection 56 | GlobalSection(ExtensibilityGlobals) = postSolution 57 | SolutionGuid = {EE8CC431-4AA1-4CF6-B3CE-AD27E8B980E8} 58 | EndGlobalSection 59 | GlobalSection(SharedMSBuildProjectFiles) = preSolution 60 | shared\shared.vcxitems*{096f9029-dbbb-4cb7-a0c5-615007dca000}*SharedItemsImports = 9 61 | shared\shared.vcxitems*{baf011ac-d5e9-42c5-ba26-ba6115a45dac}*SharedItemsImports = 4 62 | shared\shared.vcxitems*{fffd0ddb-48fb-4681-a3b6-8e787fa98c98}*SharedItemsImports = 4 63 | EndGlobalSection 64 | EndGlobal 65 | -------------------------------------------------------------------------------- /src/bin/imports/develop.nss: -------------------------------------------------------------------------------- 1 | menu(mode="multiple" title=loc.develop sep=sep.bottom image=\uE26E) 2 | { 3 | menu(mode="single" title=loc.editors image=\uE17A) 4 | { 5 | item(title='Visual Studio Code' image=[\uE272, #22A7F2] cmd='code' args='"@sel.path"') 6 | separator 7 | item(type='file' mode="single" title=loc.windows_notepad image cmd='@sys.bin\notepad.exe' args='"@sel.path"') 8 | } 9 | 10 | menu(mode="multiple" title='dotnet' image=\uE143) 11 | { 12 | item(title='run' cmd-line='/K dotnet run' image=\uE149) 13 | item(title='watch' cmd-line='/K dotnet watch') 14 | item(title='clean' image=\uE0CE cmd-line='/K dotnet clean') 15 | separator 16 | item(title='build debug' cmd-line='/K dotnet build') 17 | item(title='build release' cmd-line='/K dotnet build -c release /p:DebugType=None') 18 | 19 | menu(mode="multiple" sep="both" title='publish' image=\ue11f) 20 | { 21 | $publish='dotnet publish -r win-x64 -c release --output publish /*/p:CopyOutputSymbolsToPublishDirectory=false*/' 22 | item(title='publish sinale file' sep="after" cmd-line='/K @publish --no-self-contained /p:PublishSingleFile=true') 23 | item(title='framework-dependent deployment' cmd-line='/K @publish') 24 | item(title='framework-dependent executable' cmd-line='/K @publish --self-contained false') 25 | item(title='self-contained deployment' cmd-line='/K @publish --self-contained true') 26 | item(title='single-file' cmd-line='/K @publish /p:PublishSingleFile=true /p:PublishTrimmed=false') 27 | item(title='single-file-trimmed' cmd-line='/K @publish /p:PublishSingleFile=true /p:PublishTrimmed=true') 28 | } 29 | 30 | item(title='ef migrations add InitialCreate' cmd-line='/K dotnet ef migrations add InitialCreate') 31 | item(title='ef database update' cmd-line='/K dotnet ef database update') 32 | separator 33 | item(title='help' image=\uE136 cmd-line='/k dotnet -h') 34 | item(title='version' cmd-line='/k dotnet --info') 35 | } 36 | 37 | item(type="file" title="reshack" sep="top" image cmd='D:\config\Programs\dev\petools\resource\reshack\reshack.exe' args=sel(1)) 38 | item(type="file" title="peview" image cmd='D:\config\Programs\dev\petools\peview.exe' args=sel(1)) 39 | 40 | item(type="dir|dir.back" title="Web server" vis=key.shift() cmd='D:\config\Programs\dev\web\HTTPServer\WebServer.exe' args='-open -path:"@sel.path"') 41 | } -------------------------------------------------------------------------------- /src/bin/imports/goto.nss: -------------------------------------------------------------------------------- 1 | menu(type='*' where=window.is_taskbar||sel.count mode=mode.multiple title=title.go_to sep=sep.both image=\uE14A) 2 | { 3 | menu(title=loc.folder image=\uE1F4) 4 | { 5 | item(title='Windows' image=inherit cmd=sys.dir) 6 | item(title='System' image=inherit cmd=sys.bin) 7 | item(title='Program Files' image=inherit cmd=sys.prog) 8 | item(title='Program Files x86' image=inherit cmd=sys.prog32) 9 | item(title='ProgramData' image=inherit cmd=sys.programdata) 10 | item(title='Applications' image=inherit cmd='shell:appsfolder') 11 | item(title='Users' image=inherit cmd=sys.users) 12 | separator 13 | //item(title='@user.name@@@sys.name' vis=label) 14 | item(title='Desktop' image=inherit cmd=user.desktop) 15 | item(title='Downloads' image=inherit cmd=user.downloads) 16 | item(title='Pictures' image=inherit cmd=user.pictures) 17 | item(title='Documents' image=inherit cmd=user.documents) 18 | item(title='Startmenu' image=inherit cmd=user.startmenu) 19 | item(title='Profile' image=inherit cmd=user.dir) 20 | item(title='AppData' image=inherit cmd=user.appdata) 21 | item(title='Temp' image=inherit cmd=user.temp) 22 | } 23 | item(title=title.control_panel image=\uE0F3 cmd='shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}') 24 | item(title=loc.all_control_panel_items image=\uE0F3 cmd='shell:::{ED7BA470-8E54-465E-825C-99712043E01C}') 25 | item(title=title.run image=\uE14B cmd='shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}') 26 | menu(where=sys.ver.major >= 10 title=title.settings sep=sep.before image=\uE0F3) 27 | { 28 | // https://docs.microsoft.com/en-us/windows/uwp/launch-resume/launch-settings-app 29 | item(title=loc.system image=inherit cmd='ms-settings:') 30 | item(title=loc.about image=inherit cmd='ms-settings:about') 31 | item(title=loc.your_info image=inherit cmd='ms-settings:yourinfo') 32 | item(title=loc.system_info image=inherit cmd-line='/K systeminfo') 33 | item(title=loc.search cmd='search-ms:' image=inherit) 34 | item(title=loc.usb image=inherit cmd='ms-settings:usb') 35 | item(title=loc.windows_update image=inherit cmd='ms-settings:windowsupdate') 36 | item(title=loc.windows_defender image=inherit cmd='ms-settings:windowsdefender') 37 | menu(title=loc.apps image=inherit) 38 | { 39 | item(title=loc.apps_features image=inherit cmd='ms-settings:appsfeatures') 40 | item(title=loc.default_apps image=inherit cmd='ms-settings:defaultapps') 41 | item(title=loc.optional_features image=inherit cmd='ms-settings:optionalfeatures') 42 | item(title=loc.startup image=inherit cmd='ms-settings:startupapps') 43 | } 44 | menu(title=loc.personalization image=inherit) 45 | { 46 | item(title=loc.personalization image=inherit cmd='ms-settings:personalization') 47 | item(title=loc.lockscreen image=inherit cmd='ms-settings:lockscreen') 48 | item(title=loc.background image=inherit cmd='ms-settings:personalization-background') 49 | item(title=loc.colors image=inherit cmd='ms-settings:colors') 50 | item(title=loc.themes image=inherit cmd='ms-settings:themes') 51 | item(title=loc.start image=inherit cmd='ms-settings:personalization-start') 52 | item(title=loc.taskbar image=inherit cmd='ms-settings:taskbar') 53 | } 54 | menu(title=loc.network image=inherit) 55 | { 56 | item(title=loc.status image=inherit cmd='ms-settings:network-status') 57 | item(title=loc.ethernet image=inherit cmd='ms-settings:network-ethernet') 58 | item(title=loc.wifi image=inherit cmd='ms-settings:network-wifi') 59 | item(title=loc.connections image=inherit cmd='shell:::{7007ACC7-3202-11D1-AAD2-00805FC1270E}') 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /src/bin/imports/lang/ar.nss: -------------------------------------------------------------------------------- 1 | /* 2 | Arabic 3 | by: github.com/moudey 4 | */ 5 | 6 | // shell.nss 7 | pin_unpin="Pin/Unpin" 8 | 9 | // develop.nss 10 | develop="تطوير" 11 | editors="محررات" 12 | windows_notepad="مفكرة الويندوز" 13 | 14 | // file-manage.nss 15 | file_manage="ادارة الملفات" 16 | change_extension="تغير الملحقات" 17 | take_ownership="Take ownership" 18 | show_hide="اظهار/اخفاء" 19 | system_files="ملفات النظام" 20 | file_name_extensions="File name extensions" 21 | attributes="السمات" 22 | register_server="Register Server" 23 | register="تسجيل" 24 | unregister="الغاء التسجيل" 25 | hidden="اخفاء" 26 | system="النظام" 27 | readonly="قراءة فقط" 28 | archive="ارشيف" 29 | created="Created" 30 | modified="Modified" 31 | accessed="Accessed" 32 | new_folder="مجلد جديد" 33 | new_file="ملف جديد" 34 | datetime="تاريخ ووقت" 35 | guid="Guid" 36 | 37 | // goto.nss 38 | all_control_panel_items="جميع عناصر لوحة التحكم" 39 | 40 | // taskbar.nss 41 | apps="تطبيقات" 42 | paint="الرسام" 43 | edge="Edge" 44 | calculator="الحاسبة" 45 | -------------------------------------------------------------------------------- /src/bin/imports/lang/de-DE.nss: -------------------------------------------------------------------------------- 1 | /* 2 | German 3 | by: github.com/akaydev-coder 4 | */ 5 | 6 | xxx="Begrüßung auf Deutsch" 7 | // shell.nss 8 | pin_unpin="Anpinnen/Lösen" 9 | 10 | // develop.nss 11 | develop="&Entwickeln" 12 | editors="Herausgeber" 13 | windows_notepad="Windows-Notpad" 14 | 15 | // file-manage.nss 16 | file_manage="Dateiverwaltung" 17 | all="Alle" 18 | invert="Umkehren" 19 | none="Keiner" 20 | change_extension="Erweiterung ändern" 21 | take_ownership="Eigentümer ändern" 22 | show_hide="Ein-/Ausblenden" 23 | system_files="Systemdateien" 24 | file_name_extensions="Dateinamenerweiterungen" 25 | attributes="Attribute" 26 | register_server="DLL-Server Registrieren" 27 | register="Registrieren" 28 | unregister="de-Registrieren" 29 | hidden="Versteckt" 30 | system="System" 31 | readonly="Schreibgeschützt" 32 | archive="Archiv" 33 | created="Erstellt" 34 | modified="Geändert" 35 | accessed="Zugegriffen" 36 | new_folder="Neuer Ordner" 37 | new_file="Neue Datei" 38 | datetime="Datum/Uhrzeit" 39 | guid="GUID" 40 | 41 | // goto.nss 42 | folder="Ordner" 43 | all_control_panel_items="Alle Elemente der Systemsteuerung" 44 | system="System" 45 | about="Über" 46 | your_info="Ihre Infos" 47 | system_info="Systeminformationen" 48 | search="Suchen" 49 | usb="USB" 50 | windows_update="Windows-Update" 51 | windows_defender="Windows Defender" 52 | apps="Apps" 53 | apps_features="Apps-Features" 54 | default_apps="Standard-Apps" 55 | optional_features="Optionale Features" 56 | startup="Start-up" 57 | personalization="Personalisierung" 58 | lockscreen="Sperrbildschirm" 59 | background="Hintergrund" 60 | colors="Farben" 61 | themes="Themen" 62 | start="Start" 63 | taskbar="Taskleiste" 64 | network="Netzwerk" 65 | status="Status" 66 | ethernet="Ethernet" 67 | wifi="WLAN" 68 | connections="Verbindungen" 69 | 70 | 71 | // taskbar.nss 72 | apps="Apps" 73 | paint="Paint" 74 | edge="Edge" 75 | calculator="Taschenrechner" 76 | cascade_windows="Fenster Kaskadenieren" 77 | Show_windows_stacked="Fenster gestapelt anzeigen" 78 | Show_windows_side_by_side="Fenster nebeneinander anzeigen" 79 | minimize_all_windows="Minimieren Sie alle Fenster" 80 | restore_all_windows="Alle Fenster wiederherstellen" 81 | task_manager="Task-Manager" 82 | taskbar_Settings="Taskleisteneinstellungen" 83 | -------------------------------------------------------------------------------- /src/bin/imports/lang/en.nss: -------------------------------------------------------------------------------- 1 | /* 2 | English 3 | by: github.com/moudey 4 | */ 5 | 6 | xxx="Welcome in english" 7 | // shell.nss 8 | pin_unpin="Pin/Unpin" 9 | 10 | // develop.nss 11 | develop="&Develop" 12 | editors="editors" 13 | windows_notepad="Windows notepad" 14 | 15 | // file-manage.nss 16 | file_manage="File manage" 17 | copy_multiple_paths='Copy (@sel.count) items selected' 18 | all="All" 19 | invert="Invert" 20 | none="None" 21 | change_extension="Change extension" 22 | take_ownership="Take ownership" 23 | show_hide="Show/Hide" 24 | system_files="System files" 25 | file_name_extensions="File name extensions" 26 | attributes="Attributes" 27 | register_server="Register Server" 28 | register="Register" 29 | unregister="Unregister" 30 | hidden="Hidden" 31 | system="System" 32 | readonly="Read-Only" 33 | archive="Archive" 34 | created="Created" 35 | modified="Modified" 36 | accessed="Accessed" 37 | new_folder="New Folder" 38 | new_file="New File" 39 | datetime="DateTime" 40 | guid="Guid" 41 | 42 | // goto.nss 43 | folder="Folder" 44 | all_control_panel_items="All Control Panel Items" 45 | system="System" 46 | about="About" 47 | your_info="Your Info" 48 | system_info="System Info" 49 | search="Search" 50 | usb="USB" 51 | windows_update="Windows Update" 52 | windows_defender="Windows Defender" 53 | apps="Apps" 54 | apps_features="Apps Features" 55 | default_apps="Default Apps" 56 | optional_features="Optional Features" 57 | startup="Startup" 58 | personalization="Personalization" 59 | lockscreen="Lockscreen" 60 | background="Background" 61 | colors="Colors" 62 | themes="Themes" 63 | start="Start" 64 | taskbar="Taskbar" 65 | network="Network" 66 | status="Status" 67 | ethernet="Ethernet" 68 | wifi="WLAN" 69 | connections="Connections" 70 | 71 | 72 | // taskbar.nss 73 | apps="Apps" 74 | paint="Paint" 75 | edge="Edge" 76 | calculator="Calculator" 77 | windows="windows" 78 | cascade_windows="Cascade windows" 79 | Show_windows_stacked="Show windows stacked" 80 | Show_windows_side_by_side="Show windows side by side" 81 | minimize_all_windows="Minimize all windows" 82 | restore_all_windows="Restore all windows" 83 | task_manager="Task Manager" 84 | taskbar_Settings="Taskbar Settings" 85 | -------------------------------------------------------------------------------- /src/bin/imports/lang/ko.nss: -------------------------------------------------------------------------------- 1 | /* 2 | Korean 3 | by: github.com/moudey 4 | */ 5 | 6 | xxx="한국어 번역 - 비너스걸" 7 | // shell.nss 8 | pin_unpin="고정/고정 해제" 9 | 10 | // develop.nss 11 | develop="개발(&D)" 12 | editors="편집기" 13 | windows_notepad="Windows 메모장" 14 | 15 | // file-manage.nss 16 | file_manage="파일 관리" 17 | copy_multiple_paths='선택한 항목 복사 (@sel.count)' 18 | all="모두" 19 | invert="반전" 20 | none="없음" 21 | change_extension="확장자 변경" 22 | take_ownership="소유권 확보" 23 | show_hide="표시/숨기기" 24 | system_files="시스템 파일" 25 | file_name_extensions="파일 이름 확장자" 26 | attributes="속성" 27 | register_server="서버 등록" 28 | register="등록" 29 | unregister="등록 해제" 30 | hidden="숨기기" 31 | system="시스템" 32 | readonly="읽기 전용" 33 | archive="보관" 34 | created="만든 날짜" 35 | modified="수정 날짜" 36 | accessed="접근 날짜" 37 | new_folder="새 폴더" 38 | new_file="새 파일" 39 | datetime="날짜 시간" 40 | guid="Guid" 41 | 42 | // goto.nss 43 | folder="폴더" 44 | all_control_panel_items="모든 제어판 항목" 45 | system="시스템" 46 | about="정보" 47 | your_info="사용자 정보" 48 | system_info="시스템 정보" 49 | search="검색" 50 | usb="USB" 51 | windows_update="Windows 업데이트" 52 | windows_defender="Windows Defender" 53 | apps="앱" 54 | apps_features="앱 기능" 55 | default_apps="기본 앱" 56 | optional_features="선택적 기능" 57 | startup="시작" 58 | personalization="개인 설정" 59 | lockscreen="화면 잠금" 60 | background="배경" 61 | colors="색상" 62 | themes="테마" 63 | start="시작" 64 | taskbar="작업 표시줄" 65 | network="네트워크" 66 | status="상태" 67 | ethernet="이더넷" 68 | wifi="WLAN" 69 | connections="연결" 70 | 71 | 72 | // taskbar.nss 73 | apps="앱" 74 | paint="그림판" 75 | edge="Edge" 76 | calculator="계산기" 77 | windows="창" 78 | cascade_windows="계단식 창" 79 | Show_windows_stacked="겹쳐진 창 표시" 80 | Show_windows_side_by_side="창을 나란히 표시" 81 | minimize_all_windows="모든 창 최소화" 82 | restore_all_windows="모든 창 복원" 83 | task_manager="작업 관리자" 84 | taskbar_Settings="작업 관리자 설정" 85 | -------------------------------------------------------------------------------- /src/bin/imports/lang/no.nss: -------------------------------------------------------------------------------- 1 | /* 2 | Norwegian 3 | by: https://github.com/Vatnar 4 | */ 5 | 6 | xxx="Velkommen på norsk" 7 | // shell.nss 8 | pin_unpin="Fest/Løsne" 9 | 10 | // develop.nss 11 | develop="&Utvikle" 12 | editors="editorer" 13 | windows_notepad="Windows notepad" 14 | 15 | // file-manage.nss 16 | file_manage="Administrer fil" 17 | all="Alle" 18 | invert="Inverter" 19 | none="Ingen" 20 | change_extension="Endre filtype" 21 | take_ownership="Ta eierskap" 22 | show_hide="Vis/Skjul" 23 | system_files="Systemfiler" 24 | file_name_extensions="Filtypenavn" 25 | attributes="Attributter" 26 | register_server="Registrer Server" 27 | register="Registrer" 28 | unregister="Avregistrer" 29 | hidden="Skjult" 30 | system="System" 31 | readonly="Skrivebeskyttet" 32 | archive="Arkiv" 33 | created="Skapt" 34 | modified="Endret" 35 | accessed="Aksessert" 36 | new_folder="Ny Mappe" 37 | new_file="Ny Fil" 38 | datetime="tidsdato" 39 | guid="Guid" 40 | 41 | // goto.nss 42 | folder="Mappe" 43 | all_control_panel_items="Alle kontrollpanelelementer" 44 | system="System" 45 | about="Om" 46 | your_info="Infoen din" 47 | system_info="Systeminfo" 48 | search="Søk" 49 | usb="USB" 50 | windows_update="Windows Update" 51 | windows_defender="Windows Defender" 52 | apps="Apper" 53 | apps_features="Apper og funksjoner" 54 | default_apps="Standardapper" 55 | optional_features="Valgfrie funksjoner" 56 | startup="Oppstart" 57 | personalization="Personalisering" 58 | lockscreen="Låseskjerm" 59 | background="Bakgrunn" 60 | colors="Farger" 61 | themes="Temaer" 62 | start="Start" 63 | taskbar="Oppgavelinje" 64 | network="Nettverk" 65 | status="Status" 66 | ethernet="Ethernet" 67 | wifi="WLAN" 68 | connections="Tilkoblinger" 69 | 70 | 71 | // taskbar.nss 72 | apps="Apper" 73 | paint="Paint" 74 | edge="Edge" 75 | calculator="Kalkulator" 76 | cascade_windows="Kaskadér vinduer" 77 | Show_windows_stacked="Vis vinduer stablet" 78 | Show_windows_side_by_side="Vis vinduer side om side" 79 | minimize_all_windows="Minimer alle vinduer" 80 | restore_all_windows="Gjenopprett alle vinduer" 81 | task_manager="Oppgavebehandling" 82 | taskbar_Settings="Alternativer for oppgavelinjen" 83 | -------------------------------------------------------------------------------- /src/bin/imports/lang/pt-BR.nss: -------------------------------------------------------------------------------- 1 | /* 2 | Português do Brasil 3 | by: github.com/marciozomb13 4 | */ 5 | 6 | xxx="Bem-vindo" 7 | // shell.nss 8 | pin_unpin="Fixar/Desafixar" 9 | 10 | // develop.nss 11 | develop="&Desenvolvimento" 12 | editors="Editores" 13 | windows_notepad="Bloco de Notas" 14 | 15 | // file-manage.nss 16 | file_manage="Gerenciamento de arquivos" 17 | all="Todos" 18 | invert="Inverter" 19 | none="Nenhum" 20 | change_extension="Alterar extensão" 21 | take_ownership="Obter propriedade" 22 | show_hide="Mostrar/Ocultar" 23 | system_files="Arquivos de sistema" 24 | file_name_extensions="Extensões de arquivos" 25 | attributes="Atributos" 26 | register_server="Servidor de Registro" 27 | register="Registrar" 28 | unregister="Remover registro" 29 | hidden="Oculto" 30 | system="Sistema" 31 | readonly="Somente leitura" 32 | archive="Arquivo compactado" 33 | created="Criado" 34 | modified="Modificado" 35 | accessed="Acessado" 36 | new_folder="Nova Pasta" 37 | new_file="Novo Arquivo" 38 | datetime="Data/Hora" 39 | guid="GUID" 40 | 41 | // goto.nss 42 | folder="Pasta" 43 | all_control_panel_items="Todos os Itens do Painel de Controle" 44 | system="Sistema" 45 | about="Sobre" 46 | your_info="Suas informações" 47 | system_info="Informações do sistema" 48 | search="Pesquisa" 49 | usb="USB" 50 | windows_update="Windows Update" 51 | windows_defender="Segurança do Windows" 52 | apps="Aplicativos" 53 | apps_features="Aplicativos instalados" 54 | default_apps="Aplicativos padrão" 55 | optional_features="Recursos opcionais" 56 | startup="Inicialização" 57 | personalization="Personalização" 58 | lockscreen="Tela de bloqueio" 59 | background="Tela de fundo" 60 | colors="Cores" 61 | themes="Temas" 62 | start="Iniciar" 63 | taskbar="Barra de Tarefas" 64 | network="Rede e internet" 65 | status="Status" 66 | ethernet="Ethernet" 67 | wifi="WLAN" 68 | connections="Conexões de rede" 69 | 70 | 71 | // taskbar.nss 72 | apps="Apps" 73 | paint="Paint" 74 | edge="Edge" 75 | calculator="Calculadora" 76 | cascade_windows="Janelas em cascata" 77 | Show_windows_stacked="Mostrar janelas em empilhadas" 78 | Show_windows_side_by_side="Mostrar janelas lado a lado" 79 | minimize_all_windows="Minimizar todas as janelas" 80 | restore_all_windows="Restaurar todas as janelas" 81 | task_manager="Gerenciador de Tarefas" 82 | taskbar_Settings="Configurações da Barra de Tarefas" 83 | -------------------------------------------------------------------------------- /src/bin/imports/lang/zh-CN.nss: -------------------------------------------------------------------------------- 1 | /* 2 | Simplified Chinese 3 | by: github.com/JohnsonRan 4 | github.com/XY0797 5 | */ 6 | 7 | xxx="欢迎用中文" 8 | // shell.nss 9 | pin_unpin="固定/取消固定" 10 | 11 | // develop.nss 12 | develop="开发" 13 | editors="编辑器" 14 | windows_notepad="Windows 记事本" 15 | 16 | // file-manage.nss 17 | file_manage="文件管理" 18 | copy_multiple_paths='复制选中的 (@sel.count) 个项目' 19 | all="全选" 20 | invert="反选" 21 | none="全不选" 22 | change_extension="更改扩展名" 23 | take_ownership="更改所有权" 24 | show_hide="显示/隐藏" 25 | system_files="系统文件" 26 | file_name_extensions="文件扩展名" 27 | attributes="属性" 28 | register_server="注册服务" 29 | register="注册" 30 | unregister="取消注册" 31 | hidden="隐藏" 32 | system="系统" 33 | readonly="只读" 34 | archive="存档" 35 | created="创建时间" 36 | modified="修改时间" 37 | accessed="访问时间" 38 | new_folder="新建文件夹" 39 | new_file="新建文件" 40 | datetime="当前时间" 41 | guid="Guid" 42 | 43 | // goto.nss 44 | folder="文件夹" 45 | all_control_panel_items="所有控制面板项" 46 | system="系统" 47 | about="系统信息" 48 | your_info="账户信息" 49 | system_info="系统信息(CMD)" 50 | search="搜索" 51 | usb="USB" 52 | windows_update="Windows 更新" 53 | windows_defender="Windows 安全中心" 54 | apps="应用" 55 | apps_features="安装的应用" 56 | default_apps="默认应用" 57 | optional_features="可选功能" 58 | startup="启动" 59 | personalization="个性化" 60 | lockscreen="锁屏界面" 61 | background="背景" 62 | colors="颜色" 63 | themes="主题" 64 | start="开始" 65 | taskbar="任务栏" 66 | network="网络" 67 | status="网络和 Internet" 68 | ethernet="以太网" 69 | wifi="WLAN" 70 | connections="网络连接" 71 | 72 | 73 | // taskbar.nss 74 | apps="应用" 75 | paint="画图" 76 | edge="Edge" 77 | calculator="计算器" 78 | windows="窗口" 79 | cascade_windows="层叠窗口" 80 | Show_windows_stacked="堆叠窗口" 81 | Show_windows_side_by_side="并排窗口" 82 | minimize_all_windows="最小化所有窗口" 83 | restore_all_windows="还原所有窗口" 84 | task_manager="任务管理器" 85 | taskbar_Settings="任务栏设置" 86 | -------------------------------------------------------------------------------- /src/bin/imports/lang/zh-TW.nss: -------------------------------------------------------------------------------- 1 | /* 2 | Traditional Chinese 3 | by: github.com/Eddie40802 4 | */ 5 | 6 | xxx="歡迎使用繁體中文" 7 | // shell.nss 8 | pin_unpin="固定/取消固定" 9 | 10 | // develop.nss 11 | develop="開發" 12 | editors="編輯器" 13 | windows_notepad="Windows 記事本" 14 | 15 | // file-manage.nss 16 | file_manage="檔案管理" 17 | copy_multiple_paths='複製選中的 (@sel.count) 個項目' 18 | all="全選" 19 | invert="反向選擇" 20 | none="全部不選" 21 | change_extension="更改副檔名" 22 | take_ownership="更改所有權" 23 | show_hide="顯示/隱藏" 24 | system_files="系統檔案" 25 | file_name_extensions="檔案副檔名" 26 | attributes="屬性" 27 | register_server="註冊服務" 28 | register="註冊" 29 | unregister="取消註冊" 30 | hidden="隱藏" 31 | system="系統" 32 | readonly="唯讀" 33 | archive="封存" 34 | created="建立時間" 35 | modified="修改時間" 36 | accessed="存取時間" 37 | new_folder="新增資料夾" 38 | new_file="新增檔案" 39 | datetime="當前時間" 40 | guid="Guid" 41 | 42 | // goto.nss 43 | folder="資料夾" 44 | all_control_panel_items="所有控制台項目" 45 | system="系統" 46 | about="系統資訊" 47 | your_info="帳戶資訊" 48 | system_info="系統資訊(命令提示字元)" 49 | search="搜尋" 50 | usb="USB" 51 | windows_update="Windows 更新" 52 | windows_defender="Windows Update" 53 | apps="應用程式" 54 | apps_features="已安裝的應用程式" 55 | default_apps="預設應用程式" 56 | optional_features="選用功能" 57 | startup="啟動" 58 | personalization="個人化" 59 | lockscreen="鎖定畫面" 60 | background="背景" 61 | colors="色彩" 62 | themes="佈景主題" 63 | start="開始" 64 | taskbar="工作列" 65 | network="網路" 66 | status="網路和網際網路" 67 | ethernet="乙太網路" 68 | wifi="WLAN" 69 | connections="網路連線" 70 | 71 | 72 | // taskbar.nss 73 | apps="應用程式" 74 | paint="小畫家" 75 | edge="Edge" 76 | calculator="小算盤" 77 | windows="視窗" 78 | cascade_windows="階梯式視窗" 79 | Show_windows_stacked="堆疊視窗" 80 | Show_windows_side_by_side="並排視窗" 81 | minimize_all_windows="最小化所有視窗" 82 | restore_all_windows="還原所有視窗" 83 | task_manager="工作管理員" 84 | taskbar_Settings="工作列設定" 85 | -------------------------------------------------------------------------------- /src/bin/imports/modify.nss: -------------------------------------------------------------------------------- 1 | // modify items 2 | // Remove items by identifiers 3 | modify(mode=mode.multiple 4 | where=this.id(id.restore_previous_versions,id.cast_to_device) 5 | vis=vis.remove) 6 | 7 | modify(type="recyclebin" where=window.is_desktop and this.id==id.empty_recycle_bin pos=1 sep) 8 | 9 | modify(find="unpin*" pos="bottom" menu="Pin/Unpin") 10 | modify(find="pin*" pos="top" menu="Pin/Unpin") 11 | 12 | modify(where=this.id==id.copy_as_path menu="file manage") 13 | modify(type="dir.back|drive.back" where=this.id==id.customize_this_folder pos=1 sep="top" menu="file manage") 14 | 15 | modify(where=str.equals(this.name, ["open in terminal", "open linux shell here"]) || this.id==id.open_powershell_window_here 16 | pos="bottom" menu="Terminal") 17 | 18 | modify(mode=mode.multiple 19 | where=this.id( 20 | id.send_to, 21 | id.share, 22 | id.create_shortcut, 23 | id.set_as_desktop_background, 24 | id.rotate_left, 25 | id.rotate_right, 26 | id.map_network_drive, 27 | id.disconnect_network_drive, 28 | id.format, 29 | id.eject, 30 | id.give_access_to, 31 | id.include_in_library, 32 | id.print 33 | ) 34 | pos=1 menu=title.more_options) 35 | -------------------------------------------------------------------------------- /src/bin/imports/taskbar.nss: -------------------------------------------------------------------------------- 1 | menu(type="taskbar" vis=key.shift() or key.lbutton() pos=0 title=app.name image=\uE249) 2 | { 3 | item(title="config" image=\uE10A cmd='"@app.cfg"') 4 | item(title="manager" image=\uE0F3 admin cmd='"@app.exe"') 5 | item(title="directory" image=\uE0E8 cmd='"@app.dir"') 6 | item(title="version\t"+@app.ver vis=label col=1) 7 | item(title="docs" image=\uE1C4 cmd='https://nilesoft.org/docs') 8 | item(title="donate" image=\uE1A7 cmd='https://nilesoft.org/donate') 9 | } 10 | menu(where=@(this.count == 0) type="taskbar" image=icon.settings expanded=true) 11 | { 12 | menu(title=loc.apps image=\uE254) 13 | { 14 | item(title=loc.paint image=\uE116 cmd='mspaint') 15 | item(title=loc.edge image cmd='@sys.prog32\Microsoft\Edge\Application\msedge.exe') 16 | item(title=loc.calculator image=\ue1e7 cmd='calc.exe') 17 | item(title=str.res('regedit.exe,-16') image cmd='regedit.exe') 18 | } 19 | menu(title=loc.windows image=\uE1FB) 20 | { 21 | item(title=loc.cascade_windows cmd=command.cascade_windows) 22 | item(title=loc.Show_windows_stacked cmd=command.Show_windows_stacked) 23 | item(title=loc.Show_windows_side_by_side cmd=command.Show_windows_side_by_side) 24 | sep 25 | item(title=loc.minimize_all_windows cmd=command.minimize_all_windows) 26 | item(title=loc.restore_all_windows cmd=command.restore_all_windows) 27 | } 28 | item(title=title.desktop image=icon.desktop cmd=command.toggle_desktop) 29 | item(title=title.settings image=icon.settings(auto, image.color1) cmd='ms-settings:') 30 | item(title=loc.task_manager sep=both image=icon.task_manager cmd='taskmgr.exe') 31 | item(title=loc.taskbar_Settings sep=both image=inherit cmd='ms-settings:taskbar') 32 | item(vis=key.shift() title=title.exit_explorer cmd=command.restart_explorer) 33 | } -------------------------------------------------------------------------------- /src/bin/imports/terminal.nss: -------------------------------------------------------------------------------- 1 | menu(type='*' where=(sel.count or wnd.is_taskbar or wnd.is_edit) title=title.terminal sep=sep.top image=icon.run_with_powershell) 2 | { 3 | $tip_run_admin=["\xE1A7 Press [SHIFT key] or [RIGHT-CLICK] to run " + this.title + " as administrator", tip.warning, 1.0] 4 | $has_admin=key.shift() or key.rbutton() 5 | 6 | item(title=title.command_prompt tip=tip_run_admin admin=has_admin image cmd-prompt=`/K TITLE Command Prompt &ver& PUSHD "@sel.dir"`) 7 | item(title=title.windows_powershell admin=has_admin tip=tip_run_admin image cmd-ps=`-noexit -command Set-Location -Path '@sel.dir'`) 8 | item(where=package.exists("WindowsTerminal") 9 | title=title.Windows_Terminal 10 | tip=tip_run_admin 11 | admin=has_admin 12 | image='@package.path("WindowsTerminal")\WindowsTerminal.exe' 13 | cmd="wt.exe" 14 | arg=`-d "@sel.path\."`) 15 | } -------------------------------------------------------------------------------- /src/bin/imports/theme.nss: -------------------------------------------------------------------------------- 1 | theme 2 | { 3 | name="modern" 4 | dark=auto 5 | background 6 | { 7 | color=auto 8 | opacity=auto 9 | effect=auto 10 | } 11 | image.align=2 12 | } -------------------------------------------------------------------------------- /src/bin/license.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Nilesoft 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. -------------------------------------------------------------------------------- /src/bin/readme.txt: -------------------------------------------------------------------------------- 1 | Nilesoft Shell 2 | 3 | [about] 4 | Shell is a powerful, lightweight extension for Windows File Explorer that gives the user a high level of control over the context menu to improve its performance. 5 | Compatible with Windows 7 or later. 6 | 7 | [update] 8 | (*) If you are updating, please first uninstall/unregister previous version. 9 | 10 | [donate] 11 | If you really love Shell and would like to see it continue to improve. 12 | https://nilesoft.org/donate 13 | 14 | [support] 15 | https://nilesoft.org 16 | https://nilesoft.org/github 17 | support@nilesoft.org 18 | 19 | [DISCLAIMER] 20 | THE SOFTWARE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS 21 | EXPRESSED OR IMPLIED. YOU USE THE SOFTWARE AT YOUR OWN RISK. THE 22 | AUTHORS WILL NOT BE LIABLE FOR DATA LOSS, DAMAGES, LOSS OF PROFITS OR 23 | ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THE SOFTWARE. 24 | 25 | Copyright (C) 2024 Nilesoft Ltd. 26 | 27 | [plutovg] 28 | Copyright (c) 2020 Nwutobo Samuel Ugochukwu 29 | https://github.com/sammycage/plutovg 30 | 31 | -------------------------------------------------------------------------------- /src/bin/shell.nss: -------------------------------------------------------------------------------- 1 | settings 2 | { 3 | priority=1 4 | exclude.where = !process.is_explorer 5 | showdelay = 200 6 | // Options to allow modification of system items 7 | modify.remove.duplicate=1 8 | tip.enabled=true 9 | } 10 | 11 | // localization 12 | $loc_path='imports\lang\' 13 | import lang loc_path + "en.nss" 14 | import lang if(path.exists(loc_path + sys.lang + ".nss"), 15 | loc_path + sys.lang + ".nss", 16 | loc_path + "en.nss") 17 | 18 | // or import lang 'imports/lang/en.nss' 19 | 20 | import 'imports/theme.nss' 21 | import 'imports/images.nss' 22 | import 'imports/modify.nss' 23 | 24 | menu(mode="multiple" title=loc.pin_unpin image=icon.pin) 25 | { 26 | } 27 | 28 | menu(mode="multiple" title=title.more_options image=icon.more_options) 29 | { 30 | } 31 | 32 | import 'imports/terminal.nss' 33 | import 'imports/file-manage.nss' 34 | import 'imports/develop.nss' 35 | import 'imports/goto.nss' 36 | import 'imports/taskbar.nss' 37 | -------------------------------------------------------------------------------- /src/dll/Shell.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | false 5 | 6 | -------------------------------------------------------------------------------- /src/dll/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /src/dll/src/Expression/ArrayExpression.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "Expression\Constants.h" 4 | #include "Expression\Variable.h" 5 | 6 | namespace Nilesoft 7 | { 8 | namespace Shell 9 | { 10 | Expression *ArrayExpression::get(size_t index) 11 | { 12 | if(index < expressions.size()) 13 | return expressions[index]; 14 | return nullptr; 15 | } 16 | 17 | void ArrayExpression::push_back(Expression *e) 18 | { 19 | if(e) 20 | { 21 | e->Parent = this; 22 | expressions.push_back(e); 23 | } 24 | } 25 | 26 | void ArrayExpression::push_back(std::unique_ptr &&e) 27 | { 28 | if(e) 29 | { 30 | e->Parent = this; 31 | expressions.push_back(e.release()); 32 | } 33 | } 34 | 35 | ExpressionType ArrayExpression::Type() const 36 | { 37 | return ExpressionType::Array; 38 | } 39 | 40 | Expression *ArrayExpression::Copy() 41 | { 42 | std::unique_ptr a(new ArrayExpression(Parent)); 43 | for(auto e : expressions) a->push_back(e->Copy()); 44 | return a.release(); 45 | } 46 | 47 | Object ArrayExpression::Eval(Context *context) 48 | { 49 | auto array = new Object[expressions.size() + 1]; 50 | Object result(array, true); 51 | *array++ = expressions.size(); 52 | for(auto &e : expressions) 53 | { 54 | try{ 55 | *array++ = context->Eval(e).move(); 56 | } 57 | catch(...) {} 58 | } 59 | return result.move(); 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /src/dll/src/Expression/ArrayExpression.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Shell 6 | { 7 | class ArrayExpression : public Expression 8 | { 9 | private: 10 | std::vector expressions; 11 | 12 | public: 13 | ArrayExpression(Expression *parent = nullptr) { Parent = parent; } 14 | virtual ~ArrayExpression() { for(auto e : expressions) delete e; } 15 | 16 | ExpressionType Type() const override; 17 | Expression *Copy() override; 18 | Object Eval(Context *context) override; 19 | 20 | Expression *get(size_t index); 21 | bool size() const { return expressions.size(); } 22 | bool empty() const { return expressions.empty(); } 23 | void push_back(Expression *e); 24 | void push_back(std::unique_ptr &&e); 25 | }; 26 | } 27 | } -------------------------------------------------------------------------------- /src/dll/src/Expression/LiteralExpression.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Shell 6 | { 7 | class LiteralExpression : public Expression 8 | { 9 | public: 10 | LiteralExpression(const Object &value) : Value{ value } {} 11 | LiteralExpression(Object &&value) : Value{ std::move(value) } {} 12 | virtual ~LiteralExpression() = default; 13 | 14 | public: 15 | Object Value; 16 | }; 17 | 18 | class StringExpression final : public LiteralExpression 19 | { 20 | public: 21 | StringExpression(const Object &value) : LiteralExpression(value) {} 22 | StringExpression(const string &value) : LiteralExpression(value) {} 23 | StringExpression(string &&value) : LiteralExpression(value.move()){} 24 | StringExpression(std::wstring const &value) : LiteralExpression(value) {} 25 | //StringExpression(std::wstring &&value) : LiteralExpression(std::move(value)) {} 26 | StringExpression(const wchar_t *value) : LiteralExpression(value) {} 27 | StringExpression(wchar_t value) : LiteralExpression(value) {} 28 | StringExpression(char value) : LiteralExpression(value) {} 29 | 30 | ExpressionType Type() const override 31 | { 32 | return ExpressionType::String; 33 | } 34 | 35 | Expression *Copy() override 36 | { 37 | return new StringExpression(Value); 38 | } 39 | 40 | Object Eval(Context *context) override; 41 | }; 42 | 43 | class NumberExpression final : public LiteralExpression 44 | { 45 | public: 46 | template 47 | NumberExpression(T value) 48 | : LiteralExpression(value){ } 49 | 50 | template 51 | NumberExpression(T value, PrimitiveType inner) 52 | : LiteralExpression(value) 53 | { 54 | Value.Value.Inner = inner; 55 | } 56 | 57 | ExpressionType Type() const override 58 | { 59 | return ExpressionType::Number; 60 | } 61 | 62 | Expression *Copy() override 63 | { 64 | return new NumberExpression(Value); 65 | } 66 | 67 | Object Eval(Context *context) override; 68 | }; 69 | 70 | class Array2Expression final : public LiteralExpression 71 | { 72 | public: 73 | Array2Expression(const Object &value) : LiteralExpression(value) {} 74 | Array2Expression(Object &&value) : LiteralExpression(value.move()) {} 75 | 76 | ExpressionType Type() const override 77 | { 78 | return ExpressionType::Literal; 79 | } 80 | 81 | Expression *Copy() override 82 | { 83 | return new NumberExpression(Value); 84 | } 85 | 86 | Object Eval(Context *context) override; 87 | }; 88 | 89 | /*class ColorExpression final : public LiteralExpression 90 | { 91 | public: 92 | template 93 | ColorExpression(T value) 94 | : LiteralExpression(value) 95 | { 96 | } 97 | 98 | ExpressionType Type() const override 99 | { 100 | return ExpressionType::Color; 101 | } 102 | 103 | Expression *Copy() override 104 | { 105 | return new NumberExpression(Value); 106 | } 107 | 108 | //virtual const Object &Eval() override; 109 | Object Eval(Context *context) override; 110 | };*/ 111 | } 112 | } -------------------------------------------------------------------------------- /src/dll/src/Expression/OperatorExpression.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Shell 6 | { 7 | class OperatorExpression abstract : public Expression 8 | { 9 | public: 10 | OperatorType Operator; 11 | 12 | public: 13 | OperatorExpression(OperatorType operatorType) 14 | : Operator{ operatorType } 15 | { 16 | } 17 | 18 | virtual ~OperatorExpression() = default; 19 | }; 20 | 21 | class UnaryExpression final : public OperatorExpression 22 | { 23 | public: 24 | Expression *Operand = nullptr; 25 | 26 | public: 27 | UnaryExpression(OperatorType operatorType, Expression *operand =nullptr, Expression *parent = nullptr) : 28 | OperatorExpression(operatorType), Operand{ operand } 29 | { 30 | Parent = parent; 31 | } 32 | 33 | ~UnaryExpression() 34 | { 35 | delete Operand; 36 | } 37 | 38 | ExpressionType Type() const override 39 | { 40 | return ExpressionType::UnaryOperator; 41 | } 42 | 43 | Expression *Copy() override 44 | { 45 | return new UnaryExpression(Operator, Operand->Copy()); 46 | } 47 | 48 | Object Eval(Context *context) override; 49 | }; 50 | 51 | class BinaryExpression final : public OperatorExpression 52 | { 53 | public: 54 | Expression *Left = nullptr; 55 | Expression *Right = nullptr; 56 | 57 | public: 58 | BinaryExpression(OperatorType op, Expression *lhs = nullptr, Expression *rhs = nullptr, Expression *parent = nullptr) 59 | : OperatorExpression(op), Left{ lhs }, Right{ rhs } 60 | { 61 | if(Left) Left->Parent = this; 62 | if(Right) Right->Parent = this; 63 | Parent = parent; 64 | } 65 | 66 | ~BinaryExpression() 67 | { 68 | delete Left; 69 | delete Right; 70 | } 71 | 72 | ExpressionType Type() const override 73 | { 74 | return ExpressionType::BinaryOperator; 75 | } 76 | 77 | Expression *Copy() override 78 | { 79 | return new BinaryExpression(Operator, Left->Copy(), Right->Copy()); 80 | } 81 | 82 | //virtual const Object &Eval() override; 83 | Object Eval(Context *context) override; 84 | }; 85 | } 86 | } -------------------------------------------------------------------------------- /src/dll/src/Expression/Scope.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Shell 6 | { 7 | void Scope::clear(bool destroy) 8 | { 9 | if(destroy) 10 | { 11 | for(auto &it : _dispatch) delete it.second; 12 | } 13 | _dispatch.clear(); 14 | } 15 | 16 | auto Scope::find(uint32_t id) 17 | { 18 | return _dispatch.find(id); 19 | } 20 | 21 | Expression *Scope::to_expr(const Object &obj) 22 | { 23 | if(obj.is_string()) 24 | return new StringExpression(obj.to_string()); 25 | else if(obj.is_color()) 26 | return new NumberExpression(obj.to_number(), PrimitiveType::Color); 27 | else if(obj.is_number()) 28 | return new NumberExpression(obj.to_number()); 29 | else if(obj.is_array(true)) 30 | { 31 | std::unique_ptr array(new ArrayExpression); 32 | auto ptr = obj.get_pointer(); 33 | uint32_t argc = ptr[0]; 34 | for(auto i = 0u; i < argc; i++) 35 | array->push_back(to_expr(ptr[i + 1])); 36 | return array.release(); 37 | } 38 | return new NullExpression; 39 | } 40 | 41 | void Scope::set(uint32_t id, Expression *e) 42 | { 43 | auto pair = _dispatch.find(id); 44 | if(pair != _dispatch.end()) 45 | { 46 | if(e == nullptr) 47 | { 48 | delete std::exchange(pair->second, nullptr); 49 | _dispatch.erase(pair); 50 | } 51 | else if(pair->second != e) 52 | { 53 | delete pair->second; 54 | pair->second = e; 55 | } 56 | } 57 | else if(e != nullptr) 58 | { 59 | _dispatch[id] = e; 60 | } 61 | } 62 | 63 | void Scope::set(uint32_t id, Object &value) 64 | { 65 | auto pair = _dispatch.find(id); 66 | if(pair != _dispatch.end()) 67 | delete pair->second; 68 | _dispatch.insert_or_assign(id, to_expr(value)); 69 | } 70 | 71 | void Scope::set(uint32_t id, double value) 72 | { 73 | auto pair = _dispatch.find(id); 74 | if(pair == _dispatch.end()) 75 | _dispatch[id] = new NumberExpression(value); 76 | else if(pair->second->Type() == ExpressionType::Number) 77 | { 78 | auto e = (NumberExpression *)pair->second; 79 | e->Value = value; 80 | } 81 | else 82 | { 83 | delete pair->second; 84 | pair->second = new NumberExpression(value); 85 | } 86 | } 87 | 88 | void Scope::set(uint32_t id, const string &value) 89 | { 90 | auto pair = _dispatch.find(id); 91 | if(pair == _dispatch.end()) 92 | _dispatch[id] = new StringExpression(value); 93 | else if(pair->second->Type() == ExpressionType::String) 94 | { 95 | auto e = (StringExpression *)pair->second; 96 | e->Value = value; 97 | } 98 | else 99 | { 100 | delete pair->second; 101 | pair->second = new StringExpression(value); 102 | } 103 | } 104 | 105 | void Scope::erase(uint32_t id) 106 | { 107 | auto pair = _dispatch.find(id); 108 | if(pair != _dispatch.end()) 109 | { 110 | delete std::exchange(pair->second, nullptr); 111 | _dispatch.erase(pair); 112 | } 113 | } 114 | 115 | bool Scope::exists(uint32_t id, bool hierarchy) 116 | { 117 | bool result = _dispatch.find(id) != _dispatch.end(); 118 | if(!hierarchy || result) 119 | return result; 120 | 121 | auto parent = Parent; 122 | while(parent) 123 | { 124 | result = parent->exists(id, hierarchy); 125 | if(result) break; 126 | parent = parent->Parent; 127 | } 128 | return result; 129 | } 130 | 131 | //bool Scope::exists(uint32_t id) { return _dispatch.find(id) != _dispatch.end(); } 132 | size_t Scope::size() const { return _dispatch.size(); } 133 | 134 | Expression *Scope::at(uint32_t id) 135 | { 136 | if(!_dispatch.empty()) 137 | { 138 | if(auto v = _dispatch.find(id); v != _dispatch.end()) 139 | return v->second; 140 | } 141 | return nullptr; 142 | } 143 | 144 | Expression *Scope::operator [](uint32_t id) 145 | { 146 | return at(id); 147 | } 148 | } 149 | } -------------------------------------------------------------------------------- /src/dll/src/Expression/Scope.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Shell 6 | { 7 | class Scope 8 | { 9 | //using pair = std::pair; 10 | std::unordered_map _dispatch; 11 | 12 | public: 13 | Scope *Parent = nullptr; 14 | 15 | Scope() = default; 16 | ~Scope() { clear(true); } 17 | 18 | void clear(bool destroy); 19 | auto find(uint32_t id); 20 | void set(uint32_t id, Expression *e); 21 | void set(uint32_t id, Object &value); 22 | void set(uint32_t id, double value); 23 | void set(uint32_t id, const string &value); 24 | void erase(uint32_t id); 25 | bool exists(uint32_t id, bool hierarchy = false); 26 | size_t size() const; 27 | Expression *at(uint32_t id); 28 | Expression *operator [](uint32_t id); 29 | 30 | Expression *to_expr(const Object &obj); 31 | }; 32 | 33 | struct tagVariables 34 | { 35 | Scope *global = nullptr; 36 | Scope *local = nullptr; 37 | Scope *runtime = nullptr; 38 | }; 39 | } 40 | } -------------------------------------------------------------------------------- /src/dll/src/Expression/StatementExpression.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Shell 6 | { 7 | class StatementExpression : public Expression 8 | { 9 | public: 10 | std::vector Body; 11 | bool HasReturn = false; 12 | 13 | public: 14 | StatementExpression(Expression *parent = nullptr, bool has_return = false) 15 | { 16 | Parent = parent; 17 | HasReturn = has_return; 18 | } 19 | 20 | virtual ~StatementExpression() { for(auto e : Body) delete e; } 21 | 22 | ExpressionType Type() const override 23 | { 24 | return ExpressionType::Statement; 25 | } 26 | 27 | Expression *Copy() override 28 | { 29 | auto stmt = new StatementExpression(Parent); 30 | for(auto e : Body) stmt->push_back(e->Copy()); 31 | return stmt; 32 | } 33 | 34 | virtual Object Eval(Context *context) override; 35 | 36 | bool size() const { return Body.size(); } 37 | bool empty() const { return Body.empty(); } 38 | 39 | void push_back(Expression *e) 40 | { 41 | if(e) 42 | { 43 | e->Parent = this; 44 | Body.push_back(e); 45 | } 46 | } 47 | 48 | void push_back(std::unique_ptr &&e) 49 | { 50 | if(e) 51 | { 52 | e->Parent = this; 53 | Body.push_back(e.release()); 54 | } 55 | } 56 | 57 | void push_back(const string &value) 58 | { 59 | if(!value.empty()) push_back(new StringExpression(value)); 60 | } 61 | 62 | void push_back(string &&value) 63 | { 64 | if(!value.empty()) push_back(new StringExpression(value.move())); 65 | } 66 | }; 67 | } 68 | } -------------------------------------------------------------------------------- /src/dll/src/Expression/Variable.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | namespace Nilesoft 3 | { 4 | namespace Shell 5 | { 6 | /*class Variable 7 | { 8 | public: 9 | uint32_t Id = 0; 10 | Expression *Value = nullptr; 11 | std::vector Items; 12 | 13 | Variable() {} 14 | Variable(Variable &&other) noexcept { this->operator=( std::move(other)); } 15 | 16 | Variable(uint32_t id) : Id(id) {} 17 | Variable(uint32_t id, Expression *e) : Id(id), Value(e) {} 18 | ~Variable() { clear(); } 19 | 20 | Variable(Variable const &) = delete; //default; 21 | Variable &operator=(Variable const &rhs) = delete; 22 | 23 | Variable &operator=(Variable &&rhs) noexcept 24 | { 25 | if(this != &rhs) 26 | { 27 | clear(); 28 | Id = rhs.Id; 29 | Value = rhs.Value; 30 | Items = std::move(rhs.Items); 31 | // clear old item 32 | rhs.Id = 0; 33 | rhs.Value = nullptr; 34 | } 35 | return *this; 36 | } 37 | 38 | Variable *find(uint32_t id) 39 | { 40 | for(auto &item : Items) 41 | if(id == item.Id) 42 | return &item; 43 | return nullptr; 44 | } 45 | 46 | void add(uint32_t id, Expression *value) 47 | { 48 | if(auto item = find(id)) 49 | { 50 | delete item->Value; 51 | item->Value = value; 52 | } 53 | else 54 | { 55 | Items.emplace_back(id, value); 56 | } 57 | } 58 | 59 | void add(Variable &&item) 60 | { 61 | if(auto def = find(item.Id)) 62 | { 63 | for(auto &x : item.Items) 64 | def->add(std::move(x)); 65 | 66 | delete def->Value; 67 | def->Value = item.Value; 68 | item.Value = nullptr; 69 | } 70 | else 71 | { 72 | Items.push_back(std::move(item)); 73 | } 74 | } 75 | 76 | Expression *at(uint32_t id) const 77 | { 78 | for(auto &d : Items) 79 | if(id == d.Id) return d.Value; 80 | return nullptr; 81 | } 82 | 83 | Variable *get(const Ident &id) 84 | { 85 | Variable *def = nullptr; 86 | for(uint32_t i = 0; i < id.length(); i++) 87 | { 88 | def = def->find(id[i]); 89 | if(!def) break; 90 | } 91 | return def; 92 | } 93 | 94 | Variable &&move() noexcept { return std::move(*this); } 95 | 96 | bool empty() const { return Items.empty(); } 97 | size_t size() const { return Items.size(); } 98 | 99 | auto begin() const { return Items.begin(); } 100 | auto end() const { return Items.end(); } 101 | 102 | auto begin() { return Items.begin(); } 103 | auto end() { return Items.end(); } 104 | 105 | void clear() 106 | { 107 | Id = 0; 108 | delete std::exchange(Value, nullptr); 109 | Items.clear(); 110 | } 111 | };*/ 112 | } 113 | } -------------------------------------------------------------------------------- /src/dll/src/Include/Exception.h: -------------------------------------------------------------------------------- 1 |  2 | #pragma once 3 | /* 4 | #include 5 | #include 6 | #include 7 | */ 8 | namespace Nilesoft 9 | { 10 | class Exception : public std::exception 11 | { 12 | protected: 13 | std::wstring msg{}; 14 | 15 | public: 16 | Exception(const std::string &message) 17 | : std::exception(message.c_str()) 18 | { 19 | } 20 | 21 | Exception(std::wstring const &message) 22 | : msg{ message } 23 | { 24 | } 25 | 26 | Exception(const wchar_t *message) 27 | : msg{ message } 28 | { 29 | } 30 | 31 | Exception(const wchar_t *format, ...) 32 | { 33 | if(format != nullptr) 34 | { 35 | va_list args; 36 | va_start(args, format); 37 | msg.resize(std::vswprintf(nullptr, 0, format, args), '\0'); 38 | std::vswprintf(&msg[0], msg.size() + 1, format, args); 39 | va_end(args); 40 | } 41 | } 42 | 43 | virtual std::wstring const &Message() const 44 | { 45 | return msg; 46 | } 47 | 48 | static DWORD Filter(DWORD exceptionCode, EXCEPTION_POINTERS *ei) 49 | { 50 | (ei); 51 | // we handle all exceptions 52 | DWORD dwResult = EXCEPTION_EXECUTE_HANDLER; 53 | switch(exceptionCode) 54 | { 55 | case EXCEPTION_ACCESS_VIOLATION: 56 | case EXCEPTION_INVALID_HANDLE: 57 | case EXCEPTION_STACK_OVERFLOW: 58 | case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: 59 | case EXCEPTION_BREAKPOINT: 60 | case EXCEPTION_DATATYPE_MISALIGNMENT: 61 | case EXCEPTION_FLT_DENORMAL_OPERAND: 62 | case EXCEPTION_FLT_DIVIDE_BY_ZERO: 63 | case EXCEPTION_FLT_INEXACT_RESULT: 64 | case EXCEPTION_FLT_INVALID_OPERATION: 65 | case EXCEPTION_FLT_OVERFLOW: 66 | case EXCEPTION_FLT_STACK_CHECK: 67 | case EXCEPTION_FLT_UNDERFLOW: 68 | case EXCEPTION_INT_DIVIDE_BY_ZERO: 69 | case EXCEPTION_INT_OVERFLOW: 70 | case EXCEPTION_PRIV_INSTRUCTION: 71 | case EXCEPTION_NONCONTINUABLE_EXCEPTION: 72 | case EXCEPTION_GUARD_PAGE: 73 | case EXCEPTION_INVALID_DISPOSITION: 74 | case EXCEPTION_ILLEGAL_INSTRUCTION: 75 | 76 | case STATUS_HEAP_CORRUPTION: 77 | case STATUS_STACK_BUFFER_OVERRUN: 78 | { 79 | dwResult = EXCEPTION_EXECUTE_HANDLER; 80 | break; 81 | } 82 | } 83 | return dwResult; 84 | } 85 | 86 | static DWORD Filter(DWORD exceptionCode) 87 | { 88 | return Filter(exceptionCode, nullptr); 89 | } 90 | }; 91 | 92 | /*class ParserException : public Exception 93 | { 94 | int _col; 95 | 96 | public: 97 | ParserException(std::wstring const &message, int col) 98 | : Exception(message), _col(col) 99 | { 100 | } 101 | 102 | ParserException(const wchar_t* message, int col) 103 | : Exception(message), _col(col) 104 | { 105 | } 106 | };*/ 107 | } 108 | 109 | -------------------------------------------------------------------------------- /src/dll/src/Include/Selections.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/dll/src/Include/Selections.h -------------------------------------------------------------------------------- /src/dll/src/Include/Styles.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Shell 6 | { 7 | /*class Styles 8 | { 9 | public: 10 | bool Enable = false; 11 | 12 | int MaxHeight = -1; 13 | int MaxWidth = -1; 14 | int MinHeight = -1; 15 | int MinWidth = -1; 16 | int Height = -1; 17 | int Width = -1; 18 | 19 | COLORREF FontColor = 0; 20 | COLORREF FontSelColor = 0; 21 | COLORREF BackColor = 0; 22 | COLORREF BackSelColor = 0; 23 | 24 | int FontSize = -1; 25 | int FontWeight = 0;//0 normal, 2 bold 26 | int FontStyle = 0; //0 normal, 1 italic, 2 oblique 27 | 28 | int TextAlign = 0; // 0 left, 1 right, 2 center 29 | 30 | };*/ 31 | } 32 | } -------------------------------------------------------------------------------- /src/dll/src/Include/Tip.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Shell 6 | { 7 | struct Tip 8 | { 9 | static constexpr auto IDT_SHOW = 0x100; //the identifier of the timer for show 10 | static constexpr auto IDT_HIDE = 0x101; //the identifier of the timer for hide 11 | 12 | static constexpr auto TIMEIN = 1000; 13 | static constexpr auto TIMEOUT = 1000 * 60; 14 | static constexpr auto MAXWIDTH = 640; 15 | static constexpr auto MAXHEIGHT = 100; 16 | 17 | HWND handle{}; 18 | Rect rect; 19 | string text; 20 | uint8_t type = 0; 21 | uint16_t time = UINT16_MAX; 22 | 23 | bool enabled = true; 24 | bool visible{}; 25 | HFONT hfont{}; 26 | class ContextMenu *ctx{}; 27 | Expression *e{}; 28 | 29 | Tip() 30 | { 31 | } 32 | 33 | ~Tip() 34 | { 35 | destroy(); 36 | } 37 | 38 | bool create() 39 | { 40 | if(!handle) 41 | { 42 | handle = ::CreateWindowExW(WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_NOACTIVATE, WC_Shell_Window, 43 | L"Tip", WS_POPUP, 44 | 0, 0, 1, 1, nullptr, nullptr, nullptr, nullptr); 45 | if(handle) 46 | { 47 | ::SetWindowSubclass(handle, [](HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, 48 | UINT_PTR, DWORD_PTR dwRefData)->LRESULT 49 | { 50 | if(auto _this = reinterpret_cast(dwRefData); _this) 51 | return _this->Proc(hWnd, uMsg, wParam, lParam); 52 | return ::DefSubclassProc(hWnd, uMsg, wParam, lParam); 53 | }, 0, reinterpret_cast(this)); 54 | } 55 | } 56 | return handle; 57 | } 58 | 59 | bool show(); 60 | bool show(Expression *e, const Rect &rc); 61 | bool show(const string &text, uint8_t type, uint16_t time, const Rect &rc); 62 | bool hide(bool cancel = false); 63 | LRESULT Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 64 | 65 | void destroy() 66 | { 67 | killTimer(); 68 | if(handle) 69 | ::DestroyWindow(handle); 70 | handle = nullptr; 71 | visible = false; 72 | } 73 | 74 | private: 75 | void killTimer() 76 | { 77 | if(handle) 78 | { 79 | ::KillTimer(handle, IDT_SHOW); 80 | ::KillTimer(handle, IDT_HIDE); 81 | } 82 | } 83 | }; 84 | } 85 | } -------------------------------------------------------------------------------- /src/dll/src/Include/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /src/dll/src/Shell.def: -------------------------------------------------------------------------------- 1 | LIBRARY "shell.dll" 2 | VERSION 1.9 3 | EXPORTS 4 | DllCanUnloadNow PRIVATE 5 | DllGetClassObject PRIVATE 6 | ;DllRegisterServer PRIVATE 7 | ;DllUnregisterServer PRIVATE 8 | ;DllInstall PRIVATE 9 | -------------------------------------------------------------------------------- /src/dll/src/dija.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/dll/src/dija.h -------------------------------------------------------------------------------- /src/exe/exe.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {bd90a6f4-26b5-4462-a282-8da3f7027255} 18 | 19 | 20 | 21 | 22 | Source Files 23 | 24 | 25 | 26 | 27 | Resource Files 28 | 29 | 30 | 31 | 32 | Header Files 33 | 34 | 35 | Header Files 36 | 37 | 38 | 39 | 40 | Others Files 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/exe/exe.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /src/exe/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /src/setup/build.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | echo build setup... 4 | echo. 5 | 6 | cd wix 7 | set arch=%~1 8 | set bin=..\..\bin 9 | 10 | if "%~1" == "x86" ( 11 | set arch=x86 12 | ) else if "%~1" == "arm64" ( 13 | set arch=arm64 14 | ) else ( 15 | set arch=x64 16 | ) 17 | 18 | echo %arch% 19 | 20 | if exist %bin%\setup-%arch%.msi del %bin%\setup-%arch%.msi 21 | 22 | echo WIX 23 | 24 | wix.exe --version 25 | echo. 26 | wix.exe build -o %bin%\setup-%arch%.msi setup.wxs -arch %arch% 27 | 28 | if exist %bin%\setup-%arch%.wixpdb del %bin%\setup-%arch%.wixpdb>nul 29 | echo. 30 | pause -------------------------------------------------------------------------------- /src/setup/ca/ca.def: -------------------------------------------------------------------------------- 1 | ;LIBRARY "ca" 2 | 3 | EXPORTS 4 | Install 5 | Uninstall 6 | Update 7 | ;ShellExecute 8 | ValidatePath 9 | 10 | -------------------------------------------------------------------------------- /src/setup/ca/ca.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Release 6 | Win32 7 | 8 | 9 | Release 10 | x64 11 | 12 | 13 | Release 14 | ARM64 15 | 16 | 17 | 18 | {F72D34CA-48DA-4DFD-91A9-A0C78BEF6981} 19 | DynamicLibrary 20 | ca 21 | Unicode 22 | ca.def 23 | WiX Toolset CustomAction 24 | 10.0 25 | $(SolutionDir)bin\ 26 | $(ProjectDir)obj\$(Configuration.ToLower())\ 27 | 28 | 29 | 30 | v143 31 | 32 | 33 | 34 | 35 | 36 | msi.lib;shlwapi.lib 37 | 38 | 39 | 40 | false 41 | None 42 | 43 | 44 | false 45 | 46 | 47 | 48 | 49 | false 50 | 51 | 52 | None 53 | 54 | 55 | 56 | 57 | false 58 | 59 | 60 | None 61 | 62 | 63 | 64 | 65 | MultiThreaded 66 | MaxSpeed 67 | stdcpp20 68 | Create 69 | NotUsing 70 | $(IntDir)$(TargetName).pch 71 | 72 | 73 | ca.def 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /src/setup/ca/ca.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /src/setup/ca/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /src/setup/wix/res/WixUI_Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/setup/wix/res/WixUI_Banner.png -------------------------------------------------------------------------------- /src/setup/wix/res/WixUI_Bmp_New.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/setup/wix/res/WixUI_Bmp_New.bmp -------------------------------------------------------------------------------- /src/setup/wix/res/WixUI_Bmp_Up.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/setup/wix/res/WixUI_Bmp_Up.bmp -------------------------------------------------------------------------------- /src/setup/wix/res/WixUI_Dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/setup/wix/res/WixUI_Dialog.png -------------------------------------------------------------------------------- /src/setup/wix/res/WixUI_Ico_Exclam.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/setup/wix/res/WixUI_Ico_Exclam.ico -------------------------------------------------------------------------------- /src/setup/wix/res/WixUI_Ico_Info.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/setup/wix/res/WixUI_Ico_Info.ico -------------------------------------------------------------------------------- /src/setup/wix/setup.wixproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | Package 4 | ..\..\bin\ 5 | setup-$(Platform.ToLower().Replace('win32', 'x86')) 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/setup/wix/var.wxi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/shared/Library/detours-arm64.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/shared/Library/detours-arm64.lib -------------------------------------------------------------------------------- /src/shared/Library/detours-x64.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/shared/Library/detours-x64.lib -------------------------------------------------------------------------------- /src/shared/Library/detours-x86.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/shared/Library/detours-x86.lib -------------------------------------------------------------------------------- /src/shared/Library/plutosvg-arm64.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/shared/Library/plutosvg-arm64.lib -------------------------------------------------------------------------------- /src/shared/Library/plutosvg-x64.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/shared/Library/plutosvg-x64.lib -------------------------------------------------------------------------------- /src/shared/Library/plutosvg-x86.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/shared/Library/plutosvg-x86.lib -------------------------------------------------------------------------------- /src/shared/Library/plutosvg.h: -------------------------------------------------------------------------------- 1 | #ifndef PLUTOSVG_H 2 | #define PLUTOSVG_H 3 | 4 | #include "plutovg.h" 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | /** 11 | * @brief Load the image from a file in memory 12 | * @param data - pointer to the file data in memory 13 | * @param size - size of the data to load, in bytes 14 | * @param font - font to use for text rendering 15 | * @param width - requested width, in pixels 16 | * @param height - requested height, in pixels 17 | * @param dpi - dots per inch to use for units conversion to pixels 18 | * @return pointer to surface object on success, otherwise NULL 19 | */ 20 | plutovg_surface_t* plutosvg_load_from_memory(const char* data, int size, plutovg_font_t* font, int width, int height, double dpi); 21 | 22 | /** 23 | * @brief Load the image from a file on disk 24 | * @param filename - path of the image file to load 25 | * @param font - font to use for text rendering 26 | * @param width - requested width, in pixels 27 | * @param height - requested height, in pixels 28 | * @param dpi - dots per inch to use for units conversion to pixels 29 | * @return pointer to surface object on success, otherwise NULL 30 | */ 31 | plutovg_surface_t* plutosvg_load_from_file(const char* filename, plutovg_font_t* font, int width, int height, double dpi); 32 | 33 | /** 34 | * @brief Get image dimensions from a file in memory 35 | * @param data - pointer to the file data in memory 36 | * @param size - size of the data to load, in bytes 37 | * @param font - font to use for text rendering 38 | * @param width - width of the image, in pixels 39 | * @param height - height of the image, in pixels 40 | * @param dpi - dots per inch to use for units conversion to pixels 41 | * @return true on success, otherwise false 42 | */ 43 | int plutosvg_dimensions_from_memory(const char* data, int size, plutovg_font_t* font, int* width, int* height, double dpi); 44 | 45 | /** 46 | * @brief Get image dimensions from a file on disk 47 | * @param filename - path of the image file to load 48 | * @param font - font to use for text rendering 49 | * @param width - width of the image, in pixels 50 | * @param height - height of the image, in pixels 51 | * @param dpi - dots per inch to use for units conversion to pixels 52 | * @return true on success, otherwise false 53 | */ 54 | int plutosvg_dimensions_from_file(const char* filename, plutovg_font_t* font, int* width, int* height, double dpi); 55 | 56 | #ifdef __cplusplus 57 | } 58 | #endif 59 | 60 | #endif // PLUTOSVG_H 61 | -------------------------------------------------------------------------------- /src/shared/Resource.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define VERSION_MAJOR 1 4 | #define VERSION_MINOR 9 5 | #define VERSION_BUILD 19 6 | #define VERSION_REV 0 7 | #define VERSION_YEAR 2024 8 | 9 | #define IDI_LOGO 1100; 10 | #define IDI_IMAGES 1101; 11 | 12 | namespace Nilesoft 13 | { 14 | 15 | #define STRINGIFY(x) L#x 16 | #define TOSTRING(x) STRINGIFY(x) 17 | 18 | #ifdef _WIN64 19 | #define APP_PROCESS L"64-bit" 20 | #else 21 | #define APP_PROCESS L"32-bit" 22 | #endif 23 | 24 | //#define APP_IS_CANARY 1 25 | //#define APP_CANARY L"Canary" 26 | 27 | #define APP_COMPANY L"Nilesoft" 28 | #define APP_COMPANYLTD APP_COMPANY L" Ltd" 29 | #define APP_NAMEA "Shell" 30 | #define APP_NAME L"Shell" 31 | #define APP_FULLNAME APP_COMPANY L" " APP_NAME 32 | //#define APP_FULLNAME_VERSION APP_FULLNAME L" (debug)" 33 | #define APP_FILENAME_TITLE L"shell" 34 | 35 | #define APP_PRODUCT_VERSION L"1.9" 36 | #define APP_VERSION L"1.9.19" 37 | //#define APP_VERSION_FULL L"1.9 build 19" 38 | 39 | constexpr auto APP_EMAIL = L"support@nilesoft.org"; 40 | constexpr auto APP_WEBSITE = L"www.nilesoft.org"; 41 | constexpr auto APP_WEBSITELINK = L"https://nilesoft.org"; 42 | 43 | #ifdef _WINDLL 44 | #define APP_FILENAME APP_FILENAME_TITLE L".dll" 45 | #define TRT_MANIFEST 2 46 | #define TFILETYPE VFT_DLL 47 | 48 | #define IDD_INPUTBOX 103 49 | #define IDC_INPUTBOX_PROMPT 1000 50 | #define IDC_INPUTBOX_EDIT 1001 51 | 52 | #else 53 | #define APP_FILENAME APP_FILENAME_TITLE L".exe" 54 | #define TRT_MANIFEST 1 55 | #define TFILETYPE VFT_APP 56 | #endif 57 | 58 | #ifdef _DEBUG 59 | #define VS_DEBUG VS_FF_DEBUG 60 | #else 61 | #define VS_DEBUG 0x0L 62 | #endif 63 | 64 | 65 | #define IDR_CSHELL 101 66 | #define IDD_DIALOG1 102 67 | #define IDI_RPMICON 105 68 | #define IDI_SHELLFONT 106 69 | 70 | 71 | #define IDD_CMDLINE 1000 72 | #define IDC_CMDLINE_TEXT 1001 73 | 74 | #define IDS_ADMIN_PRIVILEGES 2000 75 | #define IDS_WINDOWS_COMPATIBILITY 2001 76 | #define IDS_REGISTER_SUCCESS 2002 77 | #define IDS_UNREGISTER_SUCCESS 2003 78 | #define IDS_REGISTER_NOT_SUCCESS 2004 79 | #define IDS_UNREGISTER_NOT_SUCCESS 2005 80 | #define IDS_RESTART_EXPLORERQ 2006 81 | #define IDS_RESTART_EXPLORER 2007 82 | #define IDS_SELECT_FOLDER 2008 83 | } 84 | -------------------------------------------------------------------------------- /src/shared/Resource/Shell.rc: -------------------------------------------------------------------------------- 1 | //#pragma code_page(65001) // utf-8 2 | //#pragma code_page(1252) // English 3 | 4 | #include 5 | #include 6 | #include "..\resource.h" 7 | 8 | LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 9 | 10 | // 11 | // Version Information resources 12 | // 13 | 1 VERSIONINFO 14 | FILEVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_BUILD,VERSION_REV 15 | PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,0,0 16 | FILEOS VOS_NT_WINDOWS32 17 | FILESUBTYPE VFT2_UNKNOWN 18 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK 19 | FILEFLAGS VS_DEBUG 20 | FILETYPE TFILETYPE 21 | { 22 | BLOCK "StringFileInfo" 23 | { 24 | //"000004b0" // Neutral 25 | BLOCK "040904b0" 26 | { 27 | VALUE "CompanyName", APP_COMPANY 28 | #ifdef APP_CANARY 29 | VALUE "FileDescription", APP_FULLNAME L" " APP_CANARY 30 | #else 31 | VALUE "FileDescription", APP_FULLNAME 32 | #endif 33 | VALUE "FileVersion", APP_VERSION 34 | VALUE "InternalName", APP_FILENAME 35 | VALUE "LegalCopyright", L"\xA9 Nilesoft Ltd." 36 | //VALUE "LegalCopyright", L"\xA9 2023 Nilesoft Ltd." 37 | VALUE "OriginalFilename", APP_FILENAME 38 | VALUE "ProductName", APP_NAME 39 | VALUE "ProductVersion", APP_PRODUCT_VERSION 40 | } 41 | } 42 | BLOCK "VarFileInfo" 43 | { 44 | VALUE "Translation", 0x0409, 0x04B0 45 | } 46 | } 47 | 48 | #ifdef _WINDLL 49 | 50 | FONTICON RCDATA ".\\shell.ttf" 51 | 52 | #else 53 | // 54 | // Icon resources 55 | // 56 | IDI_RPMICON ICON ".\\main.ico" 57 | //IDI_LOGO PNG ".\\logo.png" 58 | #endif 59 | // 60 | // Manifest resources 61 | // 62 | TRT_MANIFEST RT_MANIFEST ".\\manifest.xml" 63 | 64 | // 65 | // Bitmap resources 66 | // 67 | //IDB_BITMAP1 BITMAP "bitmap1.bmp" 68 | 69 | // 70 | // String Table resources 71 | // 72 | STRINGTABLE 73 | { 74 | #ifdef _WINDLL 75 | IDS_SELECT_FOLDER L"Please select a folder." 76 | #endif 77 | IDS_REGISTER_SUCCESS L"Register completed successfully." 78 | IDS_UNREGISTER_SUCCESS L"Unregister completed successfully." 79 | IDS_REGISTER_NOT_SUCCESS L"Register not completed." 80 | IDS_UNREGISTER_NOT_SUCCESS L"Unregister not completed." 81 | IDS_ADMIN_PRIVILEGES L"Missing administrative privileges!" 82 | IDS_WINDOWS_COMPATIBILITY L"Windows Version Not Supported, You need at least Windows 7." 83 | IDS_RESTART_EXPLORERQ L"Restart Windows Explorer?" 84 | IDS_RESTART_EXPLORER L"Restart Explorer." 85 | } 86 | 87 | // 88 | // Dialog resources 89 | // 90 | #ifdef _WINDLL 91 | 92 | IDD_INPUTBOX DIALOGEX 0, 0, 300, 60 93 | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU | DS_CENTER 94 | CAPTION "Shell Input" 95 | FONT 8, "MS Shell Dlg", 0, 0, 0x1 96 | { 97 | LTEXT "Prompt:", IDC_INPUTBOX_PROMPT, 5, 5, 290, 14, SS_NOPREFIX 98 | EDITTEXT IDC_INPUTBOX_EDIT, 5, 20, 290, 14, ES_AUTOHSCROLL 99 | DEFPUSHBUTTON "Ok", IDOK, 245, 40, 50, 14, WS_GROUP 100 | PUSHBUTTON "Cancel", IDCANCEL, 190, 40, 50, 14, WS_GROUP 101 | } 102 | 103 | #else 104 | 105 | IDD_CMDLINE DIALOGEX 0, 0, 280, 185 106 | STYLE DS_SETFONT | DS_CENTER | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 107 | CAPTION "Nilesoft Shell" 108 | FONT 8, "MS Shell Dlg", 0, 0, 0x1 109 | { 110 | EDITTEXT IDC_CMDLINE_TEXT, 10, 10, 260, 150, ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | NOT WS_TABSTOP 111 | DEFPUSHBUTTON "OK", IDOK, 220, 165, 50, 15 112 | } 113 | 114 | #endif 115 | -------------------------------------------------------------------------------- /src/shared/Resource/Shell.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/shared/Resource/Shell.ttf -------------------------------------------------------------------------------- /src/shared/Resource/main.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/shared/Resource/main.ico -------------------------------------------------------------------------------- /src/shared/Resource/manifest.txt: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | Tcl/Tk windowing shell (wish) 11 | 12 | 13 | 14 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 38 | true 39 | 40 | 41 | 42 | 43 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/shared/Resource/manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | Nilesoft Shell 10 | 11 | 12 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | True/PM 40 | PerMonitorV2,PerMonitor 41 | true 42 | UTF-8 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/shared/System/Collections/Array.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Collections 6 | { 7 | /*template 8 | class Array 9 | { 10 | typedef T& ref; 11 | typedef const T& const_ref; 12 | 13 | private: 14 | T m_data[length]{ }; 15 | 16 | public: 17 | Array() { } 18 | 19 | ~Array() { } 20 | 21 | void set(uint32_t index, const T& value) 22 | { 23 | if(m_data && index < length) 24 | { 25 | m_data[index] = value; 26 | return true; 27 | } 28 | return false; 29 | } 30 | 31 | bool set(uint32_t index, T& value) 32 | { 33 | if(m_data && index < length) 34 | { 35 | value = m_data[index]; 36 | return true; 37 | } 38 | return false; 39 | } 40 | 41 | T& at(uint32_t index) 42 | { 43 | return m_data[index]; 44 | } 45 | 46 | void fill(T const& value) 47 | { 48 | for(uint32_t i = 0; i < length; i++) 49 | m_data[i] = value; 50 | } 51 | 52 | void copy(Array const& src) 53 | { 54 | for(uint32_t i = 0; i < length; i++) 55 | m_data[i] = src[i]; 56 | } 57 | 58 | T &operator[](uint32_t index) { return at(index); } 59 | 60 | const T& operator[](uint32_t index) const { return at(index); } 61 | 62 | T* data() const { return m_data; } 63 | const uint32_t size() const { return length; } 64 | };*/ 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/shared/System/Collections/LList.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | /* 3 | namespace Nilesoft 4 | { 5 | namespace Collections 6 | { 7 | template 8 | class LList 9 | { 10 | public: 11 | struct Node 12 | { 13 | public: 14 | T object; 15 | Node* Next = nullptr; 16 | Node* Prev = nullptr; 17 | Node() : object(nullptr) {} 18 | Node(T obj) : object(obj) {} 19 | ~Node() { if(object && delete_object) delete object; } 20 | 21 | T operator*() { return object; } 22 | 23 | void operator++() 24 | { 25 | Prev = this; 26 | Next = Next->Next; 27 | } 28 | 29 | T get() { return object; } 30 | 31 | //void operator++(int) { Next = Next->Next; } 32 | }; 33 | 34 | private: 35 | uint32_t count; 36 | Node *head, *tail; 37 | 38 | public: 39 | LList() : 40 | head(nullptr), tail(nullptr), count(0) 41 | { 42 | } 43 | 44 | ~LList() 45 | { 46 | RemoveAll(); 47 | } 48 | 49 | void RemoveAll() 50 | { 51 | if(head != nullptr) 52 | { 53 | auto node = head; 54 | while(node != nullptr) 55 | { 56 | auto curr = node; 57 | node = node->Next; 58 | delete curr; 59 | } 60 | head = nullptr; 61 | } 62 | tail = nullptr; 63 | count = 0; 64 | } 65 | 66 | bool Add(T object) 67 | { 68 | if(object == nullptr) 69 | return false; 70 | auto node = new Node(object); 71 | if(head == nullptr) 72 | { 73 | head = node; 74 | } 75 | else 76 | { 77 | node->Prev = tail; 78 | tail->Next = node; 79 | } 80 | tail = node; 81 | count++; 82 | return true; 83 | } 84 | 85 | Node* begin() const { return head; } 86 | Node* back() const { return tail; } 87 | Node* end() const { return nullptr; } 88 | 89 | T Get(uint32_t index) const 90 | { 91 | if(index < count) 92 | { 93 | uint32_t i = 0; 94 | auto node = head; 95 | while(node && (i < count)) 96 | { 97 | if(i++ == index) 98 | { 99 | return(node ? node->object : nullptr); 100 | } 101 | node = node->Next; 102 | } 103 | } 104 | return nullptr; 105 | } 106 | 107 | T operator [](uint32_t index) const 108 | { 109 | return Get(index); 110 | } 111 | 112 | T Head() const { return head ? head->object : nullptr; } 113 | T Tail() const { return tail ? tail->object : nullptr; } 114 | 115 | uint32_t Count() const { return count; } 116 | uint32_t IsEmpty() const { return count == 0; } 117 | }; 118 | } 119 | } 120 | */ -------------------------------------------------------------------------------- /src/shared/System/Diagnostics/Thread.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Diagnostics 6 | { 7 | /*class MyClass 8 | { 9 | static DWORD WINAPI StaticThreadStart(void *Param) 10 | { 11 | MyClass *This = (MyClass *)Param; 12 | return This->ThreadStart(); 13 | } 14 | 15 | DWORD ThreadStart(void) 16 | { 17 | // Do stuff 18 | } 19 | 20 | void startMyThread() 21 | { 22 | DWORD ThreadID; 23 | CreateThread(NULL, 0, StaticThreadStart, (void *)this, 0, &ThreadID); 24 | } 25 | }; 26 | */ 27 | /* 28 | bool thread_done = false; 29 | void *thread_function(void *arg) 30 | { 31 | void *res = nullptr; 32 | 33 | try 34 | { 35 | res = real_thread_function(arg); 36 | } 37 | catch (...) 38 | { 39 | } 40 | 41 | thread_done = true; 42 | 43 | return res; 44 | } 45 | 46 | 47 | void threadFunc() { 48 | // your function here 49 | onThreadExit(std::this_thread::get_id()); 50 | } 51 | void onThreadExit(std::thread::id id) { 52 | std::lock_guard lk(some_global_mutex);//you will have concurency here, so protect it 53 | // enter your exit code here 54 | } 55 | */ 56 | class thread 57 | { 58 | HANDLE handle{ nullptr }; 59 | 60 | public: 61 | thread() 62 | { 63 | } 64 | 65 | template 66 | thread(F func, T args = nullptr) 67 | { 68 | create(func, args); 69 | } 70 | 71 | ~thread() 72 | { 73 | detach(); 74 | } 75 | 76 | operator HANDLE() const { return handle; } 77 | operator bool() const { return handle != nullptr; } 78 | 79 | template 80 | thread &operator()(F func, T args = nullptr) 81 | { 82 | return create(func, args); 83 | } 84 | 85 | template 86 | thread& create(F func, T args = nullptr) 87 | { 88 | handle = reinterpret_cast(::_beginthreadex( 89 | nullptr, 0, reinterpret_cast<_beginthreadex_proc_type>(func), reinterpret_cast(args), 0, nullptr)); 90 | return *this; 91 | } 92 | 93 | bool join() 94 | { 95 | if(!handle) return false; 96 | 97 | unsigned long res; 98 | if(::WaitForSingleObjectEx(handle, INFINITE, FALSE) == WAIT_FAILED || ::GetExitCodeThread(handle, &res) == 0) 99 | return false; 100 | return detach(); 101 | } 102 | 103 | bool detach() 104 | { 105 | if(handle && ::CloseHandle(handle)) 106 | { 107 | handle = nullptr; 108 | return true; 109 | } 110 | return false; 111 | } 112 | 113 | uint32_t id() const 114 | { 115 | return ::GetCurrentThreadId(); 116 | } 117 | 118 | template 119 | static bool start(F func, T args = nullptr) 120 | { 121 | if(auto hThread = ::CreateThread(nullptr, 0, reinterpret_cast(func), reinterpret_cast(args), 0, nullptr)) 122 | { // Destroy the thread object. 123 | ::CloseHandle(hThread); 124 | return true; 125 | } 126 | return false; 127 | } 128 | 129 | static void exit(uint32_t exit_code = 0) 130 | { 131 | ::ExitThread(exit_code); 132 | } 133 | 134 | template 135 | static bool begin(F func, T args = nullptr) 136 | { 137 | if(auto handle = ::_beginthreadex(nullptr, 0, reinterpret_cast<_beginthreadex_proc_type>(func), reinterpret_cast(args), 0, nullptr)) 138 | { // Destroy the thread object. 139 | ::CloseHandle(reinterpret_cast(handle)); 140 | return true; 141 | } 142 | return false; 143 | } 144 | 145 | static void end(uint32_t exit_code = 0) 146 | { 147 | ::_endthreadex(exit_code); 148 | } 149 | }; 150 | } 151 | } -------------------------------------------------------------------------------- /src/shared/System/Drawing/Brush.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | //#include "Icon.h" 3 | //#include "DC.h" 4 | //#include "Bitmap.h" 5 | 6 | namespace Nilesoft 7 | { 8 | namespace Drawing 9 | { 10 | /* 11 | struct Brush0 12 | { 13 | uint32_t _color = CLR_INVALID; 14 | 15 | HBRUSH _hbrush = nullptr; 16 | 17 | Brush0() {} 18 | 19 | Brush0(uint32_t color) : _color{ color } 20 | { 21 | create(); 22 | } 23 | 24 | ~Brush0() 25 | { 26 | if(_hbrush) ::DeleteObject(_hbrush); 27 | } 28 | 29 | HBRUSH create() 30 | { 31 | _hbrush = ::CreateSolidBrush(_color); 32 | return _hbrush; 33 | } 34 | 35 | operator HBRUSH() { return _hbrush; } 36 | }; 37 | */ 38 | class Brush 39 | { 40 | bool _delete = true; 41 | 42 | public: 43 | HBRUSH Handle = nullptr; 44 | 45 | Brush() 46 | { 47 | } 48 | 49 | Brush(HBRUSH hbrush, bool delete_) 50 | { 51 | Release(); 52 | Handle = hbrush; 53 | _delete = delete_; 54 | } 55 | 56 | Brush(COLORREF clr) 57 | { 58 | Release(); 59 | Handle = ::CreateSolidBrush(clr); 60 | } 61 | 62 | ~Brush() 63 | { 64 | Release(); 65 | } 66 | 67 | void Release() 68 | { 69 | if(Handle && _delete) 70 | ::DeleteObject(Handle); 71 | 72 | Handle = nullptr; 73 | _delete = true; 74 | } 75 | 76 | operator HBRUSH() const { return Handle; } 77 | //operator COLORREF() const { return ToColor(); } 78 | 79 | Brush& From(COLORREF clr) 80 | { 81 | Release(); 82 | Handle = ::CreateSolidBrush(clr); 83 | return *this; 84 | } 85 | 86 | Brush& From(HBRUSH hbrush, bool delete_) 87 | { 88 | Release(); 89 | Handle = hbrush; 90 | _delete = delete_; 91 | return *this; 92 | } 93 | 94 | COLORREF ToColor() const 95 | { 96 | return ToColor(Handle); 97 | } 98 | 99 | static COLORREF ToColor(HBRUSH hbrush) 100 | { 101 | if(hbrush) 102 | { 103 | auto sizeof_LOGBRUSH = (int)sizeof(LOGBRUSH); 104 | LOGBRUSH lb { }; 105 | if(sizeof_LOGBRUSH == ::GetObjectW(hbrush, sizeof_LOGBRUSH, &lb)) 106 | return lb.lbColor; 107 | } 108 | return 0x000000; 109 | } 110 | }; 111 | } 112 | } -------------------------------------------------------------------------------- /src/shared/System/Drawing/Icon.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Drawing 6 | { 7 | class Icon 8 | { 9 | inline static const auto cx = ::GetSystemMetrics(SM_CXSMICON); 10 | 11 | public: 12 | static HICON FromFile(const wchar_t* path, int size) 13 | { 14 | return (HICON)::LoadImageW(nullptr, path, IMAGE_ICON, 15 | size > cx ? size : cx, 16 | size > cx ? size : cx, 17 | LR_LOADFROMFILE | LR_SHARED); 18 | } 19 | 20 | /*static HICON FromAssociated(const wchar_t* path, int size) 21 | { 22 | SHFILEINFOW sfi = { }; 23 | auto hr = ::SHGetFileInfoW(path, FILE_ATTRIBUTE_NORMAL, 24 | &sfi, sizeof(sfi), 25 | SHGFI_ICON | (size > cx ? SHGFI_LARGEICON : SHGFI_SMALLICON)); 26 | return SUCCEEDED(hr) ? sfi.hIcon : nullptr; 27 | }*/ 28 | 29 | static HICON FromFileTypeIcon(const wchar_t *extension, int size) 30 | { 31 | // if(extension[0] != '.') extension = '.' + extension; 32 | SHFILEINFOW sfi = { }; 33 | auto hr = ::SHGetFileInfoW(extension, 0, 34 | &sfi, sizeof(sfi), 35 | SHGFI_OPENICON | SHGFI_ICON | (size > cx ? SHGFI_LARGEICON : SHGFI_SMALLICON) | SHGFI_USEFILEATTRIBUTES); 36 | return SUCCEEDED(hr) ? sfi.hIcon : nullptr; 37 | } 38 | 39 | static HICON FromResource(const wchar_t* path, int size) 40 | { 41 | string p = path; 42 | int index = IO::Path::ParseLocation(p); 43 | return FromResourceByIndex(p, index, size); 44 | } 45 | 46 | static HICON FromResourceById(const wchar_t* path, const wchar_t* id) 47 | { 48 | return ::LoadIconW(DLL(path), id); 49 | } 50 | 51 | static HICON FromResourceByIndex(const wchar_t *path, int index, int size) 52 | { 53 | HICON hIcon = nullptr; 54 | if(size > cx) 55 | ::ExtractIconExW(path, index, &hIcon, nullptr, 1); 56 | else 57 | ::ExtractIconExW(path, index, nullptr, &hIcon, 1); 58 | return hIcon; 59 | } 60 | }; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/shared/System/Drawing/Utility.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | //#include "Icon.h" 3 | //#include "DC.h" 4 | //#include "Bitmap.h" 5 | 6 | namespace Nilesoft 7 | { 8 | namespace Drawing 9 | { 10 | 11 | class Brush 12 | { 13 | bool _delete = true; 14 | 15 | public: 16 | HBRUSH Handle = nullptr; 17 | 18 | Brush() 19 | { 20 | } 21 | 22 | Brush(HBRUSH hbrush, bool delete_) 23 | { 24 | Release(); 25 | Handle = hbrush; 26 | _delete = delete_; 27 | } 28 | 29 | Brush(COLORREF clr) 30 | { 31 | Release(); 32 | Handle = ::CreateSolidBrush(clr); 33 | } 34 | 35 | ~Brush() 36 | { 37 | Release(); 38 | } 39 | 40 | void Release() 41 | { 42 | if(Handle && _delete) 43 | ::DeleteObject(Handle); 44 | 45 | Handle = nullptr; 46 | _delete = true; 47 | } 48 | 49 | operator HBRUSH() const { return Handle; } 50 | operator COLORREF() const { return ToColor(); } 51 | 52 | /*Brush& operator =(HBRUSH hbr) const 53 | { 54 | Release(); 55 | Handle = hbr; 56 | _delete = true; 57 | return *this; 58 | }*/ 59 | 60 | Brush& From(HBRUSH hbrush, bool delete_) 61 | { 62 | Release(); 63 | Handle = hbrush; 64 | _delete = delete_; 65 | return *this; 66 | } 67 | 68 | Brush& From(COLORREF clr) 69 | { 70 | Release(); 71 | Handle = ::CreateSolidBrush(clr); 72 | return *this; 73 | } 74 | 75 | COLORREF ToColor() const 76 | { 77 | return ToColor(Handle); 78 | } 79 | 80 | static COLORREF ToColor(HBRUSH hbrush) 81 | { 82 | if(hbrush) 83 | { 84 | LOGBRUSH lb { }; 85 | if(::GetObjectW(hbrush, sizeof(LOGBRUSH), &lb)) 86 | return lb.lbColor; 87 | } 88 | return 0x000000; 89 | } 90 | }; 91 | } 92 | } -------------------------------------------------------------------------------- /src/shared/System/Exception.h: -------------------------------------------------------------------------------- 1 |  2 | #pragma once 3 | /* 4 | #include 5 | #include 6 | #include 7 | */ 8 | namespace Nilesoft 9 | { 10 | class Exception : public std::exception 11 | { 12 | protected: 13 | std::wstring msg{}; 14 | 15 | public: 16 | Exception(const std::string &message) 17 | : std::exception(message.c_str()) 18 | { 19 | } 20 | 21 | Exception(std::wstring const &message) 22 | : msg{ message } 23 | { 24 | } 25 | 26 | Exception(const wchar_t *message) 27 | : msg{ message } 28 | { 29 | } 30 | 31 | Exception(const wchar_t *format, ...) 32 | { 33 | if(format != nullptr) 34 | { 35 | va_list args; 36 | va_start(args, format); 37 | msg.resize(std::vswprintf(nullptr, 0, format, args), '\0'); 38 | std::vswprintf(&msg[0], msg.size() + 1, format, args); 39 | va_end(args); 40 | } 41 | } 42 | 43 | virtual std::wstring const &Message() const 44 | { 45 | return msg; 46 | } 47 | 48 | static DWORD Filter(DWORD exceptionCode, EXCEPTION_POINTERS *ei) 49 | { 50 | (ei); 51 | // we handle all exceptions 52 | DWORD dwResult = EXCEPTION_EXECUTE_HANDLER; 53 | switch(exceptionCode) 54 | { 55 | case EXCEPTION_ACCESS_VIOLATION: 56 | case EXCEPTION_INVALID_HANDLE: 57 | case EXCEPTION_STACK_OVERFLOW: 58 | case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: 59 | case EXCEPTION_BREAKPOINT: 60 | case EXCEPTION_DATATYPE_MISALIGNMENT: 61 | case EXCEPTION_FLT_DENORMAL_OPERAND: 62 | case EXCEPTION_FLT_DIVIDE_BY_ZERO: 63 | case EXCEPTION_FLT_INEXACT_RESULT: 64 | case EXCEPTION_FLT_INVALID_OPERATION: 65 | case EXCEPTION_FLT_OVERFLOW: 66 | case EXCEPTION_FLT_STACK_CHECK: 67 | case EXCEPTION_FLT_UNDERFLOW: 68 | case EXCEPTION_INT_DIVIDE_BY_ZERO: 69 | case EXCEPTION_INT_OVERFLOW: 70 | case EXCEPTION_PRIV_INSTRUCTION: 71 | case EXCEPTION_NONCONTINUABLE_EXCEPTION: 72 | case EXCEPTION_GUARD_PAGE: 73 | case EXCEPTION_INVALID_DISPOSITION: 74 | case EXCEPTION_ILLEGAL_INSTRUCTION: 75 | 76 | case STATUS_HEAP_CORRUPTION: 77 | case STATUS_STACK_BUFFER_OVERRUN: 78 | { 79 | dwResult = EXCEPTION_EXECUTE_HANDLER; 80 | break; 81 | } 82 | } 83 | return dwResult; 84 | } 85 | 86 | static DWORD Filter(DWORD exceptionCode) 87 | { 88 | return Filter(exceptionCode, nullptr); 89 | } 90 | }; 91 | } 92 | 93 | -------------------------------------------------------------------------------- /src/shared/System/Int.h: -------------------------------------------------------------------------------- 1 | //#pragma once 2 | // 3 | //namespace Core 4 | //{ 5 | // struct Int8 6 | // { 7 | // public: 8 | // constexpr static int MinValue = (-127 - 1); 9 | // constexpr static int MaxValue = 127; 10 | // }; 11 | // 12 | // struct uint32_t8 13 | // { 14 | // public: 15 | // constexpr static unsigned int MaxValue = 0xff; 16 | // }; 17 | // 18 | // typedef struct Int16 19 | // { 20 | // public: 21 | // constexpr static int MinValue = (-32767 - 1); 22 | // constexpr static int MaxValue = 32767; 23 | // }Short; 24 | // 25 | // typedef struct uint32_t16 26 | // { 27 | // public: 28 | // constexpr static unsigned int MaxValue = 0xffff; 29 | // }UShort; 30 | // 31 | // struct Int32 32 | // { 33 | // public: 34 | // constexpr static int MinValue = (-2147483647 - 1); 35 | // constexpr static int MaxValue = 2147483647; 36 | // }; 37 | // 38 | // struct uint32_t32 39 | // { 40 | // public: 41 | // constexpr static unsigned int MaxValue = 0xffffffff; 42 | // }; 43 | // 44 | // struct Long 45 | // { 46 | // public: 47 | // constexpr static long MinValue = (-2147483647 - 1); 48 | // constexpr static long MaxValue = 2147483647; 49 | // }; 50 | // 51 | // struct ULong 52 | // { 53 | // public: 54 | // constexpr static unsigned long MaxValue = 0xffffffff; 55 | // }; 56 | // 57 | // struct Int64 58 | // { 59 | // public: 60 | // constexpr static __int64 MinValue = (-9223372036854775807 - 1); 61 | // constexpr static __int64 MaxValue = 9223372036854775807; 62 | // }; 63 | // 64 | // struct uint64_t 65 | // { 66 | // public: 67 | // constexpr static unsigned __int64 MaxValue = 0xffffffffffffffff; 68 | // }; 69 | // 70 | // struct Int 71 | // { 72 | // private: 73 | // size_t value; 74 | // 75 | // public: 76 | // Int(void) : value(0) {} 77 | // Int(size_t val) : value(val) {} 78 | // Int(short val) : value(val) {} 79 | // Int(int val) : value(val) {} 80 | // Int(long val) : value(val) {} 81 | // Int(__int64 val) : value(val) {} 82 | // 83 | // Int(unsigned short val) : value(val) {} 84 | // Int(unsigned int val) : value(val) {} 85 | // Int(unsigned long val) : value(val) {} 86 | // // Int(unsigned __int64 val) : value(val) {} 87 | // 88 | // operator size_t(void) { return value; } 89 | // operator short(void) { return short(value); } 90 | // operator int(void) { return int(value); } 91 | // operator long(void) { return long(value); } 92 | // operator __int64(void) { return __int64(value); } 93 | // 94 | // operator unsigned short(void) { return unsigned short(value); } 95 | // operator unsigned int(void) { return unsigned int(value); } 96 | // operator unsigned long(void) { return unsigned long(value); } 97 | // // operator unsigned __int64(void) { return unsigned __int64(value); } 98 | // 99 | // template 100 | // inline bool operator==(T val) { return this->value == val; } 101 | // template 102 | // inline bool operator!=(T val) { return this->value != val; } 103 | // 104 | // template 105 | // inline const Int& operator=(T val) { this->value = val; return(*this); } 106 | // 107 | // template 108 | // inline const Int& operator+=(int val) { this->value += val; return(*this); } 109 | // 110 | // template 111 | // inline const Int& operator-(T val) { this->value -= val; return(*this); } 112 | // 113 | // template 114 | // inline const Int& operator-=(T val) { this->value -= val; return(*this); } 115 | // 116 | // friend Int operator +(const Int& left, const Int& right) { return left.value + right.value; } 117 | // 118 | // template 119 | // friend Int operator +(const Int& left, const T& right) { return left.value + right; } 120 | // 121 | // template 122 | // friend Int operator +(const T& left, const Int& right) { return left + right.value; } 123 | // 124 | // template 125 | // friend Int operator +(const T& left, const T& right) { return left + right; } 126 | // }; 127 | //} -------------------------------------------------------------------------------- /src/shared/System/Text/StringBuffer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Text 6 | { 7 | class StringBuffer 8 | { 9 | private: 10 | TCHAR* m_pBuffer; 11 | size_t m_nLength; 12 | 13 | public: 14 | StringBuffer() noexcept 15 | : m_pBuffer(nullptr), m_nLength(0) 16 | { 17 | } 18 | 19 | StringBuffer(size_t length) 20 | : m_pBuffer(nullptr), m_nLength(0) 21 | { 22 | this->Resize(length); 23 | } 24 | 25 | StringBuffer(const TCHAR* buffer) 26 | : m_pBuffer(nullptr), m_nLength(0) 27 | { 28 | this->Copy(buffer); 29 | } 30 | 31 | StringBuffer(StringBuffer& buffer) 32 | : m_pBuffer(nullptr), m_nLength(0) 33 | { 34 | this->Copy(buffer); 35 | } 36 | 37 | StringBuffer(StringBuffer* buffer) 38 | : m_pBuffer(nullptr), m_nLength(0) 39 | { 40 | this->Copy(buffer); 41 | } 42 | 43 | ~StringBuffer() 44 | { 45 | if(this->m_pBuffer) 46 | delete[] this->m_pBuffer; 47 | this->m_pBuffer = nullptr; 48 | this->m_nLength = 0; 49 | } 50 | 51 | TCHAR* Resize(size_t length) 52 | { 53 | if(length > this->m_nLength) 54 | { 55 | delete[] this->m_pBuffer; 56 | this->m_pBuffer = new TCHAR[length + 1]{}; 57 | 58 | if(this->m_pBuffer != nullptr) 59 | { 60 | this->m_nLength = length; 61 | } 62 | else 63 | { 64 | this->m_nLength = 0; 65 | } 66 | } 67 | 68 | if(this->m_pBuffer != nullptr && this->m_nLength > 0) 69 | { 70 | this->m_pBuffer[0] = TEXT('\0'); 71 | } 72 | 73 | return this->m_pBuffer; 74 | } 75 | 76 | bool Copy(const TCHAR* buffer) 77 | { 78 | if(nullptr != buffer && nullptr != this->Resize(_tcslen(buffer))) 79 | { 80 | return (0 == _tcscpy_s(this->m_pBuffer, this->m_nLength + 1, buffer)); 81 | } 82 | else 83 | { 84 | return false; 85 | } 86 | } 87 | 88 | bool Copy(StringBuffer& buffer) 89 | { 90 | if(nullptr != this->Resize(buffer.Length())) 91 | { 92 | return (0 == _tcscpy_s(this->m_pBuffer, this->m_nLength + 1, buffer.Buffer())); 93 | } 94 | else 95 | { 96 | return false; 97 | } 98 | } 99 | 100 | bool Copy(StringBuffer* buffer) 101 | { 102 | if(nullptr != buffer) 103 | { 104 | return this->Copy(*buffer); 105 | } 106 | else 107 | { 108 | return false; 109 | } 110 | } 111 | 112 | 113 | public: 114 | 115 | inline size_t Length() 116 | { 117 | return this->m_nLength; 118 | } 119 | 120 | inline TCHAR* Buffer() 121 | { 122 | return this->m_pBuffer; 123 | } 124 | 125 | inline StringBuffer& operator=(const TCHAR* buffer) 126 | { 127 | this->Copy(buffer); 128 | return *this; 129 | } 130 | 131 | inline StringBuffer& operator=(StringBuffer& buffer) 132 | { 133 | this->Copy(buffer); 134 | return *this; 135 | } 136 | 137 | inline StringBuffer& operator=(StringBuffer* buffer) 138 | { 139 | this->Copy(buffer); 140 | return *this; 141 | } 142 | }; 143 | } 144 | } -------------------------------------------------------------------------------- /src/shared/System/Text/TString.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Text 6 | { 7 | template 8 | class String 9 | { 10 | T *string; 11 | public: 12 | String(T *str) : string(str) {} 13 | String(const T *str) : string((wchar_t*)str) {} 14 | ~String() { string = nullptr; } 15 | 16 | void Set(T *str) { string = str; } 17 | 18 | //operator T() { return string; } 19 | operator TCHAR*() { return (TCHAR *)(string); } 20 | operator const TCHAR() { return (const TCHAR *)(string); } 21 | 22 | const String& operator=(T *src) 23 | { 24 | string = src; 25 | return(*this); 26 | } 27 | 28 | const String& operator=(const String &src) 29 | { 30 | string = (wchar_t*)src.ToString(); 31 | return(*this); 32 | } 33 | 34 | const String& operator=(const T* src) 35 | { 36 | string = src; 37 | return(*this); 38 | } 39 | 40 | bool IsEmpty() 41 | { 42 | return string::IsNullOrEmpty(string); 43 | } 44 | 45 | int Length() 46 | { 47 | return string::Length(string); 48 | } 49 | 50 | bool Equle(const T* str, bool ignoreCase = true) 51 | { 52 | return string::Equals(string, str, ignoreCase); 53 | } 54 | 55 | bool Equle(const T* str1, const T* str2, const T* str3 = nullptr) 56 | { 57 | return (Equle(str1) || Equle(str2) || Equle(str3)); 58 | } 59 | 60 | bool Find(T wMatch) 61 | { 62 | return string::Find(string, wMatch) != nullptr; 63 | } 64 | 65 | bool Find(const T* pszMatch) 66 | { 67 | return string::Find(string, pszMatch) != nullptr; 68 | } 69 | 70 | int ToInt() 71 | { 72 | return string::ToInt(string); 73 | } 74 | 75 | int ToInt(int defaultValue = -1) 76 | { 77 | return string::ToInt(string, defaultValue); 78 | } 79 | 80 | int HexToInt(int defaultValue = -1) 81 | { 82 | return string::HexToInt(string, defaultValue); 83 | } 84 | 85 | /*bool IsValid(int nLength = -1) 86 | { 87 | return string::IsValid(pszBlock, nLength); 88 | }*/ 89 | 90 | int Hash() 91 | { 92 | return string::Hash(string); 93 | } 94 | 95 | const T& ToString() 96 | { 97 | return string; 98 | } 99 | }; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/shared/System/Text/Text.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Text 6 | { 7 | class Clipboard 8 | { 9 | public: 10 | static bool Set(const string &str) 11 | { 12 | bool result = false; 13 | // Get Text Length 14 | if(str.length() == 0) 15 | return result; 16 | // Open the clipboard, and empty it. 17 | if(::OpenClipboard(nullptr)) 18 | { 19 | if(::EmptyClipboard()) 20 | { 21 | auto len = str.length() + 1; 22 | // Get Size Of Text In Bytes 23 | auto sizeInBytes = (SIZE_T)len * sizeof(wchar_t); 24 | // Allocate a global memory object for the text. 25 | auto hglbCopy = ::GlobalAlloc(GMEM_MOVEABLE, sizeInBytes); 26 | if(hglbCopy != nullptr) 27 | { 28 | // Lock the handle and copy the text to the buffer. 29 | auto lpstrCopy = ::GlobalLock(hglbCopy); 30 | if(lpstrCopy) { 31 | ::memcpy(lpstrCopy, str.c_str(), sizeInBytes); 32 | // lpstrCopy[textLength] = (TCHAR)0; // NULL Terminate String For Clipboard 33 | ::GlobalUnlock(hglbCopy); 34 | } 35 | // Place the handle on the clipboard. 36 | result = ::SetClipboardData(CF_UNICODETEXT, hglbCopy) != nullptr; 37 | } 38 | } 39 | // Close the clipboard. 40 | ::CloseClipboard(); 41 | } 42 | return result; 43 | } 44 | 45 | static inline void Empty() 46 | { 47 | // Open the clipboard, and empty it. 48 | if(::OpenClipboard(nullptr)) 49 | { 50 | ::EmptyClipboard(); 51 | // Close the clipboard. 52 | ::CloseClipboard(); 53 | } 54 | } 55 | 56 | static bool IsFormatAvailable(uint32_t format) 57 | { 58 | return ::IsClipboardFormatAvailable(format); 59 | } 60 | }; 61 | } 62 | } -------------------------------------------------------------------------------- /src/shared/System/Windows/Forms/MessageBox.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Nilesoft 4 | { 5 | namespace Windows 6 | { 7 | namespace Forms 8 | { 9 | enum class DialogResult 10 | { 11 | None, 12 | OK, 13 | Cancel, 14 | Abort, 15 | Retry, 16 | Ignore, 17 | Yes, 18 | No 19 | }; 20 | 21 | enum class MessageBoxButtons 22 | { 23 | OK, 24 | OKCancel, 25 | AbortRetryIgnore, 26 | YesNoCancel, 27 | YesNo, 28 | RetryCancel, 29 | CancelTryContinue 30 | }; 31 | 32 | enum class MessageBoxIcon 33 | { 34 | None, 35 | Asterisk = MB_ICONASTERISK, 36 | Error = MB_ICONERROR, 37 | Exclamation = MB_ICONEXCLAMATION, 38 | Hand = MB_ICONHAND, 39 | Information = MB_ICONINFORMATION, 40 | Question = MB_ICONQUESTION, 41 | Stop = MB_ICONSTOP, 42 | Warning = MB_ICONWARNING 43 | }; 44 | 45 | class MessageBox 46 | { 47 | public: 48 | static DialogResult Show(const wchar_t* text) 49 | { 50 | return Show(text, L"", MessageBoxIcon::None, MessageBoxButtons::OK); 51 | } 52 | 53 | static DialogResult Show(const wchar_t* text, const wchar_t* caption) 54 | { 55 | return Show(text, caption, MessageBoxIcon::None, MessageBoxButtons::OK); 56 | } 57 | 58 | static DialogResult Show(HWND hwnd, const wchar_t* text, const wchar_t* caption) 59 | { 60 | return Show(hwnd, text, caption, MessageBoxIcon::None, MessageBoxButtons::OK); 61 | } 62 | 63 | static DialogResult Show(const wchar_t* text, const wchar_t* caption, MessageBoxIcon icon) 64 | { 65 | return Show(nullptr, text, caption, icon, MessageBoxButtons::OK); 66 | } 67 | 68 | static DialogResult Show(HWND hwnd, const wchar_t* text, const wchar_t* caption, MessageBoxIcon icon) 69 | { 70 | return Show(hwnd, text, caption, icon, MessageBoxButtons::OK); 71 | } 72 | 73 | static DialogResult Show(const wchar_t* text, const wchar_t* caption, MessageBoxButtons button) 74 | { 75 | return Show(nullptr, text, caption, MessageBoxIcon::None, button); 76 | } 77 | 78 | static DialogResult Show(HWND hwnd, const wchar_t* text, const wchar_t* caption, MessageBoxButtons button) 79 | { 80 | return Show(hwnd, text, caption, MessageBoxIcon::None, button); 81 | } 82 | 83 | static DialogResult Show(const wchar_t* text, const wchar_t* caption, MessageBoxIcon icon, MessageBoxButtons button) 84 | { 85 | return Show(nullptr, text, caption, icon, button); 86 | } 87 | 88 | static DialogResult Show(HWND hwnd, const wchar_t* text, const wchar_t* caption, MessageBoxIcon icon, MessageBoxButtons button) 89 | { 90 | return (DialogResult)::MessageBoxW(hwnd, text, caption, (int)icon | (int)button); 91 | } 92 | }; 93 | } 94 | } 95 | } -------------------------------------------------------------------------------- /src/shared/VC-LTL.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | $(SolutionDir)packages\VC-LTL.5.1.1\build\native 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/shared/shared.vcxitems.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | true 5 | 6 | -------------------------------------------------------------------------------- /src/shared/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // // Including SDKDDKVer.h defines the highest available Windows platform. 4 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 5 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 6 | #include 7 | -------------------------------------------------------------------------------- /src/tools/font/Shell.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/tools/font/Shell.ttf -------------------------------------------------------------------------------- /src/tools/hash/hash.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30611.23 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hash", "Hash\Hash.csproj", "{7B4F25A2-6A5F-4EC5-A96C-A51244F32C87}" 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 | {7B4F25A2-6A5F-4EC5-A96C-A51244F32C87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {7B4F25A2-6A5F-4EC5-A96C-A51244F32C87}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {7B4F25A2-6A5F-4EC5-A96C-A51244F32C87}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {7B4F25A2-6A5F-4EC5-A96C-A51244F32C87}.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 = {8D7015E2-893E-450A-83FD-BC0EE72D740A} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /src/tools/hash/hash/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace Nilesoft 5 | { 6 | static class Program 7 | { 8 | /// 9 | /// The main entry point for the application. 10 | /// 11 | [STAThread] 12 | static void Main(string[] args) 13 | { 14 | Application.SetHighDpiMode(HighDpiMode.SystemAware); 15 | Application.EnableVisualStyles(); 16 | Application.SetCompatibleTextRenderingDefault(false); 17 | 18 | if(args.Length == 0) 19 | Application.Run(new frmGroups()); 20 | else 21 | { 22 | if(args[0] == "-compact") 23 | Application.Run(new frmMain()); 24 | else //if(args[0] == "-full") 25 | Application.Run(new frmGroups()); 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/tools/hash/hash/hash.cs: -------------------------------------------------------------------------------- 1 |  2 | using System; 3 | 4 | namespace Nilesoft 5 | { 6 | public static class Hash 7 | { 8 | public const ulong offset_basis_64 = 14695981039346656037U; 9 | public const ulong prime_64 = 1099511628211UL; 10 | public const uint offset_basis = 2166136261U; 11 | public const uint prime = 16777619U; 12 | 13 | //constexpr auto 14 | //const uint offset_basis = 5381U; 15 | //const auto prime = 33U; 16 | 17 | public static ulong hash64(string str) 18 | { 19 | var h = offset_basis_64; 20 | foreach (var c in str) 21 | { 22 | h ^= c; 23 | h *= prime_64; 24 | } 25 | return h; 26 | } 27 | 28 | public static uint hash(string str) 29 | { 30 | var h = offset_basis; 31 | foreach (var c in str) { 32 | h ^= c; 33 | h *= prime; 34 | } 35 | return h; 36 | } 37 | 38 | public const int Magic = 5381; 39 | 40 | public static int Generate(int hash, char value) 41 | { 42 | return hash * 33 + char.ToLower(value); 43 | } 44 | 45 | public static int Generate(string value) 46 | { 47 | string text = value.Trim(); 48 | int num = 5381; 49 | int num3; 50 | for (int i = 0; i < text.Length; i = num3 + 1) 51 | { 52 | num = Generate(num, text[i]); 53 | num3 = i; 54 | } 55 | return (num != 5381) ? num : 0; 56 | } 57 | 58 | public static string ToString(string input) 59 | { 60 | if (string.IsNullOrEmpty(input)) 61 | { 62 | return null; 63 | } 64 | return "0x" + $"{Generate(input):X8}U"; 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /src/tools/hash/hash/hash.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | WinExe 5 | disable 6 | net9.0-windows 7 | true 8 | enable 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/tools/hash/publish/hash.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/src/tools/hash/publish/hash.exe -------------------------------------------------------------------------------- /src/tools/version/Resource.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define VERSION_MAJOR $MAJOR$ 4 | #define VERSION_MINOR $MINOR$ 5 | #define VERSION_BUILD $BUILD$ 6 | #define VERSION_REV $MAINT$ 7 | #define VERSION_YEAR $YEAR$ 8 | 9 | #define IDI_LOGO 1100; 10 | #define IDI_IMAGES 1101; 11 | 12 | namespace Nilesoft 13 | { 14 | 15 | #define STRINGIFY(x) L#x 16 | #define TOSTRING(x) STRINGIFY(x) 17 | 18 | #ifdef _WIN64 19 | #define APP_PROCESS L"64-bit" 20 | #else 21 | #define APP_PROCESS L"32-bit" 22 | #endif 23 | 24 | //#define APP_IS_CANARY 1 25 | //#define APP_CANARY L"Canary" 26 | 27 | #define APP_COMPANY L"Nilesoft" 28 | #define APP_COMPANYLTD APP_COMPANY L" Ltd" 29 | #define APP_NAMEA "Shell" 30 | #define APP_NAME L"Shell" 31 | #define APP_FULLNAME APP_COMPANY L" " APP_NAME 32 | //#define APP_FULLNAME_VERSION APP_FULLNAME L" (debug)" 33 | #define APP_FILENAME_TITLE L"shell" 34 | 35 | #define APP_PRODUCT_VERSION L"$MAJOR$.$MINOR$" 36 | #define APP_VERSION L"$MAJOR$.$MINOR$.$BUILD$" 37 | //#define APP_VERSION_FULL L"$MAJOR$.$MINOR$ build $BUILD$" 38 | 39 | constexpr auto APP_EMAIL = L"support@nilesoft.org"; 40 | constexpr auto APP_WEBSITE = L"www.nilesoft.org"; 41 | constexpr auto APP_WEBSITELINK = L"https://nilesoft.org"; 42 | 43 | #ifdef _WINDLL 44 | #define APP_FILENAME APP_FILENAME_TITLE L".dll" 45 | #define TRT_MANIFEST 2 46 | #define TFILETYPE VFT_DLL 47 | 48 | #define IDD_INPUTBOX 103 49 | #define IDC_INPUTBOX_PROMPT 1000 50 | #define IDC_INPUTBOX_EDIT 1001 51 | 52 | #else 53 | #define APP_FILENAME APP_FILENAME_TITLE L".exe" 54 | #define TRT_MANIFEST 1 55 | #define TFILETYPE VFT_APP 56 | #endif 57 | 58 | #ifdef _DEBUG 59 | #define VS_DEBUG VS_FF_DEBUG 60 | #else 61 | #define VS_DEBUG 0x0L 62 | #endif 63 | 64 | 65 | #define IDR_CSHELL 101 66 | #define IDD_DIALOG1 102 67 | #define IDI_RPMICON 105 68 | #define IDI_SHELLFONT 106 69 | 70 | 71 | #define IDD_CMDLINE 1000 72 | #define IDC_CMDLINE_TEXT 1001 73 | 74 | #define IDS_ADMIN_PRIVILEGES 2000 75 | #define IDS_WINDOWS_COMPATIBILITY 2001 76 | #define IDS_REGISTER_SUCCESS 2002 77 | #define IDS_UNREGISTER_SUCCESS 2003 78 | #define IDS_REGISTER_NOT_SUCCESS 2004 79 | #define IDS_UNREGISTER_NOT_SUCCESS 2005 80 | #define IDS_RESTART_EXPLORERQ 2006 81 | #define IDS_RESTART_EXPLORER 2007 82 | #define IDS_SELECT_FOLDER 2008 83 | } -------------------------------------------------------------------------------- /src/tools/version/Shell.def: -------------------------------------------------------------------------------- 1 | LIBRARY "shell.dll" 2 | VERSION $MAJOR$.$MINOR$ 3 | EXPORTS 4 | DllCanUnloadNow PRIVATE 5 | DllGetClassObject PRIVATE 6 | ;DllRegisterServer PRIVATE 7 | ;DllUnregisterServer PRIVATE 8 | ;DllInstall PRIVATE -------------------------------------------------------------------------------- /src/tools/version/manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | Nilesoft Shell 10 | 11 | 12 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | True/PM 40 | PerMonitorV2,PerMonitor 41 | true 42 | UTF-8 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/tools/version/var.wxi: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/tools/version/version.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | ::PowerShell.exe -ExecutionPolicy Unrestricted -FILE version.ps1 3 | ::PowerShell.exe -ExecutionPolicy Bypass -FILE version.ps1 4 | cd %~dp0 5 | PowerShell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -FILE version.ps1 -------------------------------------------------------------------------------- /templates/colors.shl: -------------------------------------------------------------------------------- 1 | shell 2 | { 3 | default 4 | { 5 | // view = [auto, compact, small, medium, large, wide] 6 | view = view.compact 7 | // theme = [auto, dark, light, white, black] 8 | theme = theme.black 9 | frame=[#fff, 3] 10 | shadow=false 11 | } 12 | 13 | dynamic 14 | { 15 | menu(title='colors' image=\uE117) 16 | { 17 | item(image=#fff) 18 | item(image=#eee) 19 | item(image=#ddd) 20 | item(image=#ccc) 21 | item(image=#bbb) 22 | item(image=#aaa) 23 | item(image=#999) 24 | item(image=#888) 25 | item(image=#777) 26 | item(image=#666) 27 | item(image=#555) 28 | item(image=#444) 29 | item(image=#333) 30 | item(image=#222) 31 | item(image=#111) 32 | 33 | item(image=#f00 col) 34 | item(image=#e00) 35 | item(image=#d00) 36 | item(image=#c00) 37 | item(image=#b00) 38 | item(image=#a00) 39 | item(image=#900) 40 | item(image=#800) 41 | item(image=#700) 42 | item(image=#600) 43 | item(image=#500) 44 | item(image=#400) 45 | item(image=#300) 46 | item(image=#200) 47 | item(image=#100) 48 | 49 | item(image=#ff0 col) 50 | item(image=#ee0) 51 | item(image=#dd0) 52 | item(image=#cc0) 53 | item(image=#bb0) 54 | item(image=#aa0) 55 | item(image=#990) 56 | item(image=#880) 57 | item(image=#770) 58 | item(image=#660) 59 | item(image=#550) 60 | item(image=#440) 61 | item(image=#330) 62 | item(image=#220) 63 | item(image=#110) 64 | 65 | item(image=#0f0 col) 66 | item(image=#0e0) 67 | item(image=#0d0) 68 | item(image=#0c0) 69 | item(image=#0b0) 70 | item(image=#0a0) 71 | item(image=#090) 72 | item(image=#080) 73 | item(image=#070) 74 | item(image=#060) 75 | item(image=#050) 76 | item(image=#040) 77 | item(image=#030) 78 | item(image=#020) 79 | item(image=#010) 80 | 81 | item(image=#0ff col) 82 | item(image=#0ee) 83 | item(image=#0dd) 84 | item(image=#0cc) 85 | item(image=#0bb) 86 | item(image=#0aa) 87 | item(image=#099) 88 | item(image=#088) 89 | item(image=#077) 90 | item(image=#066) 91 | item(image=#055) 92 | item(image=#044) 93 | item(image=#033) 94 | item(image=#022) 95 | item(image=#011) 96 | 97 | item(image=#00f col) 98 | item(image=#00e) 99 | item(image=#00d) 100 | item(image=#00c) 101 | item(image=#00b) 102 | item(image=#00a) 103 | item(image=#009) 104 | item(image=#008) 105 | item(image=#007) 106 | item(image=#006) 107 | item(image=#005) 108 | item(image=#004) 109 | item(image=#003) 110 | item(image=#002) 111 | item(image=#001) 112 | 113 | item(image=#f0f col) 114 | item(image=#e0e) 115 | item(image=#d0d) 116 | item(image=#c0c) 117 | item(image=#b0b) 118 | item(image=#a0a) 119 | item(image=#909) 120 | item(image=#808) 121 | item(image=#707) 122 | item(image=#606) 123 | item(image=#505) 124 | item(image=#404) 125 | item(image=#303) 126 | item(image=#202) 127 | item(image=#101) 128 | } 129 | } 130 | } -------------------------------------------------------------------------------- /templates/themes/blue.shl: -------------------------------------------------------------------------------- 1 | shell 2 | { 3 | default 4 | { 5 | symbol=#fff 6 | text=[#fff, #fff, #004] 7 | block=[#00b, #00f, 0] 8 | separator=[#00f, 1] 9 | //font = [12, 'Brush Script'] 10 | frame=[#00f, 2] 11 | shadow=false 12 | } 13 | } -------------------------------------------------------------------------------- /templates/themes/gray.shl: -------------------------------------------------------------------------------- 1 | shell 2 | { 3 | default 4 | { 5 | symbol=#fff 6 | text=[#fff, #aaa, #555] 7 | block=[#888, #eee, 0] 8 | separator=[#fff, 1] 9 | frame=[#fff, 2] 10 | shadow=false 11 | } 12 | } -------------------------------------------------------------------------------- /templates/themes/green.shl: -------------------------------------------------------------------------------- 1 | shell 2 | { 3 | default 4 | { 5 | symbol=#000 6 | text=[#000, #000, #040] 7 | block=[#0b0, #0f0, 0] 8 | separator=[#0f0, 1] 9 | //font = [12, 'Brush Script'] 10 | frame=[#0f0, 2] 11 | shadow=false 12 | } 13 | } -------------------------------------------------------------------------------- /templates/themes/images/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/blue.png -------------------------------------------------------------------------------- /templates/themes/images/colors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/colors.png -------------------------------------------------------------------------------- /templates/themes/images/columns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/columns.png -------------------------------------------------------------------------------- /templates/themes/images/font-brush-script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/font-brush-script.png -------------------------------------------------------------------------------- /templates/themes/images/font-fixedsys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/font-fixedsys.png -------------------------------------------------------------------------------- /templates/themes/images/font-segoe-script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/font-segoe-script.png -------------------------------------------------------------------------------- /templates/themes/images/gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/gray.png -------------------------------------------------------------------------------- /templates/themes/images/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/green.png -------------------------------------------------------------------------------- /templates/themes/images/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moudey/Shell/81f8169a9696c8d57a3fdac6da37f0fd97f1244d/templates/themes/images/yellow.png -------------------------------------------------------------------------------- /templates/themes/yellow.shl: -------------------------------------------------------------------------------- 1 | shell 2 | { 3 | default 4 | { 5 | symbol=#fff 6 | text=[#fff, #888, #660] 7 | block=[#bb0, #ff0, 0] 8 | separator=[#ff0, 1] 9 | //font = [12, 'Brush Script'] 10 | frame=[#ff0, 2] 11 | shadow=false 12 | } 13 | } --------------------------------------------------------------------------------