├── .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 | [](https://techforpalestine.org/learn-more)
2 |
3 | [](../../actions/workflows/build.yml)
4 | [](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 | [ ](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 | [](https://www.paypal.me/nilesoft)
73 | [](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 |
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 |
7 | Expressions is non-case sensitive
8 | Expressions (variables and functions) start with @
9 | blocks are enclosed in @( ... )
10 | Strings are enclosed with quotation marks or single quotation marks
11 |
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 | Decimal literal (base 10)
8 | Hexadecimal literal (base 16)
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 | \' Single quote
23 | \" Double quote
24 | \\ Backslash
25 | \0 Null
26 | \a Alert
27 | \b Backspace
28 | \f Form Feed
29 | \n New Line
30 | \r Carriage Return
31 | \t Horizontal Tab
32 | \v Vertical Tab
33 | \uxxxx Unicode escape sequence (UTF-16) \uHHHH (range: 0000 - FFFF)
34 | \xnnnn Unicode escape sequence for character with hex value nnnn (variable length version of \uxxxx)
35 | \Uxxxxxxxx Unicode escape sequence (UTF-32) \U00HHHHHH (range: 000000 - 10FFFF)
36 |
37 |
38 |
--------------------------------------------------------------------------------
/docs/expressions/variables.html:
--------------------------------------------------------------------------------
1 | Variables
2 |
3 | Variables are containers for storing data values.
4 |
5 | Global and local variables are optional.
6 | To declare more than one variable, use a space.
7 |
8 | The general rules for constructing names for variables (unique identifiers) are:
9 |
10 | Names can contain letters, digits and underscores (_
).
11 | Names must begin with a letter.
12 | Names cannot contain whitespaces or special characters like !, #, %, etc.
13 | Reserved words (like keywords, such as null, true, false, etc.) cannot be used as names.
14 | Variables can be placed in globle variables, or in the dynamic body section of an menu, or in both.
15 |
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 |
12 |
13 |
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 |
15 | Tip: You find the configuration file shell.nss
in the Shell program folder. To find the
16 | Shell program folder, use shift +right-click on the Taskbar. The Shell menu
17 | will appear at the top of the context menu. In its submenu, you can click on directory
to open the folder
18 | where the Shell configuration files are saved.
19 |
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 |
25 | Tip: After editing any nss file, you'll need to update changes: hold ctrl +right-click
26 | on the desktop area or Taskbar to force Shell to reload the nss files. Alternatively, or you can restart
27 | Windows Explorer .
28 |
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 |
15 | Is portable, fun and easy to learn!
16 | Configuration in plain text.
17 | Quick loading.
18 | Minimal resource usage.
19 | No limitations.
20 | Embedded expressions syntax.
21 | Built-in functions and predefined variables.
22 | Multiple sources of images (embedded icons, image files, svg, glyphs, and colors).
23 | Dynamic search and filter.
24 | Support Taskbar context menu.
25 | Full management of the context menu.
26 |
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 | }
--------------------------------------------------------------------------------