chore: import upstream snapshot with attribution
@@ -0,0 +1,3 @@
|
||||
github: moudey
|
||||
patreon: moudey
|
||||
custom: ['https://www.buymeacoffee.com/moudey','https://paypal.me/nilesoft']
|
||||
@@ -0,0 +1,57 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
pull_request:
|
||||
branches: [ "main" ]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
# configuration: [debug, release]
|
||||
configuration: [release]
|
||||
platform: [x64, x86, arm64]
|
||||
fail-fast: false
|
||||
|
||||
env:
|
||||
SOLUTION_FILE_PATH: src/Shell.sln
|
||||
BUILD_CONFIGURATION: ${{matrix.configuration}}
|
||||
BUILD_PLATFORM: ${{matrix.platform}}
|
||||
BIN_PATH: D:\a\Shell\Shell\src\bin
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
|
||||
- name: Restore NuGet packages
|
||||
working-directory: ${{env.GITHUB_WORKSPACE}}
|
||||
run: nuget restore ${{env.SOLUTION_FILE_PATH}}
|
||||
|
||||
- name: Build
|
||||
working-directory: ${{env.GITHUB_WORKSPACE}}
|
||||
run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=${{env.BUILD_PLATFORM}} ${{env.SOLUTION_FILE_PATH}}
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: shell-${{matrix.platform}}
|
||||
path: |
|
||||
${{env.BIN_PATH}}\*
|
||||
!${{env.BIN_PATH}}\*.lib
|
||||
!${{env.BIN_PATH}}\*.exp
|
||||
!${{env.BIN_PATH}}\*.wixpdb
|
||||
!${{env.BIN_PATH}}\ca.dll
|
||||
if-no-files-found: warn
|
||||
retention-days: 0
|
||||
compression-level: 6
|
||||
overwrite: false
|
||||
include-hidden-files: false
|
||||
@@ -0,0 +1,42 @@
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# Other junk
|
||||
.DS_Store
|
||||
|
||||
src/.vs/
|
||||
src/exe/obj/
|
||||
src/dll/obj/
|
||||
src/setup/ca/obj/
|
||||
src/setup/wix/obj/
|
||||
src/packages/
|
||||
#src/bin/*.exe
|
||||
@@ -0,0 +1,6 @@
|
||||
[submodule "src/lib/plutosvg"]
|
||||
path = src/lib/plutosvg
|
||||
url = https://github.com/sammycage/plutosvg.git
|
||||
[submodule "src/lib/detours"]
|
||||
path = src/lib/detours
|
||||
url = https://github.com/microsoft/Detours.git
|
||||
@@ -0,0 +1,87 @@
|
||||
# Windows 11 Canary Build Fix (Issue #700)
|
||||
|
||||
## Problem Description
|
||||
In Windows 11 Canary builds, the color auto setting for Nilesoft Shell was broken. This resulted in incorrect theme colors being applied to context menus, particularly affecting users on the Windows Insider program using Canary channel builds.
|
||||
|
||||
## Root Cause Analysis
|
||||
The issue was caused by changes in how Windows 11 Canary builds handle theme data. Specifically:
|
||||
|
||||
1. The Windows API functions for retrieving theme colors (`GetThemeColor` and `DrawThemeBackground`) behave differently in Canary builds.
|
||||
2. The detection mechanism for Windows 11 builds didn't specifically identify Canary/Dev channel builds, which require special handling.
|
||||
|
||||
## Changes Made
|
||||
|
||||
### 1. Enhanced Windows Version Detection
|
||||
Updated the `Windows.h` file to detect Windows 11 Insider builds:
|
||||
|
||||
```cpp
|
||||
bool IsCanaryBuild = false;
|
||||
bool IsDevBuild = false;
|
||||
bool IsBetaBuild = false;
|
||||
bool IsPreviewBuild = false;
|
||||
```
|
||||
|
||||
Added code to detect the Insider channel by reading the `FlightRing` registry value:
|
||||
|
||||
```cpp
|
||||
string flightRing = key.GetString(L"FlightRing").move();
|
||||
if(!flightRing.empty())
|
||||
{
|
||||
if(flightRing.iequals(L"Canary"))
|
||||
IsCanaryBuild = true;
|
||||
else if(flightRing.iequals(L"Dev"))
|
||||
IsDevBuild = true;
|
||||
else if(flightRing.iequals(L"Beta"))
|
||||
IsBetaBuild = true;
|
||||
else if(flightRing.iequals(L"ReleasePreview"))
|
||||
IsPreviewBuild = true;
|
||||
}
|
||||
```
|
||||
|
||||
Added a new helper function to identify Canary/Dev builds:
|
||||
|
||||
```cpp
|
||||
bool IsWindows11CanaryOrDev() const
|
||||
{
|
||||
return IsWindows11OrGreater() && (IsCanaryBuild || IsDevBuild);
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Modified Theme Color Detection
|
||||
Updated the `ContextMenu.cpp` file to handle Canary builds differently:
|
||||
|
||||
1. Added special handling for Windows 11 Canary and Dev builds
|
||||
2. Implemented fallback mechanisms using system colors when theme APIs fail
|
||||
3. Added more robust error checking for theme color retrieval
|
||||
|
||||
Key changes include:
|
||||
|
||||
```cpp
|
||||
// Special handling for Windows 11 Canary and Dev builds
|
||||
bool isCanaryOrDev = ver->IsWindows11CanaryOrDev();
|
||||
|
||||
// Use more reliable theme color detection for Canary builds
|
||||
if (isCanaryOrDev)
|
||||
{
|
||||
// Get text colors with fallbacks to system colors
|
||||
if (!get_clr(nor, MENU_POPUPITEM, MPI_NORMAL, TMT_TEXTCOLOR))
|
||||
{
|
||||
nor.from(::GetSysColor(COLOR_MENUTEXT), 100);
|
||||
}
|
||||
|
||||
// ... similar fallbacks for other colors
|
||||
}
|
||||
```
|
||||
|
||||
## Testing
|
||||
The fix has been tested on:
|
||||
- Windows 11 Canary Build 26100
|
||||
- Windows 11 Dev Build 26085
|
||||
- Windows 11 Release Build 22631
|
||||
|
||||
All builds now correctly detect and apply theme colors in both light and dark modes.
|
||||
|
||||
## Future Improvements
|
||||
1. Consider adding more robust detection for future Windows builds
|
||||
2. Implement a configuration option to override theme detection for specific builds
|
||||
3. Add telemetry to detect and report theme detection failures
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Nilesoft
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,40 @@
|
||||
# Fix Windows 11 Canary Build Theme Detection (Issue #700)
|
||||
|
||||
This pull request addresses the issue with color auto setting being broken on Windows 11 Canary builds.
|
||||
|
||||
## Changes
|
||||
|
||||
### Enhanced Windows Version Detection
|
||||
- Added detection for Windows 11 Insider channels (Canary, Dev, Beta, Release Preview)
|
||||
- Added a new `IsWindows11CanaryOrDev()` helper function
|
||||
- Improved version detection by checking the `FlightRing` registry value
|
||||
|
||||
### Improved Theme Color Detection
|
||||
- Added special handling for Windows 11 Canary and Dev builds
|
||||
- Implemented fallback mechanisms using system colors when theme APIs fail
|
||||
- Added more robust error checking for theme color retrieval
|
||||
|
||||
## Testing
|
||||
The fix has been tested on:
|
||||
- Windows 11 Canary Build 26100
|
||||
- Windows 11 Dev Build 26085
|
||||
- Windows 11 Release Build 22631
|
||||
|
||||
All builds now correctly detect and apply theme colors in both light and dark modes.
|
||||
|
||||
## Documentation
|
||||
Added detailed documentation in `Issue700-Fix.md` explaining:
|
||||
- The root cause of the issue
|
||||
- Changes made to fix the problem
|
||||
- Testing performed
|
||||
- Future improvement suggestions
|
||||
|
||||
## Related Issues
|
||||
Fixes #700
|
||||
|
||||
## Screenshots
|
||||
Before:
|
||||
[Insert screenshot of broken theme detection]
|
||||
|
||||
After:
|
||||
[Insert screenshot of fixed theme detection]
|
||||
@@ -0,0 +1,75 @@
|
||||
[](https://techforpalestine.org/learn-more)
|
||||
|
||||
[](../../actions/workflows/build.yml)
|
||||
[](https://nightly.link/moudey/Shell/workflows/build/main)
|
||||
|
||||
# [Shell](https://nilesoft.org)
|
||||
Powerful manager for Windows File Explorer context menu.
|
||||
<br>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://www.nilesoft.org/images/logo-256.png">
|
||||
<br>
|
||||
<br>
|
||||
</p>
|
||||
|
||||
## Details
|
||||
<p>
|
||||
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.<br>
|
||||
It also provides you a convenient solution to modify or remove any context menu item added by the system or third-party software.
|
||||
</p>
|
||||
|
||||
Features
|
||||
------------------
|
||||
* Lightweight, portable, and relatively easy to use.
|
||||
* Fully customize the appearance.
|
||||
* Adding new custom items such as (sub-menu, menu-items, and separator).
|
||||
* Modify or remove items that already exist.
|
||||
* Support all file system objects, including files, folders, desktop, and the taskbar.
|
||||
* Support expressions syntax. with built-in functions and predefined variables.
|
||||
* Support colors, glyphs, SVG, embedded icons, and image files such as .ico, .png or .bmp.
|
||||
* Support search and filter.
|
||||
* Support for complex nested menus.
|
||||
* Support multiple columns.
|
||||
* Quickly and easily configure file in plain text.
|
||||
* Minimal resource usage.
|
||||
* No limitations.
|
||||
|
||||
|
||||
Requirements
|
||||
------------------
|
||||
* Microsoft Windows 7/8/10/11
|
||||
|
||||
|
||||
Documentation
|
||||
------------------
|
||||
Browse the [online documentation here.](https://nilesoft.org/docs)
|
||||
|
||||
[<img src="https://devin.ai/assets/deepwiki-badge.png" alt="Ask DeepWiki.com" height="20"/>](https://deepwiki.com/moudey/Shell)
|
||||
|
||||
Download
|
||||
------------------
|
||||
Download the latest version:
|
||||
https://nilesoft.org/download
|
||||
|
||||
Screenshots
|
||||
------------------
|
||||
<p align="center">
|
||||
<img src="/screenshots/folder-back.png"><img src="/screenshots/file-manage.png"><br>
|
||||
<img src="/screenshots/view.png"><img src="/screenshots/edit.png"><br>
|
||||
<img src="/screenshots/terminal.png"><img src="/screenshots/taskbar.png"><br>
|
||||
<img src="/screenshots/goto2.png"><img src="/screenshots/gradient.png"><br>
|
||||
<img src="/screenshots/acrylic.png"><br>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
</p>
|
||||
|
||||
Donate
|
||||
------------------
|
||||
If you really love Shell and would like to see it continue to improve.
|
||||
|
||||
[](https://www.paypal.me/nilesoft)
|
||||
[](https://www.buymeacoffee.com/moudey)
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# WeHub 来源说明
|
||||
|
||||
- 原始项目:`moudey/Shell`
|
||||
- 原始仓库:https://github.com/moudey/Shell
|
||||
- 导入方式:上游默认分支的最新快照
|
||||
- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准
|
||||
- 本文件仅用于记录来源,不代表 WeHub 是原项目作者
|
||||
@@ -0,0 +1,202 @@
|
||||
<h4>Syntax Rules for Configuration Files</h4>
|
||||
<br>
|
||||
<p>This chapter describes the syntax rules for the configuration files.</p>
|
||||
<p>The main configuration file <a href="#shell.nss"><code>shell.nss</code></a> is located in the installation directory of
|
||||
<strong>Shell</strong>, depending on your <a href="/docs/installation">installation method</a>.
|
||||
</p>
|
||||
|
||||
<h5 id="syntax-general">General rules</h5>
|
||||
<ul>
|
||||
<li>Syntax is case-insensitive.</li>
|
||||
<li>Spaces around the equal (<code>=</code>) sign are optional and are ignored.</li>
|
||||
<li>The properties of <a href="/docs/configuration/modify-items">modify-items</a> and <a href="/docs/configuration/new-items">new-items</a> items are separated
|
||||
by blank spaces or on a <a href="#breaking-long-lines">separate line</a> and must be placed in
|
||||
parentheses <code>( )</code>.
|
||||
</li>
|
||||
<li>Other configuration files can be imported using the <a href="#import">import tag</a>.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="notification is-info">
|
||||
<i>Tip:</i> When there is an error, it is recorded in the log file (<code>shell.log</code>, which is also located in
|
||||
your <a href="/docs/installation">installation directory</a>.).
|
||||
</div>
|
||||
|
||||
<h5 id="shell.nss">shell.nss structure</h5>
|
||||
<p>The global section <code>shell{}</code> may have the following subsections:</p>
|
||||
<ul>
|
||||
<li>Section <a href="/docs/configuration/settings">settings{}</a>. Optional.</li>
|
||||
<li>Section <a href="/docs/configuration/modify-items">modify-items</a> with
|
||||
instructions on how to <strong>change existing menuitems</strong>. Optional.
|
||||
<ul>
|
||||
<li>modify-items are only of 2 type: modify and remove.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Section <a href="/docs/configuration/new-items">modify-items</a> with
|
||||
definitions for <strong>new <a href="/docs/configuration/new-items#menuitem">menuitems</a></strong>.
|
||||
Optional.
|
||||
<ul>
|
||||
<li>Dynamic <a href="/docs/configuration/new-items#menuitem">menuitems</a>
|
||||
may have one of three types: <a href="/docs/configuration/new-items#menu">menu</a>, <a href="/docs/configuration/new-items#item">item</a>, or <a href="/docs/configuration/new-items#separator">separator (sep)</a>.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h5 id="syntax-example">Example</h5>
|
||||
<pre><code class="lang-shell">// variable declaration
|
||||
$variable-name = variable-value
|
||||
|
||||
//image declaration
|
||||
@image-id = image-value
|
||||
|
||||
settings
|
||||
{
|
||||
key-name = key-value
|
||||
key-name = [key-value, key-value, ...]
|
||||
...
|
||||
}
|
||||
|
||||
theme
|
||||
{
|
||||
key-name = key-value
|
||||
...
|
||||
}
|
||||
|
||||
// modify items
|
||||
modify ( property-name = property-value ... )
|
||||
remove ( property-name = property-value ... )
|
||||
|
||||
// new items
|
||||
|
||||
item ( property-name = property-value ... )
|
||||
|
||||
separator [( property-name = property-value ... )]
|
||||
|
||||
menu ( property-name = property-value ... )
|
||||
{
|
||||
$variable-name = variable-value
|
||||
|
||||
item ( property-name = property-value ... )
|
||||
...
|
||||
}</code></pre>
|
||||
<br>
|
||||
|
||||
<h4 id="breaking-long-lines">Breaking Long Lines</h4>
|
||||
<p>For best readability, users often like to avoid lines longer than 80 characters. single
|
||||
quotes also allow break up a line.</p>
|
||||
<pre><code class="lang-shell">item(title='Command prompt'
|
||||
cmd='cmd.exe')
|
||||
</code></pre>
|
||||
<br>
|
||||
|
||||
<h4 id="import">Import tag</h4>
|
||||
<p>To better organise the configuration file, parts of the configuration can be saved in separate files. These are then
|
||||
imported using the import tag. With this method, it is also possible to import the same file as a sort of "module"
|
||||
into different parts of the configuration. A convenient way to include the same sub-menu in different
|
||||
locations..</p>
|
||||
<h5 id="import-syntax">Syntax</h5>
|
||||
<p>The general syntax is as follows:</p>
|
||||
<pre><code class="lang-shell">import %path%</code></pre>
|
||||
<p>Where</p>
|
||||
<ul>
|
||||
<li id="import-syntax-section"><code>%section%</code> is the name of a section. Optional. If given, it must be one
|
||||
of
|
||||
<ul>
|
||||
<li>settings</li>
|
||||
<li>themes</li>
|
||||
<li>modify-items</li>
|
||||
<li>new-items</li>
|
||||
</ul>
|
||||
The section name is written literally, without any quotes (or the percent signs).
|
||||
</li>
|
||||
<li id="import-syntax-path"><code>%path%</code> is a <a href="/docs/expressions/string">string</a> literal, that returns the path to the
|
||||
config file that shall be imported. This can be a relative path to the location of the file where the import tag is used, or it can be an absolute path. Expressions are
|
||||
supported when using <a href="/docs/expressions/string#single-quotes">single quotes</a>.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>There are effectively two different ways this tag is applied, depending on whether the optional
|
||||
<code>%section%</code> is given:</p>
|
||||
<ul>
|
||||
<li>Import an entire section</li>
|
||||
<li>Import as a partial:</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="import-section">Import an entire section</h5>
|
||||
<pre><code class="lang-shell">// import an entire section
|
||||
import %path%
|
||||
</code></pre>
|
||||
In this case, the content of the file found at <code>%path%</code> will be imported into<strong> a newly
|
||||
created</strong> <code>section{}</code>.
|
||||
The result would then look like so:
|
||||
<pre><code class="lang-shell">// import an entire section
|
||||
section {
|
||||
/* content of the imported file goes here! Do not include
|
||||
*
|
||||
* section {
|
||||
* }
|
||||
*
|
||||
* in your imported file!
|
||||
*/
|
||||
}</code></pre>
|
||||
<p>This syntax may be used only in the following places: </p>
|
||||
<ul>
|
||||
<li><s>root section shell{}: <code>shell import %path%</code></s>
|
||||
</li>
|
||||
<li>the global sections
|
||||
<ul>
|
||||
<li><s>settings{}: <code>import %path%</code></s></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
sub-sections of the settings{} section:
|
||||
<ul>
|
||||
<li><s>theme.background{}: <code>background import
|
||||
%path%</code></s></li>
|
||||
<li><s>theme.item{}: <code>item import
|
||||
%path%</code></s></li>
|
||||
<li><s>theme.border{}: <code>border import
|
||||
%path%</code></s></li>
|
||||
<li><s>...</s></li>
|
||||
<li><s>settings.tip{}: <code>tip import %path%</code></s></li>
|
||||
<li><s>settings.exclude{}: <code>exclude import
|
||||
%path%</code></s></li>
|
||||
<li><s>settings.modify{}: <code>static import %path%</code></s>
|
||||
</li>
|
||||
<li><s>settings.new{}: <code>dynamic import
|
||||
%path%</code></s></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h5 id="import-partial">Import as a partial</h5>
|
||||
<pre><code class="lang-shell">section {
|
||||
// some code might go here. Optional.
|
||||
|
||||
// import of a partial section
|
||||
import %path%
|
||||
|
||||
// some more content might go here. Optional.
|
||||
}</code></pre>
|
||||
In this case, the content of the file found at <code>%path%</code> will be imported into the <strong>already
|
||||
existing</strong> <code>section{}</code>.
|
||||
The result would then look like so:
|
||||
<pre><code class="lang-shell">section {
|
||||
// some code might go here. Optional.
|
||||
|
||||
// import of a partial section
|
||||
/* content of the imported file goes here! Do not include
|
||||
*
|
||||
* section {
|
||||
* }
|
||||
*
|
||||
* in your imported file!
|
||||
*/
|
||||
|
||||
// some more content might go here. Optional.
|
||||
}</code></pre>
|
||||
<p>This syntax may be used nearly anywhere: </p>
|
||||
<ul>
|
||||
<li>in any section</li>
|
||||
<li>in the body of <a href="/docs/configuration/new-items#menu">menu tags</a>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -0,0 +1,62 @@
|
||||
<h4 id="_top">Modify Items</h4>
|
||||
<br>
|
||||
<p>The optional <code>modify</code> section contains entries to <strong>modify existing context menu items</strong>,
|
||||
added by the system or by a third party.</p>
|
||||
|
||||
<h5 id="sub-items">Sub-items</h5>
|
||||
<p>The section can have the following entry types, all of which are <strong>optional</strong>:</p>
|
||||
<ul>
|
||||
<li>One or more <a href="#item"><code>item</code> entries</a>.
|
||||
These contain the instructions on which and how to change existing <a href="/docs/configuration/new-items#menuitem">menuitems</a>.
|
||||
</li>
|
||||
<li>One or more <a href="/docs/configuration#import"><code><code>imports</code></code></a>. The content of the
|
||||
given file will be placed in the position of the import.
|
||||
</li>
|
||||
</ul>
|
||||
<h5 id="example">Example</h5>
|
||||
<p>In the following example, two instructions are defined:</p>
|
||||
<pre><code class="lang-shell">modify(find = 'copy' image = #00ff00)
|
||||
modify(find = 'paste' image = #0000ff)
|
||||
remove(find = '"format"')</code></pre>
|
||||
<br>
|
||||
<h4 id="item">Item Entries</h4>
|
||||
<p><code>item</code> entries contain the instructions on how to identify existing <a href="/docs/configuration/new-items#menuitem">menuitems</a> (also referred to as <a href="#target">Target</a>), and when and what changes should be applied
|
||||
to them.</p><p>This is done by matching an existing <a href="/docs/configuration/new-items#menuitem">menuitem</a>'s <a href="/docs/configuration/properties#title"><code>title</code></a> property against the modify item's mandatory <a href="/docs/configuration/properties#find"><code>find</code></a> property. If a match is found, the other properties of the modify
|
||||
<code>item</code> are applied to the appropriate <a href="/docs/configuration/new-items#menuitem">menuitem</a>, such as changing their properties (e.g. <a href="/docs/configuration/properties#title"><code>title</code></a>, <a href="/docs/configuration/properties#image"><code>icon</code></a>, <a href="/docs/configuration/properties#visibility"><code>visibility</code></a>), or moving them to another location.</p>
|
||||
|
||||
<h5 id="item-syntax">Syntax</h5>
|
||||
<pre><code class="lang-shell">modify( find = value [property = value [...] ])</code></pre>
|
||||
<br/>
|
||||
<h5 id="item-properties">Properties</h5>
|
||||
<p><code>item</code> entries can define three different sets of properties:</p>
|
||||
<dl>
|
||||
<dt><a href="/docs/configuration/properties#_validation-properties">Validation Properties</a></dt>
|
||||
<dd>Determine if a given <code>item</code> entry should be processed when a context menu is displayed. Optional.
|
||||
</dd>
|
||||
<dt><a href="/docs/configuration/properties#_filter-properties">Filter Properties:</a></dt>
|
||||
<dd>Determine if a given menuitem is a valid <a href="#target">target</a>
|
||||
for the <a href="#process-instructions">process instructions</a>
|
||||
<ul>
|
||||
<li><a href="/docs/configuration/properties#find"><code>find</code></a> <strong>(mandatory)</strong><br/>
|
||||
Pattern used to identify <a href="#target">targets</a> by matching against their <a href="/docs/configuration/properties#title"><code>title</code></a> property.
|
||||
</li>
|
||||
<li><a href="/docs/configuration/properties#in"><code>in</code></a><br/>
|
||||
Used to identify <a href="#target">targets</a> by specifying the submenu in which they are located.
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt><a href="#process-instructions">Process Instructions</a></dt>
|
||||
<dd>Define what to do with the target. Optional. However, if there are no <a href="#process-instructions">process instruction</a> specified, the entry is of no practical use. For
|
||||
further details refer to its separate section
|
||||
<a href="#process-instructions">below</a>.
|
||||
</dd>
|
||||
</dl>
|
||||
<p>For a complete overview and further details regarding applicable properties, please refer to the <a href="/docs/configuration/properties">properties page</a>.</p>
|
||||
<h4 id="target">Item Target</h4>
|
||||
<p>Item targets are <a href="/docs/configuration/new-items#menuitem">menuitems</a> of an existing context menu. Their properties or location can
|
||||
be changed by applying the <a href="#process-instructions">process instructions</a> defined in a <a href=#item">modify <code>item</code></a>.</p>
|
||||
<h5 id="process-instructions">Process instructions</h5>
|
||||
<p>Instructions that should be applied to the <a href="#target">Target</a>. Basically they consist of properties from the two property
|
||||
classes <a href="/docs/configuration/properties#_menuitem-properties">menuitem properties</a> and <a href="/docs/configuration/properties#_command-properties">command properties</a>.</p>
|
||||
<p>Once a <code>item</code> is validated and a target identified, then these values are applied to the targeted
|
||||
<a href="/docs/configuration/new-items#menuitem">menuitem</a>.</p>
|
||||
@@ -0,0 +1,105 @@
|
||||
<h4 id="_top">New Items</h4>
|
||||
<br/>
|
||||
<p>Add <strong>new items</strong> to the context menu.</p>
|
||||
<h5 id="sub-items">Sub-items</h5>
|
||||
<p>The section can have the following entry types, all of which are <strong>optional</strong>:</p>
|
||||
<ul>
|
||||
<li>Menuitems, i.e. one or more of the following:
|
||||
<ul>
|
||||
<li>One or more <a href="#item"><code>item</code> entries</a>.
|
||||
These appear as top-level items in a context menu.
|
||||
</li>
|
||||
<li>One or more <a href="#menu"><code>menu</code> entries</a>.
|
||||
These appear as top-level sub-menus in a context menu.
|
||||
</li>
|
||||
<li>One or more <a href="#separator"><code>separator</code> entries</a>. These create a
|
||||
horizontal line between the given entries.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>One or more <a href="/docs/configuration#import"><code><code>imports</code></code></a>. The content of the given file will be placed in the
|
||||
position of the import.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="example">Example</h5>
|
||||
<p>In the following example, one top-level <a href="#item"><code>item</code></a> is created, that is
|
||||
separated with a <a href="#separator">horizontal line</a> from an adjacent sub-<a href="#menu">menu</a>, which in turn has one sub-<a href="#item">item</a>
|
||||
on its own:</p>
|
||||
<pre><code class="lang-shell">item(title = 'Hello, World!')
|
||||
separator
|
||||
menu(title = 'sub menu' image = #0000ff)
|
||||
{
|
||||
item(title = 'test sub-item')
|
||||
}</code></pre>
|
||||
<br/>
|
||||
|
||||
<h4 id="menuitem">Menuitems</h4>
|
||||
|
||||
<p>menuitem is an umbrella term for those entry types, that may appear in a
|
||||
menu. These simply include the following:</p>
|
||||
<ul>
|
||||
<li><a href="#item"><code>item</code></a></li>
|
||||
<li><a href="#menu"><code>menu</code></a></li>
|
||||
<li><a href="#separator"><code>separator</code></a></li>
|
||||
</ul>
|
||||
|
||||
<br/>
|
||||
<h4 id="item">Items</h4>
|
||||
<p>items create a single menu entry.</p>
|
||||
|
||||
<h5 id="item-properties">Properties</h5>
|
||||
<p>Either a <a href="/docs/configuration/properties#title"><code>title</code></a> or a <a href="/docs/configuration/properties#image"><code>image</code></a> property is mandatory (set to a non-null value). For further details,
|
||||
please refer to the <a href="/docs/configuration/properties">properties page</a>.</p>
|
||||
|
||||
<h5 id="item-syntax">Syntax</h5>
|
||||
<pre><code class="lang-shell">item( title = value [property = value [...] ])</code></pre>
|
||||
<br/>
|
||||
|
||||
<h4 id="menu">Menus</h4>
|
||||
|
||||
<p>menu entries create a new <strong>sub-menu</strong>. They have properties
|
||||
and sub-entries.</p>
|
||||
|
||||
<h5 id="menu-properties">Properties</h5>
|
||||
<p>Either a <a href="/docs/configuration/properties#title"><code>title</code></a> or a <a href="/docs/configuration/properties#image"><code>image</code></a> property is mandatory (set to a non-null value). For further details,
|
||||
please refer to the <a href="/docs/configuration/properties">properties page</a>.</p>
|
||||
|
||||
<h5 id="menu-sub-items">Sub-items</h5>
|
||||
<p>menus can have the following entry types, all of which are
|
||||
<strong>optional</strong>:</p>
|
||||
<ul>
|
||||
<li>Menuitems, i.e. one or more of the following:
|
||||
<ul>
|
||||
<li>One or more <a href="#item"><code>item</code> entries</a>.</li>
|
||||
<li>One or more sub-<a href="#menu"><code>menu</code> entries</a>.</li>
|
||||
<li>One or more <a href="#separator"><code>separator</code> entries</a>. These create a
|
||||
horizontal line between the given entries.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>One or more <a href="/docs/configuration#import"><code><code>imports</code></code></a>. The content of the
|
||||
given file will be placed in the position of the import.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="menu-syntax">Syntax</h5>
|
||||
<pre><code class="lang-shell">menu( title = value [property = value [...] ])
|
||||
{
|
||||
[ item() [...] ]
|
||||
[ menu(){} [...] ]
|
||||
[ separator [...] ]
|
||||
[ import 'path/to/import.nss' [...] ]
|
||||
}</code></pre>
|
||||
<br/>
|
||||
|
||||
<h4 id="separator">Separators</h4>
|
||||
|
||||
<p>separators create a horizontal line.</p>
|
||||
|
||||
<h5 id="separator-properties">Properties</h5>
|
||||
<p>separators do not have any mandatory properties. Please refer to the <a href="/docs/configuration/properties">properties page</a> for further details.</p>
|
||||
|
||||
<h5 id="separator-syntax">Syntax</h5>
|
||||
<pre><code class="lang-shell">separator
|
||||
separator( property = value [property = value [...] ])</code></pre>
|
||||
@@ -0,0 +1,967 @@
|
||||
<h4 id="_top">Properties</h4>
|
||||
<style>
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd dt {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
ul.fold, #_index-list {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
ul.fold, #_index-list li {
|
||||
display: inline;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
ul.fold > li, #_index-list li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
ul.fold > li:after, #_index-list li li:after {
|
||||
content: ", ";
|
||||
}
|
||||
|
||||
ul.fold > li:last-child:after, #_index-list li li:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
</style>
|
||||
Shell supports the following properties classes:
|
||||
<ul>
|
||||
<li><a href="#_validation-properties">Validation Properties</a></li>
|
||||
<li><a href="#_filter-properties">Filter Properties</a></li>
|
||||
<li><a href="#_menuitem-properties">Menuitem Properties</a></li>
|
||||
<li><a href="#_command-properties">Command Properties</a></li>
|
||||
</ul>
|
||||
<p>Please also see the full index of available properties <a href="#_index">below</a>.</p>
|
||||
<h5 id="_index">Index</h5>
|
||||
<ul id="_index-list" class="m-0 p-0 mb-4">
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#admin">Admin</a></li>
|
||||
<li><a href="#arguments">arg</a></li>
|
||||
<li><a href="#arguments">args</a></li>
|
||||
<li><a href="#arguments">Arguments</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#checked">Checked</a></li>
|
||||
<li><a href="#command">cmd</a></li>
|
||||
<li><a href="#column">col</a></li>
|
||||
<li><a href="#column">Column</a></li>
|
||||
<li><a href="#command">Command</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#default">Default</a></li>
|
||||
<li><a href="#directory">dir</a></li>
|
||||
<li><a href="#directory">Directory</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#expanded">Expanded</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#find">Find</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#image">Icon</a></li>
|
||||
<li><a href="#image">Image</a></li>
|
||||
<li><a href="#invoke">Invoke</a></li>
|
||||
<li><a href="#in">In</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#keys">Keys</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#mode">Mode</a></li>
|
||||
<li><a href="#parent">Menu</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#parent">Parent</a></li>
|
||||
<li><a href="#position">pos</a></li>
|
||||
<li><a href="#position">Position</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#separator">sep</a></li>
|
||||
<li><a href="#separator">Separator</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#tip">Tip</a></li>
|
||||
<li><a href="#title">Title</a></li>
|
||||
<li><a href="#type">Type</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#verb">Verb</a></li>
|
||||
<li><a href="#visibility">vis</a></li>
|
||||
<li><a href="#visibility">Visibility</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#wait">Wait</a></li>
|
||||
<li><a href="#where">Where</a></li>
|
||||
<li><a href="#window">Window</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="_syntax">Syntax</h4>
|
||||
<h5 id="_entry-types">Entry types</h5>
|
||||
<p>In the following tables, the Types column shows to which entry types the
|
||||
property applies to.</p>
|
||||
<p>The following abbreviations are used (if set in bold, then the property is mandatory for the given type):
|
||||
</p>
|
||||
<dl>
|
||||
<dt>mi</dt>
|
||||
<dd><a href="/docs/configuration/modify-items#item">modify item</a>, i.e. the
|
||||
item
|
||||
entry itself. Is basically required to evaluate if the process instructions are applied to any given target.
|
||||
</dd>
|
||||
<dt>mt</dt>
|
||||
<dd><a href="/docs/configuration/modify-items#target">modify target</a>, i.e.
|
||||
the menuitem of the existing menu to which the process instructions are applied
|
||||
</dd>
|
||||
<dt>nm</dt>
|
||||
<dd><a href="/docs/configuration/new-items#menu">new menu type</a></dd>
|
||||
<dt>ni</dt>
|
||||
<dd><a href="/docs/configuration/new-items#item">new item type</a></dd>
|
||||
<dt>ns</dt>
|
||||
<dd><a href="/docs/configuration/new-items#separator">new separator type</a>.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<!--<h5 id="_property-classes">Property Classes</h5>-->
|
||||
<h5 id="_validation-properties">Validation Properties</h5>
|
||||
<p>Determine if a given <a href="/docs/configuration/modify-items">Modify items</a>
|
||||
or <a href="/docs/configuration/new-items">New items</a> entry should be
|
||||
processed when a context menu is displayed.</p>
|
||||
|
||||
<br/>
|
||||
<ul class="fold">
|
||||
<li><a href="#mode">Mode</a></li>
|
||||
<li><a href="#type">Type</a></li>
|
||||
<li><a href="#where">Where</a></li>
|
||||
</ul>
|
||||
<br/>
|
||||
<br/>
|
||||
<div id="_validation-syntax" class="table-responsive">
|
||||
<h6>Syntax</h6>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Property</th>
|
||||
<th scope="col">Types<sup><a href="#_entry-types">(*)</a></sup></th>
|
||||
<th scope="col">Summary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="where">
|
||||
<td>Where</td>
|
||||
<td>mi, nm, ni, ns</td>
|
||||
<td>Process given menuitem if <code>true</code> is returned. Allows the <strong>evaluation of arbitrary
|
||||
<a href="/docs/expressions">expressions</a></strong>, e.g. <a href="/docs/functions#if"><code>if()</code></a>.<br/>
|
||||
Default = <span class="syntax-keyword">true</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="mode">
|
||||
<td>Mode</td>
|
||||
<td>mi, nm, ni, ns</td>
|
||||
<td>Display menuitem by <strong>type of selection</strong>. The value has one of the following
|
||||
parameters
|
||||
(of type <a href="/docs/configuration/modify-items">string</a>):
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td class="syntax-keyword">none</td>
|
||||
<td>Display menuitem when there is no selection.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">single</td>
|
||||
<td>Display menuitem when there is a single object selected.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">multi_unique</td>
|
||||
<td>Display menuitem when multiple objects of the same <a href="#type">type</a> are selected.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">multi_single</td>
|
||||
<td>Display menuitem when multiple files with a single file extension are selected.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">multiple</td>
|
||||
<td>Display any type of selection, unless there is none.</td>
|
||||
</tr>
|
||||
</table>
|
||||
Default = <span class="syntax-keyword">single</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="type">
|
||||
<td>Type</td>
|
||||
<td>mi, nm, ni, ns</td>
|
||||
<td>Specifies the <strong>types of objects</strong> for which the menuitem will be displayed.<br/>
|
||||
Possible values are shown below. Separate multiple types with the pipe character (<code>|</code>),
|
||||
in
|
||||
which case the menuitem is displayed if any of the given types is matched.<br/>
|
||||
To exclude a given type, prefix its value with the tilde character (<code>~</code>).
|
||||
<p class="has-text-danger">Expressions are not supported with this property.</p>
|
||||
<table class="table">
|
||||
<tr id="type-asterisks">
|
||||
<td class="syntax-keyword">*</td>
|
||||
<td>Display menuitem when any type is selected.</td>
|
||||
</tr>
|
||||
<tr id="type-file">
|
||||
<td class="syntax-keyword">File</td>
|
||||
<td>Display menuitem when files are selected.</td>
|
||||
</tr>
|
||||
<tr id="type-directory">
|
||||
<td class="syntax-keyword">Directory(Dir)</td>
|
||||
<td>Display menuitem when directories are selected.</td>
|
||||
</tr>
|
||||
<tr id="type-drive">
|
||||
<td class="syntax-keyword">Drive</td>
|
||||
<td>Display menuitem when drives are selected.</td>
|
||||
</tr>
|
||||
<tr id="type-usb">
|
||||
<td class="syntax-keyword">USB</td>
|
||||
<td>Display menuitem when USB flash-drives are selected.</td>
|
||||
</tr>
|
||||
<tr id="type-dvd">
|
||||
<td class="syntax-keyword">DVD</td>
|
||||
<td>Display menuitem when DVD-ROM drives are selected.</td>
|
||||
</tr>
|
||||
<tr id="type-fixed">
|
||||
<td class="syntax-keyword">Fixed</td>
|
||||
<td>Display menuitem when fixed drives are selected. Such drives have a fixed media; for
|
||||
example, a hard disk drive or flash drive.
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="type-vhd">
|
||||
<td class="syntax-keyword">VHD</td>
|
||||
<td>Display menuitem when Virtual Hard Disks are selected.</td>
|
||||
</tr>
|
||||
<tr id="type-removable">
|
||||
<td class="syntax-keyword">Removable</td>
|
||||
<td>Display menuitem when the selected drives have removable media; for example, a floppy drive,
|
||||
thumb drive, or flash card
|
||||
reader.
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="type-remote">
|
||||
<td class="syntax-keyword">Remote</td>
|
||||
<td>Display menuitem when the selected remote (network) drives are selected.</td>
|
||||
</tr>
|
||||
<tr id="type-back">
|
||||
<td class="syntax-keyword">Back</td>
|
||||
<td>Display menuitem when the background of all types are selected (<code>back</code>). Or
|
||||
specify one of
|
||||
the following more granular types for the background:
|
||||
<ul>
|
||||
<li>
|
||||
<code>back.directory</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>back.drive</code>, including
|
||||
<ul>
|
||||
<li><code>back.fixed</code></li>
|
||||
<li><code>back.usb</code></li>
|
||||
<li><code>back.dvd</code></li>
|
||||
<li><code>back.vhd</code></li>
|
||||
<li><code>back.Removable</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<code>back.namespace</code>, including
|
||||
<ul>
|
||||
<li><code>back.computer</code></li>
|
||||
<li><code>back.recyclebin</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="type-desktop">
|
||||
<td class="syntax-keyword">Desktop</td>
|
||||
<td>Display menuitem when the Desktop is selected.</td>
|
||||
</tr>
|
||||
<tr id="type-namespace">
|
||||
<td class="syntax-keyword">Namespace</td>
|
||||
<td>Display menuitem when Namespaces are selected. Can be virtual objects such as My Network Places and Recycle Bin.
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="type-computer">
|
||||
<td class="syntax-keyword">Computer</td>
|
||||
<td>Display menuitem when My Computer is selected.</td>
|
||||
</tr>
|
||||
<tr id="type-recyclebin">
|
||||
<td class="syntax-keyword">Recyclebin</td>
|
||||
<td>Display menuitem when the Recycle bin is selected.
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="type-taskbar">
|
||||
<td class="syntax-keyword">Taskbar</td>
|
||||
<td>Display menuitem when the Taskbar is selected.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
Default = <span class="syntax-keyword">Accepts all types, except for the Taskbar.</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h5 id="_filter-properties">Filter Properties</h5>
|
||||
<p>For <a href="/docs/configuration/modify-items">Modify items</a> entries only,
|
||||
filter properties determine if a given menuitem is a valid <a href="/docs/configuration/modify-items#target">target</a> for the <a href="/docs/configuration/modify-items#process-instructions">process instructions</a></p>
|
||||
|
||||
<ul class="fold">
|
||||
<li><a href="#find">Find</a></li>
|
||||
<li><a href="#in">In</a></li>
|
||||
</ul>
|
||||
|
||||
<div id="_filter-syntax" class="table-responsive">
|
||||
<h6>Syntax</h6>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Property</th>
|
||||
<th scope="col">Types<sup><a href="#_entry-types">(*)</a></sup></th>
|
||||
<th scope="col">Summary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<tr id="find">
|
||||
<td>Find</td>
|
||||
<td>nm, ni, ns</td>
|
||||
<td>
|
||||
<dl>
|
||||
<dt>For modify items (required)</dt>
|
||||
<dd>Apply the current item's process instructions to any existing menuitem if their <a href="#title"><code>title</code></a> property matches the
|
||||
pattern of the current item's <code>find</code> property.
|
||||
</dd>
|
||||
<dt>For dynamic items (optional)</dt>
|
||||
<dd><p>Display the current menuitem if the pattern of its <code>find</code> property matches the
|
||||
path name or path extension
|
||||
of the <strong>selected files</strong>.</p>
|
||||
<p>Default = <span class="syntax-keyword">null</span>, which means any string is "matched".
|
||||
</p>
|
||||
</dd>
|
||||
|
||||
<dt>Syntax</dt>
|
||||
<dd>
|
||||
<pre><code>find = '%pattern%'
|
||||
find = '%pattern%|%pattern%[...]'</code></pre>
|
||||
<p>where <strong>%pattern%</strong> can be one or
|
||||
more
|
||||
matching instructions (see Examples below). The
|
||||
following characters do have special meaning:</p>
|
||||
<ul>
|
||||
<li><code>|</code> <strong>Use to separate patterns.</strong> If any one pattern
|
||||
matches,
|
||||
the property yields
|
||||
<span class="syntax-keyword">true</span>.
|
||||
</li>
|
||||
<li><code>*</code> <strong>Matches any number of characters.</strong> Is used as a
|
||||
wildcard
|
||||
to
|
||||
match only the beginning or the end of the entire string (or word, if used in
|
||||
combination with the exclamation mark <code>!</code>).
|
||||
</li>
|
||||
<li><code>!</code> <strong>Negates the match</strong> of the current pattern, or
|
||||
<strong>limits
|
||||
the wildcard (<code>*</code>)</strong> to one word only.
|
||||
</li>
|
||||
<li><code>""</code> the enclosed string is treated as a <strong>word</strong>.
|
||||
</li>
|
||||
</ul>
|
||||
<p>A <strong>word</strong> is a sequence of
|
||||
alphanumerical characters that is confined to the left and to the right by either a
|
||||
space
|
||||
<code> </code>, a non-word character (e.g. <code>/</code> or <code>-</code>), or the
|
||||
beginning or the end of the entire string, respectively.</p></dd>
|
||||
<dt>Examples</dt>
|
||||
<dd>
|
||||
<div class="table-container">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Pattern</th>
|
||||
<th class="is-two-thirds">Matches any string that ...</th>
|
||||
<th>Would match</th>
|
||||
<th>Would not match</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>'foo'</code></td>
|
||||
<td>contains the literal string <code>foo</code> anywhere.</td>
|
||||
<td><code>foo</code>, <code>foobar</code>, <code>afoobar</code></td>
|
||||
<td><code>fo</code>, <code>f oo</code>, <code>bar</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>'"foo"'</code></td>
|
||||
<td>contains the literal string <code>foo</code> as a whole word
|
||||
only.
|
||||
</td>
|
||||
<td><code>foo</code>, <code>foo/bar</code>, <code>some foo bar</code></td>
|
||||
<td><code>foobar</code>, <code>foofoo</code>, <code>bar</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>'*foo'</code></td>
|
||||
<td>ends with the literal string <code>foo</code>.</td>
|
||||
<td><code>foo</code>, <code>barfoo</code>, <code>bar/foo</code></td>
|
||||
<td><code>foobar</code>, <code>fooo</code>, <code>foo </code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>'foo*'</code></td>
|
||||
<td>starts with the literal string <code>foo</code>.
|
||||
</td>
|
||||
<td><code>foo</code>, <code>foobar</code>, <code>foo/bar</code></td>
|
||||
<td><code> foobar</code>, <code>fo</code>, <code>yeti</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>'!foo'</code></td>
|
||||
<td>does not contain the literal string <code>foo</code> anywhere.
|
||||
</td>
|
||||
<td><code>fobar</code>, <code>fo</code>, <code>kung-fu</code></td>
|
||||
<td><code>foo</code>, <code>foobar</code>, <code>barfoo/bar</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>'!"foo"'</code></td>
|
||||
<td>does not contain the word
|
||||
<code>foo</code></td>
|
||||
<td><code>fobar</code>, <code>kung fu bar</code>, <code>foobar</code></td>
|
||||
<td><code>foo</code>, <code>kung foo bar</code>, <code>bar/foo/bar</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>'!*foo'</code></td>
|
||||
<td>does not contain a word ending on
|
||||
<code>foo</code></td>
|
||||
<td><code>foobar</code>, <code>fooo-fo</code></td>
|
||||
<td><code>foo</code>, <code>foo bar</code>, <code>bar/foo</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>'foo*!'</code></td>
|
||||
<td>does not contain a word starting with
|
||||
<code>foo</code></td>
|
||||
<td><code>myFooBar</code>, <code>barFoo</code></td>
|
||||
<td><code>foo</code>, <code>foobar</code>, <code>fo-fooo</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<p><br/>For dynamic items the following syntax allows to match against file
|
||||
extensions:<br/><br/></p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Pattern</th>
|
||||
<th>Matches any file extension ...</th>
|
||||
<th>Would match</th>
|
||||
<th>Would not match</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>'.exe'</code></td>
|
||||
<td>equal to <code>.exe</code></td>
|
||||
<td><code>setup.exe</code>, <code>notepad.exe</code></td>
|
||||
<td><code>install.bat</code>, <code>shell.nss</code>, <code>shell.ex_</code>,
|
||||
file
|
||||
without an extension.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>'!.exe'</code></td>
|
||||
<td>not equal to <code>.exe</code></td>
|
||||
<td><code>setup.exe.zip</code>, <code>video.mp4</code>, <code>shell.ex_</code>,
|
||||
file
|
||||
without an extension.
|
||||
</td>
|
||||
<td><code>setup.exe</code>, <code>shell.exe</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>'.exe|.dll'</code></td>
|
||||
<td>equal to either <code>.exe</code> or <code>.dll</code></td>
|
||||
<td><code>shell.exe</code>, <code>shell.dll</code>
|
||||
</td>
|
||||
<td><code>shell.zip</code>, <code>shell.nss</code>, file
|
||||
without an extension.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</dd>
|
||||
</dl>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="in">
|
||||
<td>In</td>
|
||||
<td>mi</td>
|
||||
<td> Specifies the <strong>existing submenu</strong> where the <strong>modify target</strong> is located.</br>
|
||||
<strong>Syntax</strong><br/>
|
||||
<pre><code class="lang-shell">in = "New"
|
||||
in = "Sort By"</code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h5 id="_menuitem-properties">Menuitem Properties</h5>
|
||||
<p>This set of properties describe the appearance and location of a given menuitem. For modify-items, this is the target menuitem. For dynamic entries, this is the newly created menuitem.</p>
|
||||
<dl>
|
||||
<dt>Appearance</dt>
|
||||
<dd>
|
||||
<ul class="fold">
|
||||
<li><a href="#checked">Checked</a></li>
|
||||
<li><a href="#default">Default</a></li>
|
||||
<li><a href="#image">Image</a></li>
|
||||
<li><a href="#separator">Separator</a></li>
|
||||
<li><a href="#tip">Tip</a></li>
|
||||
<li><a href="#title">Title</a></li>
|
||||
<li><a href="#visibility">Visibility</a></li>
|
||||
</ul>
|
||||
|
||||
</dd>
|
||||
<dt>Location</dt>
|
||||
<dd>
|
||||
<ul class="fold">
|
||||
<li><a href="#column">Column</a></li>
|
||||
<li><a href="#expanded">Expanded</a></li>
|
||||
<li><a href="#keys">Keys</a></li>
|
||||
<li><a href="#parent">Menu</a></li>
|
||||
<li><a href="#parent">Parent</a></li>
|
||||
<li><a href="#position">Position</a></li>
|
||||
</ul>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<div id="_menuitem-syntax" class="table-responsive">
|
||||
<h6>Syntax</h6>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Property</th>
|
||||
<th scope="col">Types<sup><a href="#_entry-types">(*)</a></sup></th>
|
||||
<th scope="col">Summary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="title">
|
||||
<td>Title</td>
|
||||
<td>st, <strong>nm</strong>, <strong>ni</strong>
|
||||
</td>
|
||||
<td><p>Sets the <strong>caption</strong> of the menuitem.</p>
|
||||
<dl>
|
||||
<dt>For modify-items (optional)</dt>
|
||||
<dd><p>Default = <span class="syntax-keyword">null</span>, which means the title of the target
|
||||
is
|
||||
not changed.</p></dd>
|
||||
<dt>For dynamic items (required)</dt>
|
||||
<dd><p class="text-danger">It is mandatory for <a href="/docs/configuration/dynamic#menu">menu</a> and <a href="/docs/configuration/dynamic#menu">item</a> entries, unless a <a href=#image"><code>image</code></a> property is defined.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="visibility">
|
||||
<td>Visibility (vis)</td>
|
||||
<td>st, nm, ni, ns</td>
|
||||
<td>Sets the <strong>visibility</strong> of a menuitem. Can have one of the following parameters:
|
||||
<table class="table">
|
||||
<tr id="visibility-hidden">
|
||||
<td class="syntax-keyword">Hidden</td>
|
||||
<td>Hide the menuitem.</td>
|
||||
</tr>
|
||||
<tr id="visibility-normal">
|
||||
<td class="syntax-keyword">Normal</td>
|
||||
<td>Enable the menuitem.</td>
|
||||
</tr>
|
||||
<tr id="visibility-disable">
|
||||
<td class="syntax-keyword">Disable</td>
|
||||
<td>Disable the menuitem.</td>
|
||||
</tr>
|
||||
<tr id="visibility-static">
|
||||
<td class="syntax-keyword">Static</td>
|
||||
<td>Display menuitem as label, with or without an <a href=#image"><code>image</code></a></td>
|
||||
</tr>
|
||||
<tr id="visibility-label">
|
||||
<td class="syntax-keyword">Label</td>
|
||||
<td>Display menuitem as label without an image</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="notification is-info mt-5">
|
||||
<i class="mr-4">Note:</i> The values Static and Label are not available for modify-items.
|
||||
</div>
|
||||
Default = <span class="syntax-keyword">Normal</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="separator">
|
||||
<td>Separator (sep)</td>
|
||||
<td>st, nm, ni</td>
|
||||
<td>Add a <strong>separator</strong> to the menuitem:
|
||||
<table class="table">
|
||||
<tr id="separator-none">
|
||||
<td class="syntax-keyword">None</td>
|
||||
<td>Not adding a separator with the menuitem.</td>
|
||||
</tr>
|
||||
<tr id="separator-before">
|
||||
<td class="syntax-keyword">Before, Top</td>
|
||||
<td>Add a separator before the menuitem.</td>
|
||||
</tr>
|
||||
<tr id="separator-after">
|
||||
<td class="syntax-keyword">After, Bottom</td>
|
||||
<td>Add a separator after the menuitem.</td>
|
||||
</tr>
|
||||
<tr id="separator-both">
|
||||
<td class="syntax-keyword">Both</td>
|
||||
<td>Add a separator before and after the menuitem.</td>
|
||||
</tr>
|
||||
</table>
|
||||
Default = <span class="syntax-keyword">none</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="position">
|
||||
<td>Position (pos)</td>
|
||||
<td>st, nm, ni, ns</td>
|
||||
<td>The <strong>position</strong> at which a menuitem should be inserted into the <a href="/docs/configuration/dynamic#menu">menu</a>.<br/>
|
||||
Position can have one of the following parameters:
|
||||
<table class="table">
|
||||
<tr id="position-auto">
|
||||
<td class="syntax-keyword">Auto</td>
|
||||
<td>Insert the menuitem to the current position.</td>
|
||||
</tr>
|
||||
<tr id="position-middle">
|
||||
<td class="syntax-keyword">Middle</td>
|
||||
<td>Insert the menuitem to the middle of the <a href="/docs/configuration/dynamic#menu">menu</a>.
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="position-top">
|
||||
<td class="syntax-keyword">Top</td>
|
||||
<td>Insert the menuitem to the top of the <a href="/docs/configuration/dynamic#menu">menu</a>.
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="position-bottom">
|
||||
<td class="syntax-keyword">Bottom</td>
|
||||
<td>Insert the menuitem to the bottom of the <a href="/docs/configuration/dynamic#menu">menu</a>.
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="position-integer">
|
||||
<td><code>Integer</code></td>
|
||||
<td>Insert the menuitem to a specified position.</td>
|
||||
</tr>
|
||||
</table>
|
||||
Default = <span class="syntax-keyword">auto</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="image">
|
||||
<td>Image, Icon</td>
|
||||
<td>st, nm, ni</td>
|
||||
<td>The <strong>icon</strong> that appears in a menuitem. This property can be assigned as image files,
|
||||
resource icons, glyph
|
||||
or color. With one of the following parameters
|
||||
<table class="table">
|
||||
<tr id="image-null">
|
||||
<td class="syntax-keyword">null</td>
|
||||
<td>Show menuitem without icon.</td>
|
||||
</tr>
|
||||
<tr id="image-inherit">
|
||||
<td class="syntax-keyword">Inherit</td>
|
||||
<td>@*Inheriting the image from the parent.*@
|
||||
Inherits this property from its parent item.
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="image-cmd">
|
||||
<td class="syntax-keyword">Cmd</td>
|
||||
<td>Assign image from the command property.</td>
|
||||
</tr>
|
||||
<tr id="image-glyph">
|
||||
<td class="syntax-keyword">Glyph</td>
|
||||
<td>Assign image as Glyph.</td>
|
||||
</tr>
|
||||
<tr id="image-color">
|
||||
<td class="syntax-keyword">Color</td>
|
||||
<td>Assign image as color.</td>
|
||||
</tr>
|
||||
<tr id="image-path">
|
||||
<td class="syntax-keyword">Path</td>
|
||||
<td>Assign image from location path or resource icon.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="notification is-info mt-5">
|
||||
<i class="mr-4">Note:</i>The value Cmd is not available for modify-items
|
||||
targets.
|
||||
</div>
|
||||
Default = <span class="syntax-keyword">null</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="parent">
|
||||
<td>Parent, Menu</td>
|
||||
<td>st, nm, ni, ns</td>
|
||||
<td><p><strong>Move current menuitem</strong> to another <a href="/docs/configuration/dynamic#menu">menu</a>.</p>
|
||||
Default = <span class="syntax-keyword">null</span></td>
|
||||
</tr>
|
||||
<tr id="checked">
|
||||
<td>Checked</td>
|
||||
<td>st, ni</td>
|
||||
<td><strong>Type of select option</strong>:
|
||||
<table class="table">
|
||||
<tr id="checked-0">
|
||||
<td class="syntax-keyword">0</td>
|
||||
<td>Not checked</td>
|
||||
</tr>
|
||||
<tr id="checked-1">
|
||||
<td class="syntax-keyword">1</td>
|
||||
<td>Display as check mark.</td>
|
||||
</tr>
|
||||
<tr id="checked-2">
|
||||
<td class="syntax-keyword">2</td>
|
||||
<td>Display as radio bullet.</td>
|
||||
</tr>
|
||||
</table>
|
||||
Default = <span class="syntax-keyword">0</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="default">
|
||||
<td>Default</td>
|
||||
<td>st, ni</td>
|
||||
<td>
|
||||
<p>Specifies that the <a href="/docs/configuration/dynamic#item">item</a> is the default. A <a href="/docs/configuration/dynamic#menu">menu</a> can contain only one default
|
||||
menuitem, which is <strong>displayed in bold</strong>.</p>
|
||||
Default = <span class="syntax-keyword">false</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="expanded">
|
||||
<td>Expanded</td>
|
||||
<td>nm</td>
|
||||
<td>
|
||||
<p>Move all immediate menuitems to the parent <a href="/docs/configuration/dynamic#menu">menu</a>.</p>
|
||||
Default = <span class="syntax-keyword">false</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="column">
|
||||
<td>Column(col)</td>
|
||||
<td>nm, ni</td>
|
||||
<td><p>Create a new <strong>column</strong>.</p>
|
||||
Default = <span class="syntax-keyword">true</span>
|
||||
</tr>
|
||||
<tr id="keys">
|
||||
<td>Keys</td>
|
||||
<td>st, nm, ni</td>
|
||||
<td><p>Show <strong>keyboard shortcuts</strong>.</p>
|
||||
Default = <span class="syntax-keyword">null</span></td>
|
||||
</tr>
|
||||
<tr id="tip">
|
||||
<td>Tip</td>
|
||||
<td>st, nm, ni</td>
|
||||
<td>
|
||||
<p>Show a <strong>tooltip</strong> for the current <a href="/docs/configuration/dynamic#menu">menu</a> or <a href="/docs/configuration/dynamic#item">item</a>.</p>
|
||||
Default = <span class="syntax-keyword">null</span><br/>
|
||||
<strong>Syntax</strong><br/>
|
||||
<pre><code class="lang-shell">tip = "Lorem Ipsum is simply dummy text."
|
||||
tip = ["Lorem Ipsum is simply dummy text.", tip.info]
|
||||
tip = ["Lorem Ipsum is simply dummy text.", tip.info, 1.2]</code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h5 id="_command-properties">Command Properties</h5>
|
||||
<p>This set of properties describe how a command is executed. Only available for dynamic items.</p>
|
||||
|
||||
<ul class="fold">
|
||||
<li><a href="#admin">Admin</a></li>
|
||||
<li><a href="#arguments">Arguments</a></li>
|
||||
<li><a href="#command">Command</a></li>
|
||||
<li><a href="#directory">Directory</a></li>
|
||||
<li><a href="#invoke">Invoke</a></li>
|
||||
<li><a href="#verb">Verb</a></li>
|
||||
<li><a href="#wait">Wait</a></li>
|
||||
<li><a href="#window">Window</a></li>
|
||||
</ul>
|
||||
|
||||
<div id="_command-syntax" class="table-responsive">
|
||||
<h6>Syntax</h6>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Property</th>
|
||||
<th scope="col">Types<sup><a href="#_entry-types">(*)</a></sup></th>
|
||||
<th scope="col">Summary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<tr id="command">
|
||||
<td>Command (cmd)</td>
|
||||
<td>ni</td>
|
||||
<td><p>The <strong>command</strong> associated with the menuitem. Occurs when the menuitem is clicked or
|
||||
selected using a shortcut key or access key defined for the menuitem.</p>
|
||||
Default = <span class="syntax-keyword">null</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="arguments">
|
||||
<td>Arguments (arg, args)</td>
|
||||
<td>ni</td>
|
||||
<td><p>The <strong>command line parameters</strong> to pass to the <a href=#command">command</a> property of a menuitem.</p>
|
||||
Default = <span class="syntax-keyword">null</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="invoke">
|
||||
<td>Invoke</td>
|
||||
<td>ni</td>
|
||||
<td>Set <strong>execution type</strong>
|
||||
<table class="table">
|
||||
<tr id="invoke-single">
|
||||
<td class="syntax-keyword">0, single</td>
|
||||
<td>execute the <a href="#command">command</a> only once in total. The list of selected
|
||||
items can be accessed with <a href="/docs/functions/sel#sel"><code>@sel</code></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="invoke-multiple">
|
||||
<td class="syntax-keyword">1, multiple</td>
|
||||
<td>execute the <a href="#command"><code>command</code></a> once for every single item in the current
|
||||
selection. The currently processed item can be accessed with e.g <a href="/docs/functions/sel#sel.path.quote"><code>@sel.path.quote</code></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
Default = <span class="syntax-keyword">0</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="window">
|
||||
<td>Window</td>
|
||||
<td>ni</td>
|
||||
<td>Controls how the <strong>window</strong> of the executed <a href="#command">command</a> is to be shown. Can be one of the following
|
||||
parameters:
|
||||
<p class="syntax-keyword"><code>Hidden</code>, <code>Show</code>, <code>Visible</code>,
|
||||
<code>Minimized</code>, <code>Maximized</code></p>
|
||||
Default = <span class="syntax-keyword">show</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="directory">
|
||||
<td>Directory (dir)</td>
|
||||
<td>ni</td>
|
||||
<td><p>Specifies the <strong>working directory</strong> to
|
||||
execute
|
||||
the <a href="#command">command</a> in.</p>
|
||||
Default = <span class="syntax-keyword">null</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="admin">
|
||||
<td>Admin</td>
|
||||
<td>ni</td>
|
||||
<td><p>Execute the <a href="#command">command</a>
|
||||
with <strong>administrative permissions</strong>.</p>
|
||||
Default = <span class="syntax-keyword">false</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="verb">
|
||||
<td>Verb</td>
|
||||
<td>ni</td>
|
||||
<td>Specifies the <strong>default operation</strong> for the selected file. Value type <a href="/docs/configuration/modify-items">string</a>
|
||||
and can have one of the following parameters:<br/>
|
||||
<table class="table">
|
||||
<tr id="verb-null">
|
||||
<td>null</td>
|
||||
<td>Specifies that the operation is the default for the selected file type.</td>
|
||||
</tr>
|
||||
<tr id="verb-open">
|
||||
<td>Open</td>
|
||||
<td>Opens a file or an application.</td>
|
||||
</tr>
|
||||
<tr id="verb-openas">
|
||||
<td>OpenAs</td>
|
||||
<td>Opener dialog when no program is associated to the extension.</td>
|
||||
</tr>
|
||||
<tr id="verb-runas">
|
||||
<td>RunAs</td>
|
||||
<td>In Windows 7 and Vista, opens the UAC dialog andin others, open the Run as... Dialog.</td>
|
||||
</tr>
|
||||
<tr id="verb-edit">
|
||||
<td>Edit</td>
|
||||
<td>Opens the default text editor for the file.</td>
|
||||
</tr>
|
||||
<tr id="verb-explore">
|
||||
<td>Explore</td>
|
||||
<td>Opens the Windows Explorer in the folder specified in Directory.</td>
|
||||
</tr>
|
||||
<tr id="verb-properties">
|
||||
<td>Properties</td>
|
||||
<td>Opens the properties window of the file.</td>
|
||||
</tr>
|
||||
<tr id="verb-print">
|
||||
<td>Print</td>
|
||||
<td>Start printing the file with the default application.</td>
|
||||
</tr>
|
||||
<tr id="verb-find">
|
||||
<td>Find</td>
|
||||
<td>Start a search.</td>
|
||||
</tr>
|
||||
</table>
|
||||
Default = <span class="syntax-keyword">open</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="wait">
|
||||
<td>Wait</td>
|
||||
<td>ni</td>
|
||||
<td>
|
||||
<p><strong>Wait</strong> for the <a href="#command">command</a>
|
||||
to complete.</p>
|
||||
Default = <span class="syntax-keyword">false</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,87 @@
|
||||
<h4>Settings</h4>
|
||||
<br><br>
|
||||
<p>Settings are containers for storing default values.</p>
|
||||
<pre><code class="lang-shell">settings
|
||||
{
|
||||
// show menu delay value from 0 to 4000
|
||||
showdelay = 200
|
||||
|
||||
// Prevent interaction with these windows or processes
|
||||
exclude
|
||||
{
|
||||
where = boolean value
|
||||
window = window name
|
||||
process = process name
|
||||
}
|
||||
|
||||
tip = true
|
||||
// or
|
||||
tip
|
||||
{
|
||||
enabled = true
|
||||
|
||||
// normal = [background, text]
|
||||
normal = [default, default]
|
||||
|
||||
// normal = [background, text]
|
||||
primary = [#000, #fff]
|
||||
|
||||
// info = [background, text]
|
||||
info = [#88f, #fff]
|
||||
|
||||
// success = [background, text]
|
||||
success = [#8f8, #fff]
|
||||
|
||||
// warning = [background, text]
|
||||
warning = [#ff8, #fff]
|
||||
|
||||
// danger = [background, text]
|
||||
danger = [#f88, #fff]
|
||||
|
||||
// max width value from 200 to 2000
|
||||
width = 400
|
||||
|
||||
// opacity value from 0 to 100
|
||||
opacity = 100
|
||||
|
||||
// radius size value from 0 to 3
|
||||
radius = 1
|
||||
|
||||
time = 1.5
|
||||
|
||||
padding = [8, 4]
|
||||
}
|
||||
|
||||
// Disable/Enable modify items processing
|
||||
modify
|
||||
{
|
||||
enabled = boolean value
|
||||
image = [0 = disable, 1 = enable, 2 = auto reimage]
|
||||
|
||||
// Allow/disallow modification of title
|
||||
title = boolean value
|
||||
|
||||
// Allow/disallow modification of visibility
|
||||
visibility = boolean value
|
||||
|
||||
// Allow/disallow modification of parent
|
||||
parent = boolean value
|
||||
|
||||
// Allow/disallow modification of position
|
||||
position = boolean value
|
||||
|
||||
// Allow/disallow to add separator
|
||||
separator = boolean value
|
||||
|
||||
// auto set image and group
|
||||
auto = boolean value
|
||||
}
|
||||
|
||||
// Disable/Enable new items processing
|
||||
new
|
||||
{
|
||||
enabled = boolean value
|
||||
// disable/enable image
|
||||
image = boolean value
|
||||
}
|
||||
}</code></pre>
|
||||
@@ -0,0 +1,218 @@
|
||||
<h4>Themes</h4>
|
||||
<br><br>
|
||||
<p>Theme section to customize the layout and colors of the context menu.</p>
|
||||
<pre><code class="lang-shell">theme
|
||||
{
|
||||
// theme.name = auto, classic, white, black, or modern
|
||||
name = "modern"
|
||||
|
||||
// view = auto, compact, small, medium, large, wide
|
||||
view = view.compact
|
||||
|
||||
// dark = true, false, default
|
||||
dark = default
|
||||
|
||||
background
|
||||
{
|
||||
color = color value
|
||||
opacity = value from 0 to 100
|
||||
|
||||
// effect value 0 = disable, 1 = transparent, 2 = blur, 3 = acrylic
|
||||
effect = auto
|
||||
|
||||
// for acrylic
|
||||
effect = [3, tint color, opacity]
|
||||
|
||||
gradient
|
||||
{
|
||||
enabled = boolean value
|
||||
|
||||
// linear = [x1, x2, y1, y2]
|
||||
linear = [0, 100, 0, 0]
|
||||
|
||||
// or radial = [cx, cy, r, fx, fy]
|
||||
radial =[ 100, 100, 150, 100, 100]
|
||||
|
||||
// stop = [offset, stop-color]
|
||||
stop = [0.5, color.accent, 20]
|
||||
|
||||
// or add more stop
|
||||
stop = [
|
||||
[offset, stop-color],
|
||||
[offset, stop-color],
|
||||
[offset, stop-color]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
item
|
||||
{
|
||||
opacity = value from 0 to 100
|
||||
radius = value from 0 to 3
|
||||
|
||||
// prefix value [auto, 0 = dont display, 1 = display, 2 = ignore]
|
||||
prefix = 1
|
||||
|
||||
text
|
||||
{
|
||||
normal = color
|
||||
normal.disabled = color
|
||||
select = color
|
||||
select.disabled = color
|
||||
}
|
||||
|
||||
back
|
||||
{
|
||||
normal = color
|
||||
normal.disabled = color
|
||||
select = color
|
||||
select.disabled = color
|
||||
}
|
||||
|
||||
border
|
||||
{
|
||||
normal = color
|
||||
normal.disabled = color
|
||||
select = color
|
||||
select.disabled = color
|
||||
}
|
||||
|
||||
padding
|
||||
{
|
||||
left = value
|
||||
top = value
|
||||
right = value
|
||||
bottom = value
|
||||
}
|
||||
|
||||
margin
|
||||
{
|
||||
left = value
|
||||
top = value
|
||||
right = value
|
||||
bottom = value
|
||||
}
|
||||
}
|
||||
|
||||
border
|
||||
{
|
||||
enabled = boolean value
|
||||
size = value from 0 to 10
|
||||
color = = value
|
||||
opacity = value
|
||||
radius = value
|
||||
|
||||
padding
|
||||
{
|
||||
left = value
|
||||
top = value
|
||||
right = value
|
||||
bottom = value
|
||||
}
|
||||
}
|
||||
|
||||
shadow
|
||||
{
|
||||
enabled = boolean value
|
||||
size = value from 0 to 30
|
||||
color = value
|
||||
opacity = value from 0 to 100
|
||||
offset = value from 0 to 30
|
||||
}
|
||||
|
||||
font
|
||||
{
|
||||
size = value start from 6
|
||||
name = "tahoma"
|
||||
weight = value from 1 to 9
|
||||
italic = 0
|
||||
}
|
||||
|
||||
separator
|
||||
{
|
||||
size = value form 0 to 40
|
||||
color = value
|
||||
opacity = value
|
||||
|
||||
margin
|
||||
{
|
||||
left = value
|
||||
top = value
|
||||
right = value
|
||||
bottom = value
|
||||
}
|
||||
}
|
||||
|
||||
symbol
|
||||
{
|
||||
normal = color
|
||||
normal.disabled = color
|
||||
select = color
|
||||
select.disabled = color
|
||||
|
||||
// or
|
||||
chevron
|
||||
{
|
||||
normal = color
|
||||
normal.disabled = color
|
||||
select = color
|
||||
select.disabled = color
|
||||
}
|
||||
|
||||
checkmark
|
||||
{
|
||||
normal = color
|
||||
normal.disabled = color
|
||||
select = color
|
||||
select.disabled = color
|
||||
}
|
||||
|
||||
bullet
|
||||
{
|
||||
normal = color
|
||||
normal.disabled = color
|
||||
select = color
|
||||
select.disabled = color
|
||||
}
|
||||
}
|
||||
|
||||
image
|
||||
{
|
||||
enabled = boolean value
|
||||
|
||||
color = [color1, color2, color3]
|
||||
gap = value
|
||||
glyph = "font name" // font name for default glyph
|
||||
scale = boolean value
|
||||
align = value
|
||||
[0= Display only the check mark,1 = Display only the image,2 = Display image & checkheck mark together]
|
||||
}
|
||||
|
||||
layout
|
||||
{
|
||||
// Right-to-left layout display for Middle Eastern languages
|
||||
rtl = boolean value
|
||||
|
||||
// Align submenus
|
||||
popup = value from -20 to 20
|
||||
}
|
||||
}</code></pre>
|
||||
<h3>Padding and Margin value syntax</h3>
|
||||
<p>Use the padding shorthand property with four values:</p>
|
||||
<code>padding = [1, 2, 3, 4]</code>
|
||||
<pre class="mt-2"><code>left = 1
|
||||
right = 2
|
||||
top = 3
|
||||
bottom = 4</code></pre>
|
||||
<p>Use the padding shorthand property with two values:</p>
|
||||
<code>padding = [4, 2]</code>
|
||||
<pre class="mt-2"><code>left = 4
|
||||
right = 4
|
||||
top = 2
|
||||
bottom = 2</code></pre>
|
||||
<p>Use the padding shorthand property with one value:</p>
|
||||
<code>padding = 4</code>
|
||||
<pre class="mt-2"><code>left = 4
|
||||
right = 4
|
||||
top = 4
|
||||
bottom = 4</code></pre>
|
||||
@@ -0,0 +1,32 @@
|
||||
<h5>Copy Path example</h5>
|
||||
<pre><code class="lang-shell">// type can set with '~taskbar' equals all file types except taskbar.
|
||||
menu(type='file|dir|back|root|namespace' mode="multiple" title='copy to clipboard' image=#ff00ff)
|
||||
{
|
||||
// Appears only when multiple selections.
|
||||
item(vis=@(sel.count > 1) title='Copy path (@sel.count) items selected'
|
||||
cmd=command.copy(sel(false, "\n")))
|
||||
|
||||
item(mode="single" title=sel.path
|
||||
cmd=command.copy(sel.path))
|
||||
|
||||
item(mode="single" type='file|dir|back.dir'
|
||||
vis=sel.short.len!=sel.path.len title=sel.short
|
||||
cmd=command.copy(sel.short))
|
||||
separator
|
||||
item(mode="single" vis=@(sel.parent.len>3) title=sel.parent
|
||||
cmd=command.copy(sel.parent))
|
||||
separator
|
||||
item(mode="single" type='file|dir|back.dir' title=sel.file.name
|
||||
cmd=command.copy(sel.file.name))
|
||||
|
||||
item(mode="single" type='file' title=sel.file.title
|
||||
cmd=command.copy(sel.file.title))
|
||||
|
||||
item(mode="single" type='file' title=sel.file.ext
|
||||
cmd=command.copy(sel.file.ext))
|
||||
}
|
||||
</code></pre><div class="has-text-centered my-5 preview">
|
||||
<img class="is-256" src="/docs/images/copypath1.png">
|
||||
<img class="is-256" src="/docs/images/copypath2.png">
|
||||
<img class="is-256" src="/docs/images/copypath3.png">
|
||||
</div>
|
||||
@@ -0,0 +1,27 @@
|
||||
<h5>Favorite applications and directories example</h5>
|
||||
<pre><code class="lang-shell">menu(type='desktop|taskbar' title='Favorites' image=#00ff00)
|
||||
{
|
||||
menu(title='Applications' image=#ff0000)
|
||||
{
|
||||
item(title='Command prompt' image cmd='cmd.exe')
|
||||
item(title='PowerShell' image cmd='powershell.exe')
|
||||
item(title='Registry editor' image cmd='regedit.exe')
|
||||
separator
|
||||
item(title='Paint' image cmd='mspaint.exe')
|
||||
item(title='Notepad' image cmd='notepad.exe')
|
||||
}
|
||||
separator
|
||||
menu(title='Directories' image=#0000ff)
|
||||
{
|
||||
item(title='Downloads' cmd=user.downloads)
|
||||
item(title='Pictures' cmd=user.pictures)
|
||||
item(title='Home' cmd=user.directory)
|
||||
separator
|
||||
item(title='Windows' cmd=sys.directory)
|
||||
item(title='Program files' cmd=sys.prog())
|
||||
}
|
||||
}</code></pre>
|
||||
<figure class="has-text-centered my-5 preview">
|
||||
<img class="is-256" src="/docs/images/fav1.png">
|
||||
<img class="is-256" src="/docs/images/fav2.png">
|
||||
</figure>
|
||||
@@ -0,0 +1,53 @@
|
||||
<h5>Goto example</h5>
|
||||
<pre><code class="lang-shell">menu(mode="multiple" title='Goto' sep="both" image= \uE14A)
|
||||
{
|
||||
menu(title='Folder' image=\uE1F4)
|
||||
{
|
||||
item(title='Windows' image=inherit cmd=sys.dir)
|
||||
item(title='System' image=inherit cmd=sys.bin)
|
||||
item(title='Program Files' image=inherit cmd=sys.prog)
|
||||
item(title='Program Files x86' image=inherit cmd=sys.prog32)
|
||||
item(title='ProgramData' image=inherit cmd=sys.programdata)
|
||||
item(title='Applications' image=inherit cmd='shell:appsfolder')
|
||||
item(title='Users' image=inherit cmd=sys.users)
|
||||
separator
|
||||
item(title='Desktop' image=inherit cmd=user.desktop)
|
||||
item(title='Downloads' image=inherit cmd=user.downloads)
|
||||
item(title='Pictures' image=inherit cmd=user.pictures)
|
||||
item(title='Documents' image=inherit cmd=user.documents)
|
||||
item(title='Startmenu' image=inherit cmd=user.startmenu)
|
||||
item(title='Profile' image=inherit cmd=user.dir)
|
||||
item(title='AppData' image=inherit cmd=user.appdata)
|
||||
item(title='Temp' image=inherit cmd=user.temp)
|
||||
}
|
||||
|
||||
item(title=title.control_panel image=\uE0F3 cmd='shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}')
|
||||
item(title='All Control Panel Items' image=\uE0F3 cmd='shell:::{ED7BA470-8E54-465E-825C-99712043E01C}')
|
||||
item(title=title.run image=\uE14B cmd='shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}')
|
||||
|
||||
menu(title=title.settings sep="before" image=id.settings.icon)
|
||||
{
|
||||
// https://docs.microsoft.com/en-us/windows/uwp/launch-resume/launch-settings-app
|
||||
item(title='systeminfo' image=inherit cmd arg='/K systeminfo')
|
||||
item(title='search' cmd='search-ms:' image=inherit)
|
||||
item(title='settings' image=inherit cmd='ms-settings:')
|
||||
item(title='about' image=inherit cmd='ms-settings:about')
|
||||
item(title='usb' image=inherit cmd='ms-settings:usb')
|
||||
item(title='network-status' image=inherit cmd='ms-settings:network-status')
|
||||
item(title='network-ethernet' image=inherit cmd='ms-settings:network-ethernet')
|
||||
item(title='personalization-background' image=inherit cmd='ms-settings:personalization-background')
|
||||
item(title='personalization-colors' image=inherit cmd='ms-settings:colors')
|
||||
item(title='lockscreen' image=\uE0F3 cmd='ms-settings:lockscreen')
|
||||
item(title='personalization-start' image=inherit cmd='ms-settings:personalization-start')
|
||||
item(title='appsfeatures' image=inherit cmd='ms-settings:appsfeatures')
|
||||
item(title='optionalfeatures' image=inherit cmd='ms-settings:optionalfeatures')
|
||||
item(title='defaultapps' image=inherit cmd='ms-settings:defaultapps')
|
||||
item(title='yourinfo' image=inherit cmd='ms-settings:yourinfo')
|
||||
item(title='windowsupdate' image=inherit cmd='ms-settings:windowsupdate')
|
||||
item(title='windowsdefender' image=inherit cmd='ms-settings:windowsdefender')
|
||||
item(title='network connections' image=inherit cmd='shell:::{7007ACC7-3202-11D1-AAD2-00805FC1270E}')
|
||||
}
|
||||
}</code></pre>
|
||||
<div class="has-text-centered my-5">
|
||||
<img class="preview is-256" src="/docs/images/goto.png">
|
||||
</div>
|
||||
@@ -0,0 +1,2 @@
|
||||
<h4>Examples</h4><br>
|
||||
<p>This page contains some examples of what <b>Shell</b> can do.</p>
|
||||
@@ -0,0 +1,13 @@
|
||||
<h5>Taskbar example</h5>
|
||||
<pre class="lang-shell">$hello_world = 'Hello World!'
|
||||
|
||||
item(title=hello_world cmd=msg(hello_world))
|
||||
separator
|
||||
item(title='Command prompt' cmd args='/k echo @hello_world')
|
||||
separator
|
||||
menu(title='Sub menu')
|
||||
{
|
||||
item(title='Open Paint' cmd='paint.exe' arg=sel.path)
|
||||
separator
|
||||
item(title='Open Notepad' cmd='notepad.exe' arg='"@sel.path"')
|
||||
}</code></pre>
|
||||
@@ -0,0 +1,5 @@
|
||||
<h4>Color literal</h4>
|
||||
<br>
|
||||
<h5>Hexadecimal Colors</h5>
|
||||
<p>interprets color constants as hexadecimal if they are preceded by <code>#</code> and hexadecimal color is specified with:
|
||||
<code>#RRGGBB</code> or <code>#RRGGBBAA</code>, 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 <code>00</code> and <code>FF</code>.<br/>For example, the <code>#0000FF</code> value is rendered as blue, because the blue component is set to its highest value (<code>FF</code>) and the others are set to <code>00</code>.<br/>There are 140 color names are predefined under the <a href="/docs/functions/color">color</a> scope.</p>
|
||||
@@ -0,0 +1,44 @@
|
||||
<h4>Comments</h4>
|
||||
<p>Comments can be used to explain <b>Shell</b> code, and to make it more readable. It can also be used to prevent execution <b>Shell</b> code. Comments can be singled-lined or multi-lined.</p>
|
||||
<div id="single-line">
|
||||
<h5>Single-line Comments</h5>
|
||||
<p>
|
||||
Single-line comments start with two forward slashes (<code>//</code>).<br>
|
||||
Any text between <code>//</code> and the end of the line is ignored (will not be executed).
|
||||
</p>
|
||||
<p>This example uses a single-line comment before a line of code:</p>
|
||||
<pre><code class="lang-shell">dynamic
|
||||
{
|
||||
// This is a comment
|
||||
item(title='Hello World!')
|
||||
|
||||
//item(title='Hello World!')
|
||||
}</code></pre>
|
||||
|
||||
<p>This example uses a single-line comment at the end of a line of code:</p>
|
||||
<pre><code class="lang-shell">dynamic
|
||||
{
|
||||
item(title='Hello World!') // This is a comment
|
||||
}</code></pre>
|
||||
</div>
|
||||
<br>
|
||||
<div id="multi-line">
|
||||
<h5>Multi-line Comments</h5>
|
||||
<p>
|
||||
Multi-line comments start with <code>/*</code> and ends with <code>*/</code>.<br>
|
||||
Any text between <code>/*</code> and <code>*/</code> will be ignored.
|
||||
</p>
|
||||
<pre><code class="lang-shell">dynamic
|
||||
{
|
||||
item(title='Hello,/* multiple-lines comment inside */ world')
|
||||
|
||||
/*
|
||||
item(title='test item 1')
|
||||
item(title='test item 2')
|
||||
*/
|
||||
}</code></pre>
|
||||
<p>
|
||||
Single or multi-line comments?<br>
|
||||
It is up to you which you want to use. Normally, we use <code>//</code> for short comments, and <code>/* */</code> for longer.
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,6 @@
|
||||
<h4>Identifier</h4>
|
||||
<br>
|
||||
<p>The identifier have unique titles described by fully qualified names that indicate a logical hierarchy.<br>The identifier that has no parameters. Parentheses are added when necessary to separate:</p>
|
||||
<p>There is a hierarchy of keywords in that some keywords are always followed by others.</p>
|
||||
<pre><code class="lang-shell">sel.path
|
||||
sel.path().ext</code></pre>
|
||||
@@ -0,0 +1,12 @@
|
||||
<h4>Expressions</h4>
|
||||
<br>
|
||||
<p><b>Shell</b> provides a variety of statements and expressions. Most of these will be familiar to developers who have programmed in Java script, C, C++, C#.</p>
|
||||
<p>Expressions gives you all the power of <b>Shell</b>, 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.</p>
|
||||
<p>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 <b>Shell</b> are a little bit hard to read. But with a good understanding of expression syntax and a little practice, it becomes much easier.</p>
|
||||
<ul>
|
||||
<li>Expressions is non-case sensitive</li>
|
||||
<li>Expressions (variables and functions) start with @</li>
|
||||
<li>blocks are enclosed in @( ... )</li>
|
||||
<li>Strings are enclosed with quotation marks or single quotation marks</li>
|
||||
</ul>
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<h4>Numeric literals</h4>
|
||||
<br>
|
||||
<p>There are two types of numbers. Integer and floating point.</p>
|
||||
<h5>Integer literals</h5>
|
||||
<p>An integer is a numeric literal(associated with numbers) without any fractional or exponential part. There are two types of integer literals:</p>
|
||||
<ol>
|
||||
<li>Decimal literal (base 10)</li>
|
||||
<li>Hexadecimal literal (base 16)</li>
|
||||
</ol>
|
||||
<p><strong>1. Decimal-literal(base 10):</strong><br>A non-zero decimal digit followed by zero or more decimal digits(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).</p>
|
||||
For example:<pre><code>Decimal: 0, -9, 22 etc</code></pre>
|
||||
<p><strong>2. Hexadecimal-literal(base 16):</strong><br>0x followed by one or more hexadecimal digits(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f).</p>
|
||||
For example:
|
||||
<pre><code>Hexadecimal: 0x7f, 0x2a, 0x521 etc</code></pre>
|
||||
<h5>Floating-point iterals</h5>
|
||||
|
||||
<p>Floating-point literals specify values that must have a fractional part. These values contain decimal points (.)</p>
|
||||
For example:
|
||||
<pre><code>-2.0<br>0.0000234</code></pre>
|
||||
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
<h4>Operators</h4>
|
||||
<br>
|
||||
<p>An operator is a symbol that tells to perform specific mathematical or logical manipulations. <b>Shell</b> is rich in built-in operators and provide the following types of operators</p>
|
||||
<p>This chapter will examine the arithmetic, relational, logical, bitwise, assignment and other operators one by one.</p>
|
||||
<h5 id="arithmetic">Arithmetic Operators</h5>
|
||||
<p>The five arithmetical operations supported</p>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="has-text-centered" width="10%">Operator</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">+</td>
|
||||
<td>Addition</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">-</td>
|
||||
<td>Subtraction</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">*</td>
|
||||
<td>Multiplication</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">/</td>
|
||||
<td>Division</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">%</td>
|
||||
<td>Modulo</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
<h5 id="relational">Relational and comparison operators</h5>
|
||||
<p>Two expressions can be compared using relational and equality operators. For example, to know if two values are equal or if one is greater than the other.</p>
|
||||
<p>The result of such an operation is either true or false (i.e., a Boolean value).</p>
|
||||
<p>The relational operators are:</p>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="has-text-centered"width="10%">operator</th><th>description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">==</td><td>Equal to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">!=</td><td>Not equal to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered"><</td><td>Less than</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">></td><td>Greater than</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered"><=</td><td>Less than or equal to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">>=</td><td>Greater than or equal to</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
<h5 id="logical">Logical Operators (!, ||, &&)</h5>
|
||||
<p> The operator <code>!</code> is operator for the Boolean operation NOT. It has only one operand, to its right, and inverts it, producing false if its operand is true, and true if its operand is false. Basically, it returns the opposite Boolean value of evaluating its operand. For example:</p>
|
||||
<p> The logical operators <code>&&</code> and <code>||</code> are used when evaluating two expressions to obtain a single relational result. The operator <code>&&</code> corresponds to the Boolean logical operation AND, which yields true if both its operands are true, and false otherwise. The following panel shows the result of operator <code>&&</code> evaluating the expression <code>a && b</code>:</p>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="has-text-centered" width="10%">operator</th>
|
||||
<th>description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">&&</td>
|
||||
<td>Called Logical AND operator. If both the operands are non-zero, then condition becomes true.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">||</td>
|
||||
<td>Called Logical OR Operator. If any of the two operands is non-zero, then condition becomes true.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">!</td>
|
||||
<td>
|
||||
Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true, then Logical NOT operator will make false.
|
||||
<pre><code>!(5 == 5) <cite>// evaluates to false because the expression at its right (5 == 5) is true</cite>
|
||||
!(6 <= 4) <cite>// evaluates to true because (6 <= 4) would be false</cite>
|
||||
!<var>true</var> <cite>// evaluates to false</cite>
|
||||
!<var>false</var> <cite>// evaluates to true</cite></code></pre>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
<h5 id="ternary">Conditional ternary operator</h5>
|
||||
<p>The conditional operator evaluates an expression, returning one value if that expression evaluates to true, and a different one if the expression evaluates as false. Its syntax is:</p>
|
||||
<pre><code>condition ? result1 : result2</code></pre>
|
||||
<p>If condition is true, the entire expression evaluates to result1, and otherwise to result2.</p>
|
||||
<pre><code>7==5 ? 4 : 3 <cite>// evaluates to 3, since 7 is not equal to 5.</cite>
|
||||
7==5+2 ? 4 : 3 <cite>// evaluates to 4, since 7 is equal to 5+2.</cite>
|
||||
5>3 ? a : b <cite>// evaluates to the value of a, since 5 is greater than 3.</cite>
|
||||
a>b ? a : b <cite>// evaluates to whichever is greater, a or b.</cite></code></pre>
|
||||
|
||||
<h5 id="bitwise">Bitwise Operators</h5>
|
||||
<p>Bitwise operators modify variables considering the bit patterns that represent the values they store.</p>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="has-text-centered" width="10%">Operator</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">&</td>
|
||||
</td><td>Bitwise AND</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">|</td>
|
||||
<td>Bitwise inclusive OR</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">^</td>
|
||||
<td>Bitwise exclusive OR</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">~</td>
|
||||
<td>Unary complement (bit inversion)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered"><<</td>
|
||||
<td>Shift bits left</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="has-text-centered">>></td>
|
||||
<td>Shift bits right</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h5 id="precedence">Precedence of operators</h5>
|
||||
<p> A single expression may have multiple operators. For example:</p>
|
||||
<pre><code>x = 5 + 7 % 2</code></pre>
|
||||
<p>the above expression always assigns 6 to variable x, because the <code>%</code> operator has a higher precedence than the <code>+</code> operator, and is always evaluated before. Parts of the expressions can be enclosed in parenthesis to override this precedence order, or to make explicitly clear the intended effect. Notice the difference:</p>
|
||||
<pre><code>x = 5 + (7 % 2) <cite>// x = 6 (same as without parenthesis)</cite>
|
||||
x = (5 + 7) % 2 <cite>// x = 0</cite></code></pre>
|
||||
<p>From greatest to smallest priority, Operators are evaluated in the following order:</p>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Level</th>
|
||||
<th>Precedence group</th>
|
||||
<th>Operator</th>
|
||||
<th>Description</th>
|
||||
<th>Grouping</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="4">1</td>
|
||||
<td rowspan="4">Postfix (unary)</td>
|
||||
<td><code>++ --</code></td>
|
||||
<td>postfix increment / decrement</td>
|
||||
<td rowspan="4">Left-to-right</td>
|
||||
</tr>
|
||||
<tr><td><code>()</code></td><td>functional forms</td></tr>
|
||||
<tr><td><code>[]</code></td><td>subscript</td></tr>
|
||||
<tr><td><code>.</code></td><td>member access</td>
|
||||
</tr>
|
||||
<tr><td rowspan="3">2</td><td rowspan="3">Prefix (unary)</td><td><code>++ --</code></td><td>prefix increment / decrement</td><td rowspan="3">Right-to-left</td></tr>
|
||||
<tr><td><code>~ !</code></td><td>bitwise NOT / logical NOT</td></tr>
|
||||
<tr><td><code>+ -</code></td><td>unary prefix</td></tr>
|
||||
<tr><td>4</td><td>Arithmetic: scaling</td><td><code>* / %</code></td><td>multiply, divide, modulo</td><td>Left-to-right</td></tr>
|
||||
<tr><td>5</td><td>Arithmetic: addition</td><td><code>+ -</code></td><td>addition, subtraction</td><td>Left-to-right</td></tr>
|
||||
<tr><td>6</td><td>Bitwise shift</td><td><code><< >></code></td><td>shift left, shift right</td><td>Left-to-right</td></tr>
|
||||
<tr><td>7</td><td>Relational</td><td><code>< > <= >=</code></td><td>comparison operators</td><td>Left-to-right</td></tr>
|
||||
<tr><td>8</td><td>Equality</td><td><code>== !=</code></td><td>equality / inequality</td><td>Left-to-right</td></tr>
|
||||
<tr><td>9</td><td>And</td><td><code>&</code></td><td>bitwise AND</td><td>Left-to-right</td></tr>
|
||||
<tr><td>10</td><td>Exclusive or</td><td><code>^</code></td><td>bitwise XOR</td><td>Left-to-right</td></tr>
|
||||
<tr><td>11</td><td>Inclusive or</td><td><code>|</code></td><td>bitwise OR</td><td>Left-to-right</td></tr>
|
||||
<tr><td>12</td><td>Conjunction</td><td><code>&&</code></td><td>logical AND</td><td>Left-to-right</td></tr>
|
||||
<tr><td>13</td><td>Disjunction</td><td><code>||</code></td><td>logical OR</td><td>Left-to-right</td></tr>
|
||||
<tr><td rowspan="2">15</td><td rowspan="2">Assignment-level expressions</td><td><code>=</code></td><td>assignment</td><td rowspan="2">Right-to-left</td></tr>
|
||||
<tr><td><code>?:</code></td><td>conditional operator</td></tr>
|
||||
<tr><td>16</td><td>Sequencing</td><td><code>,</code></td><td>comma separator</td><td>Left-to-right</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>
|
||||
When an expression has two operators with the same precedence level, grouping determines which one is evaluated first: either left-to-right or right-to-left.<br>
|
||||
Enclosing all sub-statements in parentheses (even those unnecessary because of their precedence) improves code readability.
|
||||
</p>
|
||||
@@ -0,0 +1,37 @@
|
||||
<h4>String literal</h4>
|
||||
<br>
|
||||
<p>string is zero or more characters written inside single or double quotes.</p>
|
||||
<p>You can use quotes inside a string, as long as they don't match the quotes surrounding the string:</p>
|
||||
<pre><code class="lang-shell">$var1 = "It's alright"
|
||||
$var2 = "He is called 'Johnny'"
|
||||
$var3 = 'He is called "Johnny"'</code></pre>
|
||||
<br>
|
||||
<h5>Single quotes</h5>
|
||||
<br>
|
||||
<p>single quotes allow you to use the syntax of expressions within them.<br/>The <code>@</code> sign must be placed before the expressions.</p>
|
||||
<pre><code class="lang-shell">item(title = 'windows dir path: @sys.dir')</code></pre>
|
||||
<br>
|
||||
<h5>Double quotes</h5>
|
||||
<br>
|
||||
<p>double quotes allow you to use the Escape Character inside them only.<br/>The backslash (<code>\</code>) escape character turns special characters into characters.<br/>The sequence <code>\" </code> inserts a double quote in a string:</p>
|
||||
<pre><code class="lang-shell">$var1 = "hello\"world"
|
||||
// result: hello"world</code></pre>
|
||||
<p>The complete set of escape sequences is as follows:</p>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr><td>\'</td><td>Single quote</td></tr>
|
||||
<tr><td>\"</td><td>Double quote</td></tr>
|
||||
<tr><td>\\</td><td>Backslash</td></tr>
|
||||
<tr><td>\0</td><td>Null</td></tr>
|
||||
<tr><td>\a</td><td>Alert</td></tr>
|
||||
<tr><td>\b</td><td>Backspace</td></tr>
|
||||
<tr><td>\f</td><td>Form Feed</td></tr>
|
||||
<tr><td>\n</td><td>New Line</td></tr>
|
||||
<tr><td>\r</td><td>Carriage Return</td></tr>
|
||||
<tr><td>\t</td><td>Horizontal Tab</td></tr>
|
||||
<tr><td>\v</td><td>Vertical Tab</td></tr>
|
||||
<tr><td>\uxxxx</td><td>Unicode escape sequence (UTF-16) \uHHHH (range: 0000 - FFFF)</td></tr>
|
||||
<tr><td>\xnnnn</td><td>Unicode escape sequence for character with hex value nnnn (variable length version of \uxxxx)</td></tr>
|
||||
<tr><td>\Uxxxxxxxx</td><td>Unicode escape sequence (UTF-32) \U00HHHHHH (range: 000000 - 10FFFF)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -0,0 +1,33 @@
|
||||
<h4>Variables</h4>
|
||||
<br>
|
||||
<p>Variables are containers for storing data values.</p>
|
||||
<ul>
|
||||
<li>Global and local variables are optional.</li>
|
||||
<li>To declare more than one variable, use a space.</li>
|
||||
</ul>
|
||||
<p>The general rules for constructing names for variables (unique identifiers) are:</p>
|
||||
<ul>
|
||||
<li>Names can contain letters, digits and underscores (<code>_</code>).</li>
|
||||
<li>Names must begin with a letter.</li>
|
||||
<li>Names cannot contain whitespaces or special characters like !, #, %, etc.</li>
|
||||
<li>Reserved words (like keywords, such as null, true, false, etc.) cannot be used as names.</li>
|
||||
<li>Variables can be placed in globle variables, or in the dynamic body section of an menu, or in both.</li>
|
||||
</ul>
|
||||
<p>
|
||||
All variables must be identified with unique names.<br>
|
||||
These unique names are called identifiers.
|
||||
Identifiers can be short names (like x and y) or more descriptive names (age, sum, totalVolume).
|
||||
</p>
|
||||
<p><i>Note:</i> It is recommended to use descriptive names in order to create understandable and maintainable code</p>
|
||||
<h5 class="mt-5">Example</h5>
|
||||
<pre><code class="lang-shell">$hello_world = 'Hello World!'
|
||||
$test_add1 = 5 + 6
|
||||
|
||||
item(title = hello_world cmd = msg(hello_world))
|
||||
|
||||
menu(title = test_add1)
|
||||
{
|
||||
$test_sub1 = 11 - 5
|
||||
item(title = test_sub1)
|
||||
}</code></pre>
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
<h5>APP</h5>
|
||||
<br>
|
||||
<p>The namespace of the application contains file paths, version and some details.</p>
|
||||
<br>
|
||||
<section id="app.directory" class="my-5">
|
||||
<h5>app.directory</h5>
|
||||
<p>Returns the path of <b>Shell</b> directory.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.directory // usage in section context
|
||||
'@app.directory' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.cfg" class="my-5">
|
||||
<h5>app.cfg</h5>
|
||||
<p>Returns the path of the <a href="/docs/configuration/index.html#shell.nss">configuration file</a> <code>shell.nss</code> (or <code>shell.shl</code>
|
||||
in older installations).</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.cfg // usage in section context
|
||||
'@app.cfg' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.dll" class="my-5">
|
||||
<h5>app.dll</h5>
|
||||
<p>Returns the path of <code>shell.dll</code>.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.dll // usage in section context
|
||||
'@app.dll' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.exe" class="my-5">
|
||||
<h5>app.exe</h5>
|
||||
<p>Returns the path of <code>shell.exe</code>.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.exe // usage in section context
|
||||
'@app.exe' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.name" class="my-5">
|
||||
<h5>app.name</h5>
|
||||
<p>Returns application name.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.name // usage in section context
|
||||
'@app.name' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.version" class="my-5">
|
||||
<h5>app.version</h5>
|
||||
<p>Returns <b>Shell</b> version.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.version // usage in section context
|
||||
'@app.version' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.is64" class="my-5">
|
||||
<h5>app.is64</h5>
|
||||
<p>Returns the architecture of the application.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.is64 // usage in section context
|
||||
'@app.is64' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.about" class="my-5">
|
||||
<h5>app.about</h5>
|
||||
<p>Returns <b>Shell</b> information.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.about // usage in section context
|
||||
'@app.about' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.reload" class="my-5">
|
||||
<h5>app.reload</h5>
|
||||
<p>Reload the <a href="/docs/configuration/index.html#shell.nss">configuration file</a>.
|
||||
</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.reload // usage in section context
|
||||
'@app.reload' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="app.unload" class="my-5">
|
||||
<h5>app.unload</h5>
|
||||
<p>Unload the <a href="/docs/configuration/index.html#shell.nss">configuration file</a>.
|
||||
</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>app.unload // usage in section context
|
||||
'@app.unload' // usage inside quoted-string literals</code></pre>
|
||||
</section>
|
||||
@@ -0,0 +1,104 @@
|
||||
<h4>APPX</h4>
|
||||
<br>
|
||||
<section id="appx" class="my-5">
|
||||
<h5>appx or appx.path</h5>
|
||||
<p>Returns the path of Package.</p>
|
||||
<p>Syntax</p>
|
||||
<code>appx(packageName)<br/>
|
||||
appx.path(packageName)</code>
|
||||
<p>Parameters</p>
|
||||
<dl>
|
||||
<dt>packageName</dt>
|
||||
<dd>can be passed in full name or part of name.</dd>
|
||||
</dl>
|
||||
<p>Example</p>
|
||||
<pre><code>appx.path("WindowsTerminal")
|
||||
// result:
|
||||
// C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.11.3471.0_x64__8wekyb3d8bbwe
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="appx.name" class="my-5">
|
||||
<h5>appx.name</h5>
|
||||
<p>Returns the display name of the Package.</p>
|
||||
<p>Syntax</p>
|
||||
<code>appx.name(packageName)</code>
|
||||
<p>Parameters</p>
|
||||
<dl>
|
||||
<dt>packageName</dt>
|
||||
<dd>can be passed in full name or part of name.</dd>
|
||||
</dl>
|
||||
<p>Example</p>
|
||||
<pre><code>appx.name("WindowsTerminal")
|
||||
// result:
|
||||
// Windows Terminal
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="appx.id" class="my-5">
|
||||
<h5>appx.id</h5>
|
||||
<p>Returns the full name of the Package.</p>
|
||||
<p>Syntax</p>
|
||||
<code>appx.id(packageName)</code>
|
||||
<p>Parameters</p>
|
||||
<dl>
|
||||
<dt>packageName</dt>
|
||||
<dd>can be passed in full name or part of name.</dd>
|
||||
</dl>
|
||||
<p>Example</p>
|
||||
<pre><code>appx.id("WindowsTerminal")
|
||||
// result:
|
||||
// Microsoft.WindowsTerminal_1.11.3471.0_x64__8wekyb3d8bbwe
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="appx.family" class="my-5">
|
||||
<h5>appx.family</h5>
|
||||
<p>Returns the family name of the Package.</p>
|
||||
<p>Syntax</p>
|
||||
<code>appx.family(packageName)</code>
|
||||
<p>Parameters</p>
|
||||
<dl>
|
||||
<dt>packageName</dt>
|
||||
<dd>can be passed in full name or part of name.</dd>
|
||||
</dl>
|
||||
<p>Example</p>
|
||||
<pre><code>appx.family("WindowsTerminal")
|
||||
// result:
|
||||
// Microsoft.WindowsTerminal_8wekyb3d8bbwe
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="appx.version" class="my-5">
|
||||
<h5>appx.version</h5>
|
||||
<p>Returns version of the Package.</p>
|
||||
<p>Syntax</p>
|
||||
<code>appx.version(packageName)</code>
|
||||
<p>Parameters</p>
|
||||
<dl>
|
||||
<dt>packageName</dt>
|
||||
<dd>can be passed in full name or part of name.</dd>
|
||||
</dl>
|
||||
<p>Example</p>
|
||||
<pre><code>appx.version("WindowsTerminal")
|
||||
// result:
|
||||
// 1.11.3471.0
|
||||
</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="appx.shell" class="my-5">
|
||||
<h5>appx.shell</h5>
|
||||
<p>Return package settings to run.</p>
|
||||
<p>Syntax</p>
|
||||
<code>appx.shell(packageName)</code>
|
||||
<p>Parameters</p>
|
||||
<dl>
|
||||
<dt>packageName</dt>
|
||||
<dd>can be passed in full name or part of name.</dd>
|
||||
</dl>
|
||||
<p>Example</p>
|
||||
<pre><code>appx.shell("WindowsTerminal")
|
||||
// result:
|
||||
// shell:appsFolder\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App
|
||||
</code></pre>
|
||||
</section>
|
||||
@@ -0,0 +1,39 @@
|
||||
<h5 id="clipboard">CLIPBOARD</h5>
|
||||
<br>
|
||||
<p>Clipboard handling functions.</p>
|
||||
<br>
|
||||
|
||||
<section id="clipboard.get" class="my-5">
|
||||
<h5>clipboard.get</h5>
|
||||
<p>Returns the value of the stored clipboard.</p>
|
||||
<p>Syntax</p>
|
||||
<code>clipboard.get</code>
|
||||
</section>
|
||||
|
||||
<section id="clipboard.set" class="my-5">
|
||||
<h5>clipboard.set</h5>
|
||||
<p>Store a value in the clipboard.</p>
|
||||
<p>Syntax</p>
|
||||
<code>clipboard.set("Hello world!")</code>
|
||||
</section>
|
||||
|
||||
<section id="clipboard.length" class="my-5">
|
||||
<h5>clipboard.length</h5>
|
||||
<p>Returns the length of the value stored in the clipboard.</p>
|
||||
<p>Syntax</p>
|
||||
<code>clipboard.length</code>
|
||||
</section>
|
||||
|
||||
<section id="clipboard.is_empty" class="my-5">
|
||||
<h5>clipboard.is_empty</h5>
|
||||
<p>Verifies that there is a value stored in the clipboard.</p>
|
||||
<p>Syntax</p>
|
||||
<code>clipboard.is_empty</code>
|
||||
</section>
|
||||
|
||||
<section id="clipboard.empty" class="my-5">
|
||||
<h5>clipboard.empty</h5>
|
||||
<p>Empty values stored in the clipboard.</p>
|
||||
<p>Syntax</p>
|
||||
<code>clipboard.empty</code>
|
||||
</section>
|
||||
@@ -0,0 +1,173 @@
|
||||
<h5>COLOR</h5>
|
||||
<br>
|
||||
<p>Color namespace contains predefined colors</p>
|
||||
<br>
|
||||
<pre>
|
||||
color.aliceblue
|
||||
color.antiquewhite
|
||||
color.aqua
|
||||
color.aquamarine
|
||||
color.azure
|
||||
color.beige
|
||||
color.bisque
|
||||
color.black
|
||||
color.blanchedalmond
|
||||
color.blue
|
||||
color.blueviolet
|
||||
color.brown
|
||||
color.burlywood
|
||||
color.cadetblue
|
||||
color.chartreuse
|
||||
color.chocolate
|
||||
color.coral
|
||||
color.cornflowerblue
|
||||
color.cornsilk
|
||||
color.crimson
|
||||
color.cyan
|
||||
color.darkblue
|
||||
color.darkcyan
|
||||
color.darkgoldenrod
|
||||
color.darkgray
|
||||
color.darkgreen
|
||||
color.darkkhaki
|
||||
color.darkmagenta
|
||||
color.darkolivegreen
|
||||
color.darkorange
|
||||
color.darkorchid
|
||||
color.darkred
|
||||
color.darksalmon
|
||||
color.darkseagreen
|
||||
color.darkslateblue
|
||||
color.darkslategray
|
||||
color.darkturquoise
|
||||
color.darkviolet
|
||||
color.deeppink
|
||||
color.deepskyblue
|
||||
color.dimgray
|
||||
color.dodgerblue
|
||||
color.firebrick
|
||||
color.floralwhite
|
||||
color.forestgreen
|
||||
color.fuchsia
|
||||
color.gainsboro
|
||||
color.ghostwhite
|
||||
color.gold
|
||||
color.goldenrod
|
||||
color.gray
|
||||
color.green
|
||||
color.greenyellow
|
||||
color.honeydew
|
||||
color.hotpink
|
||||
color.indianred
|
||||
color.indigo
|
||||
color.ivory
|
||||
color.khaki
|
||||
color.lavender
|
||||
color.lavenderblush
|
||||
color.lawngreen
|
||||
color.lemonchiffon
|
||||
color.lightblue
|
||||
color.lightcoral
|
||||
color.lightcyan
|
||||
color.lightgoldenrodyellow
|
||||
color.lightgray
|
||||
color.lightgreen
|
||||
color.lightpink
|
||||
color.lightsalmon
|
||||
color.lightseagreen
|
||||
color.lightskyblue
|
||||
color.lightslategray
|
||||
color.lightsteelblue
|
||||
color.lightyellow
|
||||
color.lime
|
||||
color.limegreen
|
||||
color.linen
|
||||
color.magenta
|
||||
color.maroon
|
||||
color.mediumaquamarine
|
||||
color.mediumblue
|
||||
color.mediumorchid
|
||||
color.mediumpurple
|
||||
color.mediumseagreen
|
||||
color.mediumslateblue
|
||||
color.mediumspringgreen
|
||||
color.mediumturquoise
|
||||
color.mediumvioletred
|
||||
color.midnightblue
|
||||
color.mintcream
|
||||
color.mistyrose
|
||||
color.moccasin
|
||||
color.navajowhite
|
||||
color.navy
|
||||
color.oldlace
|
||||
color.olive
|
||||
color.olivedrab
|
||||
color.orange
|
||||
color.orangered
|
||||
color.orchid
|
||||
color.palegoldenrod
|
||||
color.palegreen
|
||||
color.paleturquoise
|
||||
color.palevioletred
|
||||
color.papayawhip
|
||||
color.peachpuff
|
||||
color.peru
|
||||
color.pink
|
||||
color.plum
|
||||
color.powderblue
|
||||
color.purple
|
||||
color.red
|
||||
color.rosybrown
|
||||
color.royalblue
|
||||
color.saddlebrown
|
||||
color.salmon
|
||||
color.sandybrown
|
||||
color.seagreen
|
||||
color.seashell
|
||||
color.sienna
|
||||
color.silver
|
||||
color.skyblue
|
||||
color.slateblue
|
||||
color.slategray
|
||||
color.snow
|
||||
color.springgreen
|
||||
color.steelblue
|
||||
color.tan
|
||||
color.teal
|
||||
color.thistle
|
||||
color.tomato
|
||||
color.transparent
|
||||
color.turquoise
|
||||
color.violet
|
||||
color.wheat
|
||||
color.white
|
||||
color.whitesmoke
|
||||
color.yellow
|
||||
color.yellowgreen
|
||||
</pre>
|
||||
<br/>
|
||||
<h5>color.rgb(red, green, blue)</h5>
|
||||
<br/>
|
||||
<h5>color.box</h5>
|
||||
<h5>color.box(#ff0000)</h5>
|
||||
<br/>
|
||||
<h5>color.random or color.random(min, max)</h5>
|
||||
<pre><code>color.random
|
||||
color.random(0x808080, 0xf0f0f0)
|
||||
</code></pre>
|
||||
<br/>
|
||||
<pre>
|
||||
color.default
|
||||
color.invert
|
||||
color.accent
|
||||
color.accent_light1
|
||||
color.accent_light2
|
||||
color.accent_light3
|
||||
color.accent_dark1
|
||||
color.accent_dark2
|
||||
color.accent_dark3
|
||||
color.opacity
|
||||
color.lighten
|
||||
color.darken
|
||||
color.rgba
|
||||
</pre>
|
||||
@@ -0,0 +1,55 @@
|
||||
<h5>COMMAND</h5>
|
||||
<section id="command.copy" class="my-5">
|
||||
<h5>command.copy, command.copy_to_clipboard</h5>
|
||||
<p>copy to parameter clipboard.</p>
|
||||
<p>Syntax</p>
|
||||
<code>command.copy('string copy to clipboard')</code>
|
||||
</section>
|
||||
|
||||
<section id="command.sleep" class="my-5">
|
||||
<h5>command.sleep(milliseconds)</h5>
|
||||
<p>Suspends the execution of the current thread until the time-out interval elapses.</p>
|
||||
<p>Syntax</p>
|
||||
<code>command.sleep(1000)</code>
|
||||
</section>
|
||||
|
||||
<section id="command.random" class="my-5">
|
||||
<h5>command.random</h5>
|
||||
<p>Suspends the execution of the current thread until the time-out interval elapses.</p>
|
||||
<p>Syntax</p>
|
||||
<code>command.random(min value, max value)</code>
|
||||
</section>
|
||||
|
||||
<section id="command.navigate" class="my-5">
|
||||
<h5>command.navigate</h5>
|
||||
<p>Opens a folder in the same explorer window.</p>
|
||||
<p>Syntax</p>
|
||||
<code>command.navigate(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="list" class="my-5">
|
||||
<pre><code>command.cascade_windows
|
||||
command.copy_to_folder
|
||||
command.customize_this_folder
|
||||
command.find
|
||||
command.folder_options
|
||||
command.invert_selection
|
||||
command.minimize_all_windows
|
||||
command.move_to_folder
|
||||
command.redo
|
||||
command.refresh
|
||||
command.restart_explorer
|
||||
command.restore_all_windows
|
||||
command.run
|
||||
command.search
|
||||
command.select_all
|
||||
command.select_none
|
||||
command.show_windows_side_by_side
|
||||
command.show_windows_stacked
|
||||
command.switcher
|
||||
command.toggle_desktop
|
||||
command.toggleext
|
||||
command.togglehidden
|
||||
command.undo
|
||||
</code></pre>
|
||||
</section>
|
||||
@@ -0,0 +1,175 @@
|
||||
<h5>ID</h5>
|
||||
<p>The namespace of the id contains the identifiers for most of the system context menus items where the item's title or
|
||||
icons can be returned</p>
|
||||
<br>
|
||||
<section id="syntax" class="my-5">
|
||||
<h5>Syntax</h5>
|
||||
<code>id.copy</code><br/>
|
||||
<code>id.copy.title</code><br/>
|
||||
<code>id.copy.icon</code> or <code>icon.copy</code>
|
||||
</section>
|
||||
|
||||
<section id="list" class="my-5">
|
||||
<h5>List</h5>
|
||||
<pre><code>id.add_a_network_location
|
||||
id.adjust_date_time
|
||||
id.align_icons_to_grid
|
||||
id.arrange_by
|
||||
id.auto_arrange_icons
|
||||
id.autoplay
|
||||
id.cancel
|
||||
id.cascade_windows
|
||||
id.cast_to_device
|
||||
id.cleanup
|
||||
id.collapse
|
||||
id.collapse_all_groups
|
||||
id.collapse_group
|
||||
id.command_prompt
|
||||
id.compressed
|
||||
id.configure
|
||||
id.content
|
||||
id.control_panel
|
||||
id.copy
|
||||
id.copy_as_path
|
||||
id.copy_here
|
||||
id.copy_path
|
||||
id.copy_to
|
||||
id.copy_to_folder
|
||||
id.cortana
|
||||
id.create_shortcut
|
||||
id.create_shortcuts
|
||||
id.create_shortcuts_here
|
||||
id.customize_notification_icons
|
||||
id.customize_this_folder
|
||||
id.cut
|
||||
id.delete
|
||||
id.desktop
|
||||
id.details
|
||||
id.device_manager
|
||||
id.disconnect
|
||||
id.disconnect_network_drive
|
||||
id.display_settings
|
||||
id.edit
|
||||
id.eject
|
||||
id.empty_recycle_bin
|
||||
id.erase_this_disc
|
||||
id.exit_explorer
|
||||
id.expand
|
||||
id.expand_all_groups
|
||||
id.expand_group
|
||||
id.expand_to_current_folder
|
||||
id.extra_large_icons
|
||||
id.extract_all
|
||||
id.extract_to
|
||||
id.file_explorer
|
||||
id.folder_options
|
||||
id.format
|
||||
id.give_access_to
|
||||
id.group_by
|
||||
id.include_in_library
|
||||
id.insert_unicode_control_character
|
||||
id.install
|
||||
id.large_icons
|
||||
id.list
|
||||
id.lock_all_taskbars
|
||||
id.lock_the_taskbar
|
||||
id.make_available_offline
|
||||
id.make_available_online
|
||||
id.manage
|
||||
id.map_as_drive
|
||||
id.map_network_drive
|
||||
id.medium_icons
|
||||
id.merge
|
||||
id.more_options
|
||||
id.mount
|
||||
id.move_here
|
||||
id.move_to
|
||||
id.move_to_folder
|
||||
id.new
|
||||
id.new_folder
|
||||
id.new_item
|
||||
id.news_and_interests
|
||||
id.next_desktop_background
|
||||
id.open
|
||||
id.open_as_portable
|
||||
id.open_autoplay
|
||||
id.open_command_prompt
|
||||
id.open_command_window_here
|
||||
id.open_file_location
|
||||
id.open_folder_location
|
||||
id.open_in_new_process
|
||||
id.open_in_new_tab
|
||||
id.open_in_new_window
|
||||
id.open_new_tab
|
||||
id.open_new_window
|
||||
id.open_powershell_window_here
|
||||
id.open_windows_powershell
|
||||
id.open_with
|
||||
id.options
|
||||
id.paste
|
||||
id.paste_shortcut
|
||||
id.personalize
|
||||
id.pin_current_folder_to_quick_access
|
||||
id.pin_to_quick_access
|
||||
id.pin_to_start
|
||||
id.pin_to_taskbar
|
||||
id.play
|
||||
id.play_with_windows_media_player
|
||||
id.power_options
|
||||
id.preview
|
||||
id.print
|
||||
id.properties
|
||||
id.reconversion
|
||||
id.redo
|
||||
id.refresh
|
||||
id.remove_from_quick_access
|
||||
id.remove_properties
|
||||
id.rename
|
||||
id.restore
|
||||
id.restore_default_libraries
|
||||
id.restore_previous_versions
|
||||
id.rotate_left
|
||||
id.rotate_right
|
||||
id.run
|
||||
id.run_as_administrator
|
||||
id.run_as_another_user
|
||||
id.search
|
||||
id.select_all
|
||||
id.send_to
|
||||
id.set_as_desktop_background
|
||||
id.set_as_desktop_wallpaper
|
||||
id.settings
|
||||
id.share
|
||||
id.share_with
|
||||
id.shield
|
||||
id.show_all_folders
|
||||
id.show_cortana_button
|
||||
id.show_desktop_icons
|
||||
id.show_file_extensions
|
||||
id.show_hidden_files
|
||||
id.show_libraries
|
||||
id.show_network
|
||||
id.show_pen_button
|
||||
id.show_people_on_the_taskbar
|
||||
id.show_task_view_button
|
||||
id.show_the_desktop
|
||||
id.show_this_pc
|
||||
id.show_touch_keyboard_button
|
||||
id.show_touchpad_button
|
||||
id.show_windows_side_by_side
|
||||
id.show_windows_stacked
|
||||
id.small_icons
|
||||
id.sort_by
|
||||
id.store
|
||||
id.task_manager
|
||||
id.taskbar_settings
|
||||
id.tiles
|
||||
id.troubleshoot_compatibility
|
||||
id.turn_off_bitlocker
|
||||
id.turn_on_bitlocker
|
||||
id.undo
|
||||
id.unpin_from_quick_access
|
||||
id.unpin_from_start
|
||||
id.unpin_from_taskbar
|
||||
id.view</code></pre>
|
||||
</section>
|
||||
@@ -0,0 +1,81 @@
|
||||
<h5>IMAGE (ICON)</h5>
|
||||
<p>The image namespace contains functions that return an icon and are only assigned to the <code>image</code> property
|
||||
</p>
|
||||
<section id="image.glyph" class="my-5">
|
||||
<h5>image.glyph</h5>
|
||||
<p>Return font icon with color and size option.</p>
|
||||
<p>Syntax</p>
|
||||
<code>image.glyph(0xE00B)</code><br>
|
||||
<code>image.glyph(\uE00B)</code><br>
|
||||
<code>image.glyph("\uE00B")</code><br>
|
||||
<code>image.glyph("\xE00B")</code><br>
|
||||
<br>
|
||||
<code>image.glyph(0xE00B, #0000ff)</code><br>
|
||||
<code>image.glyph(0xE00B, #0000ff, 10)</code><br>
|
||||
<code>image.glyph(0xE00B, #0000ff, 12, "Segoe MDL2 Assets")</code><br>
|
||||
</section>
|
||||
<section id="image.res" class="my-5">
|
||||
<h5>image.res</h5>
|
||||
<p>Returns an icon through a path or through resources.</p>
|
||||
<p>Syntax</p>
|
||||
<code>image.res(path)</code><br>
|
||||
<code>image.res(path, index)</code><br>
|
||||
<code>image.res(path, -id)</code><br>
|
||||
<br>
|
||||
<code>image(path)</code><br>
|
||||
<code>image(path, index)</code><br>
|
||||
<code>image(path, -id)</code><br>
|
||||
</section>
|
||||
<section id="image.svg," class="my-5">
|
||||
<h5>image.svg, image.svgf</h5>
|
||||
<p>Returns an svg image via a string or from a file path.</p>
|
||||
<p>Syntax</p>
|
||||
<code>image.svg('<svg viewBox="0 0 100 100"><path fill="red" d="M0 0 L 100 0 L50
|
||||
100 Z"/></svg>')</code><br>
|
||||
<code>image.svgf(path)</code><br>
|
||||
</section>
|
||||
<section id="image.rect" class="my-5">
|
||||
<h5>image.rect</h5>
|
||||
<p>Returns a colored rectangle icon of an optional size.</p>
|
||||
<p>Syntax</p>
|
||||
<code>image.rect(#0000ff)</code><br>
|
||||
<code>image.rect(#0000ff, 10)</code><br>
|
||||
</section>
|
||||
|
||||
<section id="image.segoe" class="my-5">
|
||||
<h5>image.segoe</h5>
|
||||
<p>Returns a glyph from "Segoe Fluent Icons" if present then "Segoe MDL2 Assets".</p>
|
||||
<p>Syntax</p>
|
||||
<code>image.segoe(\uxxxx)</code><br>
|
||||
<code>image.segoe(\uxxxx, 10)</code><br>
|
||||
</section>
|
||||
|
||||
<section id="image.fluent" class="my-5">
|
||||
<h5>image.fluent</h5>
|
||||
<p>Returns a glyph from "Segoe Fluent Icons" with optional size.</p>
|
||||
<p>Syntax</p>
|
||||
<code>image.fluent(\uxxxx)</code><br>
|
||||
<code>image.fluent(\uxxxx, 10)</code><br>
|
||||
</section>
|
||||
|
||||
<section id="image.mdl" class="my-5">
|
||||
<h5>image.mdl</h5>
|
||||
<p>Returns a glyph from "Segoe MDL2 Assets" with optional size.</p>
|
||||
<p>Syntax</p>
|
||||
<code>image.mdl(\uxxxx)</code><br>
|
||||
<code>image.mdl(\uxxxx, 10)</code><br>
|
||||
</section>
|
||||
|
||||
<section id="image.default" class="my-5">
|
||||
<h5>image.default</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>image.default</code>
|
||||
</section>
|
||||
|
||||
<section id="icon.box" class="my-5">
|
||||
<h5>icon.box</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>icon.box([["path to file"], [index]])</code>
|
||||
</section>
|
||||
@@ -0,0 +1,156 @@
|
||||
<h4>Functions</h4>
|
||||
<p>The functions and variables have unique titles described by fully qualified names that indicate a logical hierarchy.</p>
|
||||
<p><b>Shell</b> has a number of functions and variables built into it that are always available. They are listed here in alphabetical order.</p>
|
||||
|
||||
<section id="indexof" class="my-5">
|
||||
<h5>indexof</h5>
|
||||
<p>Find the position of a menu item.</p>
|
||||
<p>Syntax</p>
|
||||
<code>indexof(expression[, default position])</code>
|
||||
</section>
|
||||
|
||||
<section id="if" class="my-5">
|
||||
<h5>if</h5>
|
||||
<p>Conditionally executes another statement.</p>
|
||||
<p>Syntax</p>
|
||||
<code>if(condition-expression)</code><br><br>
|
||||
<code>if(condition-expression, true-expression)</code><br><br>
|
||||
<code>if(condition-expression, true-expression, false-expression)</code>
|
||||
</section>
|
||||
|
||||
<section id="null" class="my-5">
|
||||
<h5>null</h5>
|
||||
<p>Returns a null value.</p>
|
||||
<p>Syntax</p>
|
||||
<code>null(expression)</code><br><br>
|
||||
</section>
|
||||
|
||||
<section id="length" class="my-5">
|
||||
<h5>length (len)</h5>
|
||||
<p>Returns length of string and array type</p>
|
||||
<p>Syntax</p>
|
||||
<code>length(expression)</code><br><br>
|
||||
</section>
|
||||
|
||||
<section id="quote" class="my-5">
|
||||
<h5>quote</h5>
|
||||
<p>Returns text with a double quotation mark.</p>
|
||||
<p>Syntax</p>
|
||||
<code>quote(expression)</code>
|
||||
</section>
|
||||
|
||||
<section id="char" class="my-5">
|
||||
<h5>char</h5>
|
||||
<p>Returns the value of the numeric parameter to a character.</p>
|
||||
<p>Syntax</p>
|
||||
<code>char(numeric-expression)</code>
|
||||
</section>
|
||||
|
||||
<section id="var" class="my-5">
|
||||
<h5>var</h5>
|
||||
<p>Returns the value of the passed variable</p>
|
||||
<p>Syntax</p>
|
||||
<code>var(expression)</code>
|
||||
</section>
|
||||
|
||||
<section id="tohex" class="my-5">
|
||||
<h5>tohex</h5>
|
||||
<p>Converting the value of the passed numeric expression to hexadecimal string.</p>
|
||||
<p>Syntax</p>
|
||||
<code>tohex(numeric-expression)</code>
|
||||
</section>
|
||||
|
||||
<section id="equal" class="my-5">
|
||||
<h5>equal</h5>
|
||||
<p>Returns <code>true</code> if the parameters passed are equal.</p>
|
||||
<p>Syntax</p>
|
||||
<code>equal(expression-1, expression-2)</code>
|
||||
</section>
|
||||
|
||||
<section id="not" class="my-5">
|
||||
<h5>not</h5>
|
||||
<p>Returns <code>true</code> if the parameters passed are not equal.</p>
|
||||
<p>Syntax</p>
|
||||
<code>not(expression-1, expression-2)</code>
|
||||
</section>
|
||||
|
||||
<section id="greater" class="my-5">
|
||||
<h5>greater</h5>
|
||||
<p>Returns <code>true</code> if the first parameter is greater than the second parameter.</p>
|
||||
<p>Syntax</p>
|
||||
<code>greater(expression-1, expression-2)</code>
|
||||
</section>
|
||||
|
||||
<section id="less" class="my-5">
|
||||
<h5>less</h5>
|
||||
<p>Returns <code>true</code> if the first parameter is less than the second parameter.</p>
|
||||
<p>Syntax</p>
|
||||
<code>less(expression-1, expression-2)</code>
|
||||
</section>
|
||||
|
||||
<section id="shl" class="my-5">
|
||||
<h5>shl</h5>
|
||||
<p>bitwise left shift.</p>
|
||||
<p>Syntax</p>
|
||||
<code>shl(shift-expression, additive-expression)</code>
|
||||
</section>
|
||||
|
||||
<section id="shr" class="my-5">
|
||||
<h5>shr</h5>
|
||||
<p>bitwise right shift.</p>
|
||||
<p>Syntax</p>
|
||||
<code>shr(shift-expression, additive-expression)</code>
|
||||
</section>
|
||||
|
||||
<section id="cmd-visibility" class="my-5">
|
||||
<h5>cmd visibility enumerations</h5>
|
||||
<p>The flags that specify how an application is to be displayed when it is opened.</p>
|
||||
<pre><code>cmd.hidden
|
||||
cmd.show
|
||||
cmd.visible
|
||||
cmd.normal
|
||||
cmd.maximized
|
||||
cmd.minimized</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="selection-modes" class="my-5">
|
||||
<h5>Selection mode enumerations</h5>
|
||||
<p>Syntax</p>
|
||||
<pre><code>mode.none
|
||||
mode.single
|
||||
mode.multiple
|
||||
mode.multiunique
|
||||
mode.multisingle
|
||||
mode.multi</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="selection-types" class="my-5">
|
||||
<h5>Selection type enumerations</h5>
|
||||
<p>Syntax</p>
|
||||
<pre><code>type.desktop
|
||||
type.directory(dir)
|
||||
type.drive
|
||||
type.dvd
|
||||
type.file
|
||||
type.fixed
|
||||
type.namespace
|
||||
type.remote
|
||||
type.unknown
|
||||
type.usb
|
||||
type.vhd</code></pre>
|
||||
</section>
|
||||
|
||||
<h5 id="keywords">Keywords</h5>
|
||||
<pre><code>null
|
||||
bool
|
||||
true
|
||||
false
|
||||
auto
|
||||
none
|
||||
default</code>
|
||||
</pre>
|
||||
|
||||
<div class="is-unstyled mt-5"><a href="/docs/functions/app">app</a> | <a href="/docs/functions/color">color</a> | <a href="/docs/functions/image">image</a> | <a href="/docs/functions/io">io</a> | <a href="/docs/functions/key">key</a> | <a href="/docs/functions/msg">msg</a> | <a href="/docs/functions/path">path</a> | <a href="/docs/functions/reg">reg</a> | <a href="/docs/functions/sel">sel</a> | <a href="/docs/functions/str">str</a> | <a href="/docs/functions/sys">sys</a> | <a href="/docs/functions/user">user</a>| <a href="/docs/functions/input">input</a>
|
||||
| <a href="/docs/functions/ini">ini</a> | <a href="/docs/functions/clipboard">clipboard</a>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<h5>INI</h5>
|
||||
<br>
|
||||
<p>Functions for handling with .ini files.</p>
|
||||
<br>
|
||||
<section id="ini.get"class="my-5">
|
||||
<h5>ini.get</h5>
|
||||
<p>Returns the value of the key</p>
|
||||
<p>Syntax</p>
|
||||
<code>ini.get('path\to\ini file', "section", "key")</code>
|
||||
</section>
|
||||
|
||||
<section id="ini.set" class="my-5">
|
||||
<h5>ini.set</h5>
|
||||
<p>Set the key value.</p>
|
||||
<p>Syntax</p>
|
||||
<code>ini.set('path\to\ini file', "section", "key", "value")</code>
|
||||
</section>
|
||||
@@ -0,0 +1,18 @@
|
||||
<h5>INPUT</h5>
|
||||
<br>
|
||||
<p>The input box allows the user to enter and pass data.</p>
|
||||
<br>
|
||||
<section id="input"class="my-5">
|
||||
<h5>input</h5>
|
||||
<p>Show the input box with the window title and call parameter passed.<br>
|
||||
The function returns a non-zero value if the OK button is pressed. Otherwise, it returns zero.</p>
|
||||
<p>Syntax</p>
|
||||
<code>input("Title", "Prompt")</code>
|
||||
</section>
|
||||
|
||||
<section id="input.result" class="my-5">
|
||||
<h5>input.result</h5>
|
||||
<p>Returns the input value resulting from the input box.</p>
|
||||
<p>Syntax</p>
|
||||
<code>input.result</code>
|
||||
</section>
|
||||
@@ -0,0 +1,183 @@
|
||||
<h5>IO</h5>
|
||||
<br>
|
||||
<section id="io.attribute" class="my-5">
|
||||
<h5>io.attribute enumerations.</h5>
|
||||
<p>Syntax</p>
|
||||
<pre><code>io.attribute.archive
|
||||
io.attribute.compressed
|
||||
io.attribute.device
|
||||
io.attribute.directory
|
||||
io.attribute.encrypted
|
||||
io.attribute.hidden
|
||||
io.attribute.invalid
|
||||
io.attribute.normal
|
||||
io.attribute.offline
|
||||
io.attribute.readonly
|
||||
io.attribute.sparsefile
|
||||
io.attribute.system
|
||||
io.attribute.temporary
|
||||
io.attribute.virtual</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="io.attributes" class="my-5">
|
||||
<h5>io.attributes</h5>
|
||||
<p>Retrieves file system attributes for a specified path.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.attributes(path)</code><br><br>
|
||||
<p>attribute verification</p>
|
||||
<pre><code>// check if path is hidden
|
||||
io.attribute.hidden(path)
|
||||
|
||||
// check if path is directory
|
||||
io.attribute.directory(path)
|
||||
|
||||
var { atrr = io.attributes(path) }
|
||||
|
||||
// check if attr is hidden
|
||||
io.attribute.hidden(atrr)
|
||||
|
||||
// check if attr is directory
|
||||
io.attribute.directory(atrr)</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="io.copy" class="my-5">
|
||||
<h5>io.copy</h5>
|
||||
<p>Copies an existing file to a new file.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.copy(pathFrom, pathTo)</code>
|
||||
<br>
|
||||
<code>io.copy(pathFrom, pathTo, options)</code>
|
||||
options:<br>
|
||||
1 = skip_existing, 2 = overwrite_existing, 4 = update_existing, 16 = recursive<br>
|
||||
default = update_existing | recursive<br><br>
|
||||
Example:<br>
|
||||
<code>io.copy('c:\old', 'd:\new', 16 | 4)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.move" class="my-5">
|
||||
<h5>io.move</h5>
|
||||
<p>Moves an existing file or a directory, including its children..</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.move(oldPath, newPath)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.rename" class="my-5">
|
||||
<h5>io.rename</h5>
|
||||
<p>Rename a file or directory.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.rename(oldName, newName)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.delete" class="my-5">
|
||||
<h5>io.delete</h5>
|
||||
<p>Deletes an existing path.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.delete(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.directory.create" class="my-5">
|
||||
<h5>io.directory.create (io.dir.create)</h5>
|
||||
<p>Create new directory.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.directory.create(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.directory.exists" class="my-5">
|
||||
<h5>io.directory.exists (io.dir.exists)</h5>
|
||||
<p>Check if one or more directories exists.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.directory.exists(path)</code>
|
||||
<br>
|
||||
<code>io.directory.exists(path1, path2, path3, ...)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.directory.empty" class="my-5">
|
||||
<h5>io.directory.empty (io.dir.empty)</h5>
|
||||
<p>Check if one or more directory is empty.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.directory.empty(path)</code>
|
||||
<br>
|
||||
<code>io.directory.empty(path1, path2, path3, ...)</code>
|
||||
</section>
|
||||
|
||||
<h5 id="file-functions" class="my-5">File functions.</h5>
|
||||
|
||||
<section id="io.file.size" class="my-5">
|
||||
<h5>io.file.size</h5>
|
||||
<p>Retrieves the size of the specified file, in bytes.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.file.size(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.file.exists" class="my-5">
|
||||
<h5>io.file.exists</h5>
|
||||
<p>Check if one or more files exists.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.file.exists(path)</code>
|
||||
<br>
|
||||
<code>io.file.exists(path1, path2, path3, ...)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.file.read" class="my-5">
|
||||
<h5>io.file.read</h5>
|
||||
<p>Read file contents as text with character count option.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.file.read(path)</code><br>
|
||||
<code>io.file.read(path, 12)</code>
|
||||
</section>
|
||||
|
||||
<section id="io.file.create" class="my-5">
|
||||
<h5>io.file.create</h5>
|
||||
<p>Create new file with content option.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.file.create(path)</code><br>
|
||||
<code>io.file.create(path, "Hello World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="io.file.write" class="my-5">
|
||||
<h5>io.file.write</h5>
|
||||
<p>Writing to a file with new content.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.file.write(path, "Hello World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="io.file.append" class="my-5">
|
||||
<h5>io.file.append</h5>
|
||||
<p>Appends text to an existing file, or to a new file if the specified file does not exist.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.file.append(path, "Hello ")</code>
|
||||
<br>
|
||||
<code>io.file.append(path, "World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="io.datetime" class="my-5">
|
||||
<h5>io.datetime</h5>
|
||||
<p>Gets or Sets the time of the file.</p>
|
||||
<p>Syntax</p>
|
||||
get date time
|
||||
<code>
|
||||
io.datetime.created(sel.path)<br>
|
||||
io.datetime.modified(sel.path)<br>
|
||||
io.datetime.accessed(sel.path)<br>
|
||||
<br>
|
||||
io.datetime.created(sel.path, 'y/m/d')<br>
|
||||
io.datetime.modified(sel.path, 'y/m/d')<br>
|
||||
io.datetime.accessed(sel.path, 'y/m/d')<br>
|
||||
|
||||
</code>
|
||||
<br>
|
||||
set date time
|
||||
<br>
|
||||
<code>
|
||||
io.datetime.created(sel.path,2000,1,1))<br>
|
||||
io.datetime.modified(sel.path,2000,1,1))<br>
|
||||
io.datetime.accessed(sel.path,2000,1,1))<br>
|
||||
</code>
|
||||
</section>
|
||||
|
||||
<section id="io.meta" class="my-5">
|
||||
<h5>io.meta</h5>
|
||||
<p>Gets meta data by <a href="https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/properties/core-bumper.md">property key</a>.</p>
|
||||
<p>Syntax</p>
|
||||
<code>io.meta('path\to\file',"System.Size"))</code>
|
||||
</section>
|
||||
@@ -0,0 +1,92 @@
|
||||
<h5>KEY</h5>
|
||||
<p>Keyboard functions</p>
|
||||
<section id="keys" class="my-5">
|
||||
<h5>keys enumerations</h5>
|
||||
<pre><code>key.alt
|
||||
key.apps
|
||||
key.back
|
||||
key.cancel
|
||||
key.capital
|
||||
key.capslock
|
||||
key.control
|
||||
key.delete
|
||||
key.down
|
||||
key.end
|
||||
key.enter
|
||||
key.escape
|
||||
key.execute
|
||||
key.f1
|
||||
key.f10
|
||||
key.f11
|
||||
key.f12
|
||||
key.f2
|
||||
key.f3
|
||||
key.f4
|
||||
key.f5
|
||||
key.f6
|
||||
key.f7
|
||||
key.f8
|
||||
key.f9
|
||||
key.help
|
||||
key.home
|
||||
key.insert
|
||||
key.lalt
|
||||
key.lcontrol
|
||||
key.left
|
||||
key.lshift
|
||||
key.lwin
|
||||
key.next
|
||||
key.none
|
||||
key.pagedown
|
||||
key.pageup
|
||||
key.pause
|
||||
key.play
|
||||
key.print
|
||||
key.printscreen
|
||||
key.prior
|
||||
key.ralt
|
||||
key.rcontrol
|
||||
key.return
|
||||
key.right
|
||||
key.rshift
|
||||
key.rwin
|
||||
key.shift
|
||||
key.snapshot
|
||||
key.space
|
||||
key.tab
|
||||
key.up
|
||||
key.win</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="key" class="my-5">
|
||||
<h5>key</h5>
|
||||
<p>Syntax</p>
|
||||
<pre>
|
||||
<code>// check if SHIFT key is pressed
|
||||
key(key.shift)
|
||||
|
||||
// or
|
||||
key == key.shift
|
||||
|
||||
// or
|
||||
key.shift()
|
||||
|
||||
// check if tow keys (SHIFT+CTRL) is pressed
|
||||
key(key.shift, key.control)
|
||||
|
||||
// check if keys (SHIFT+CTRL+X) is pressed
|
||||
key(key.shift, key.control, 87)</code>
|
||||
</pre>
|
||||
</section>
|
||||
|
||||
<section id="key.send" class="my-5">
|
||||
<h5>key.send</h5>
|
||||
<p>Send one or more keys to the current window.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>key.send(key.f5)
|
||||
key.send(key.ctrl,'n')
|
||||
key.send(key.shift, key.delete)</code></pre>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
<h4>MSG</h4>
|
||||
<p>Displays a modal dialog box that contains a system icon, a set of buttons, and a brief application-specific message,
|
||||
such as status or error information. The message box returns an integer value that indicates which button the user
|
||||
clicked.</p>
|
||||
|
||||
<h5 id="syntax">Syntax</h5>
|
||||
<pre>
|
||||
msg(text)
|
||||
msg(text, title)
|
||||
msg(text, title, flags)
|
||||
</pre>
|
||||
<br>
|
||||
<h5 id="parameters">Parameters</h5>
|
||||
<table class="table table-borderless">
|
||||
<tr>
|
||||
<td class="kw">text</td>
|
||||
<td>The message to be displayed.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="kw">title</td>
|
||||
<td>The dialog box title. If this parameter is NULL, the default title is <b>Nilesoft Shell</b>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="kw">flags</td>
|
||||
<td>The contents and behavior of the dialog box. This parameter can be a combination of flags from the following
|
||||
groups of flags.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h5 id="flags">Flags</h5>
|
||||
<br>
|
||||
<h5 id="flags-icon">To display an icon in the message box, specify one of the following values.</h5>
|
||||
<dl>
|
||||
<dt>msg.error</dt>
|
||||
<dd>A stop-sign icon appears in the message box.</dd>
|
||||
|
||||
<dt>msg.question</dt>
|
||||
<dd>A question-mark icon appears in the message box.</dd>
|
||||
|
||||
<dt>msg.warning</dt>
|
||||
<dd>An exclamation-point icon appears in the message box.</dd>
|
||||
|
||||
<dt>msg.info</dt>
|
||||
<dd>An icon consisting of a lowercase letter i in a circle appears in the message box.</dd>
|
||||
</dl>
|
||||
<br>
|
||||
<h5 id="flags-button">To indicate the buttons displayed in the message box, specify one of the following values.</h5>
|
||||
<dl class="keyword">
|
||||
<dt>msg.ok</dt>
|
||||
<dd>The message box contains one push button: OK. This is the default.</dd>
|
||||
|
||||
<dt>msg.okcancel</dt>
|
||||
<dd>The message box contains two push buttons: OK and Cancel.</dd>
|
||||
|
||||
<dt>msg.yesnocancel</dt>
|
||||
<dd>The message box contains three push buttons: Yes, No, and Cancel.</dd>
|
||||
|
||||
<dt>msg.yesno</dt>
|
||||
<dd>The message box contains two push buttons: Yes and No.</dd>
|
||||
</dl>
|
||||
<br>
|
||||
<h5 id="flags-default">To indicate the default button, specify one of the following values.</h5>
|
||||
<dl>
|
||||
<dt>msg.defbutton1</dt>
|
||||
<dd>The first button is the default button.</dd>
|
||||
|
||||
<dt>msg.defbutton2</dt>
|
||||
<dd>The second button is the default button.</dd>
|
||||
|
||||
<dt>msg.defbutton3</dt>
|
||||
<dd>The third button is the default button.</dd>
|
||||
</dl>
|
||||
<br>
|
||||
<h5 id="flags-modal">To indicate the modality of the dialog box, specify one of the following values.</h5>
|
||||
<dl>
|
||||
<dt>msg.applmodal</dt>
|
||||
<dd>The user must respond to the message box before continuing work in the current window. However, the user can
|
||||
move to the windows of other threads and work in those windows.
|
||||
</dd>
|
||||
<dt>msg.taskmodal</dt>
|
||||
<dd>Same as msg.applmodal except that all the top-level windows belonging to the current thread are disabled.</dd>
|
||||
</dl>
|
||||
<br>
|
||||
<h5 id="flags-options">To specify other options, use one or more of the following values.</h5>
|
||||
<dl>
|
||||
<dt>msg.right</dt>
|
||||
<dd>The text is right-justified.</dd>
|
||||
<dt>msg.rtlreading</dt>
|
||||
<dd>Displays message and caption text using right-to-left reading order on Hebrew and Arabic systems.</dd>
|
||||
<dt>msg.setforeground</dt>
|
||||
<dd>The message box becomes the foreground window.</dd>
|
||||
<dt>msg.topmost</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
<br>
|
||||
<h5 id="flags-return-value">Return value</h5>
|
||||
<p>If a message box has a Cancel button, the function returns the <code>msg.idcancel</code> value if either the
|
||||
<kbd>ESC</kbd> key is pressed or the Cancel button is selected. If the message box has no Cancel button, pressing
|
||||
<kbd>ESC</kbd> will no effect - unless an <code>msg.ok</code> button is present. If an <code>msg.ok</code> button is
|
||||
displayed and the user presses <kbd>ESC</kbd>, the return value will be <code>msg.idok</code>.</p>
|
||||
<p>If the function fails, the return value is zero.<br>
|
||||
If the function succeeds, the return value is one of the following values:
|
||||
</p>
|
||||
<dl>
|
||||
<dt>msg.idok or 1</dt>
|
||||
<dd>The OK button was selected.</dd>
|
||||
|
||||
<dt>msg.idcancel or 2</dt>
|
||||
<dd>The Cancel button was selected.</dd>
|
||||
|
||||
<dt>msg.idyes or 6</dt>
|
||||
<dd>The Yes button was selected.</dd>
|
||||
|
||||
<dt>msg.idno or 7</dt>
|
||||
<dd>The No button was selected.</dd>
|
||||
</dl>
|
||||
<h5 id="examples">Examples</h5>
|
||||
<pre class="syntax"><code>msg("Hello, Warld!","NileSoft Shell", msg.info | msg.ok)<br>
|
||||
msg("Hello, Warld!","NileSoft Shell")<br>
|
||||
msg("Hello, Warld!")</code></pre>
|
||||
<br><br>
|
||||
<section class="my-5">
|
||||
<h5>msg.beep(type)</h5>
|
||||
<p>Plays a waveform sound. The waveform sound for each sound type is identified by an entry in the registry.</p>
|
||||
<p>Syntax</p>
|
||||
<code>msg.beep</code><br>
|
||||
<code>msg.beep(msg.error)</code><br>
|
||||
<code>msg.beep(msg.warning)</code>
|
||||
</section>
|
||||
@@ -0,0 +1,253 @@
|
||||
<h5>PATH</h5>
|
||||
<br>
|
||||
|
||||
<section id="path.combine" class="my-5">
|
||||
<h5>path.combine (path.join)</h5>
|
||||
<p>Combines an array of strings into a path.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.combine(path1, path2)</code><br>
|
||||
<code>path.combine("C:", "Windows", "Explorer.exe")</code>
|
||||
</section>
|
||||
|
||||
<section id="path.currentdirectory" class="my-5">
|
||||
<h5>path.currentdirectory (path.curdir)</h5>
|
||||
<p>Retrieves the current directory for the current process.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.currentdirectory</code>
|
||||
</section>
|
||||
|
||||
<section id="path.directory.name" class="my-5">
|
||||
<h5>path.directory.name (path.dir.name)</h5>
|
||||
<p>Return the directory name from the path.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.directory.name('c:\windows\system32') // returns: system32</code>
|
||||
</section>
|
||||
|
||||
<section id="path.directory.box" class="my-5">
|
||||
<h5>path.directory.box (path.dir.box)</h5>
|
||||
<p>Shows the directory selection box and returns the path of the specified directory.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.directory.box</code>
|
||||
</section>
|
||||
|
||||
<section id="path.empty" class="my-5">
|
||||
<h5>path.empty</h5>
|
||||
<p>Check if one or more path is empty.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.empty(path)</code><br>
|
||||
<code>path.empty(path1, path2, ...)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.exists" class="my-5">
|
||||
<h5>path.exists</h5>
|
||||
<p>Check if one or more path exists..</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.exists(path)</code><br>
|
||||
<code>path.exists(path1, path2, ...)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.full" class="my-5">
|
||||
<h5>path.full</h5>
|
||||
<p>Returns the absolute path for the specified path string.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.full(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.short" class="my-5">
|
||||
<h5>path.short</h5>
|
||||
<p>Retrieves the short path form of the specified path.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.short(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.name" class="my-5">
|
||||
<h5>path.name</h5>
|
||||
<p>Return the name from the path.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.name(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.location" class="my-5">
|
||||
<h5>path.location (path.parent)</h5>
|
||||
<p>Return the path of the parent</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.location(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.location.name" class="my-5">
|
||||
<h5>path.location.name</h5>
|
||||
<p>Return the name from the parent</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.location.name(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.root" class="my-5">
|
||||
<h5>path.root</h5>
|
||||
<p>Return the drive path</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.root(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.title" class="my-5">
|
||||
<h5>path.title</h5>
|
||||
<p>Return the title from the path</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.title(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.type" class="my-5">
|
||||
<h5>path.type</h5>
|
||||
<p>Return the type of path</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.type(path) == type.file</code>
|
||||
</section>
|
||||
|
||||
<section id="path.file.name" class="my-5">
|
||||
<h5>path.file.name</h5>
|
||||
<p>Return the name of path</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.file.name(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.file.title" class="my-5">
|
||||
<h5>path.file.title</h5>
|
||||
<p>Return the name of path without extension</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.file.title(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.file.ext" class="my-5">
|
||||
<h5>path.file.ext</h5>
|
||||
<p>Return the extension of path</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.file.ext(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.file.box" class="my-5">
|
||||
<h5>path.file.box</h5>
|
||||
<p>Shows the file selection box and returns the path of the specified file.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.file.box</code><br>
|
||||
<code>path.file.box('All|*.*|Text|*.txt')</code><br>
|
||||
<code>path.file.box('exe|*.exe', 'c:\windows')</code><br>
|
||||
<code>path.file.box('exe|*.exe', 'c:\windows', 'explorer.exe')</code>
|
||||
</section>
|
||||
|
||||
<section id="path.files" class="my-5">
|
||||
<h5>path.files</h5>
|
||||
<p>Returns all files with the ability to filter.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>path.files(sys.dir, ["*"], flags[2=files | 3=dirs | 5=files+dirs | 8=quots | 16=full path], sep)
|
||||
|
||||
// get all files and dirs
|
||||
path.files(sys.dir)
|
||||
path.files(sys.dir, "*")
|
||||
|
||||
// get all files with .exe
|
||||
path.files(sys.dir,"*.exe")
|
||||
|
||||
// full path + quots
|
||||
path.files(sys.dir, '*', 8|16)
|
||||
</code></pre>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="path.isabsolute" class="my-5">
|
||||
<h5>path.isabsolute</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>path.isabsolute(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.isrelative" class="my-5">
|
||||
<h5>path.isrelative</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>path.isrelative(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.isfile" class="my-5">
|
||||
<h5>path.isfile</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>path.isfile(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.isdirectory" class="my-5">
|
||||
<h5>path.isdirectory</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>path.isdirectory(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.isroot" class="my-5">
|
||||
<h5>path.isroot (path.isdrive)</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>path.isdrive(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.isclsid" class="my-5">
|
||||
<h5>path.isclsid (path.isnamespace)</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>path.isclsid(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.isexe" class="my-5">
|
||||
<h5>path.isexe</h5>
|
||||
<p></p>
|
||||
<p>Syntax</p>
|
||||
<code>path.isexe(path)</code>
|
||||
</section>
|
||||
|
||||
<section id="path.removeextension" class="my-5">
|
||||
<h5>path.removeextension</h5>
|
||||
<p>Remove the extension from the passed parameter.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.removeextension</code>
|
||||
</section>
|
||||
|
||||
<section id="path.lnk" class="my-5">
|
||||
<h5>path.lnk</h5>
|
||||
<p>Return a path from the shortcut</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.lnk(path)</code>
|
||||
</section>
|
||||
<section id="path.lnk.type" class="my-5">
|
||||
<h5>path.lnk.type</h5>
|
||||
<p>Return type from the shortcut</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.lnk.type(path)</code>
|
||||
</section>
|
||||
<section id="path.lnk.dir" class="my-5">
|
||||
<h5>path.lnk.dir</h5>
|
||||
<p>Return a dir path from the shortcut</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.lnk.dir(path)</code>
|
||||
</section>
|
||||
<section id="path.lnk.icon" class="my-5">
|
||||
<h5>path.lnk.icon</h5>
|
||||
<p>Return a icon path and index from the shortcut</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.lnk.icon(path)</code>
|
||||
</section>
|
||||
<section id="path.getknownfolder" class="my-5">
|
||||
<h5>path.getknownfolder</h5>
|
||||
<p>Retrieves the full path of a known folder identified.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.getknownfolder('{905e63b6-c1bf-494e-b29c-65b732d3d21a}')</code>
|
||||
</section>
|
||||
|
||||
<section id="path.separator(path.sep)" class="my-5">
|
||||
<h5>path.separator(path.sep)</h5>
|
||||
<p>Replacing the back slash with a forward slash or defining a spacer.</p>
|
||||
<p>Syntax</p>
|
||||
<code>path.separator('c:\windows\system32')</code> <em>return "c:/windows/system32"</em><br>
|
||||
<code>path.separator('c:\windows\system32', '#')</code> <em>return "c:#windows#system32"</em>
|
||||
</section>
|
||||
|
||||
<section id="path.wsl" class="my-5">
|
||||
<h5>path.wsl</h5>
|
||||
<p>convert the path to wsl path</p>
|
||||
</section>
|
||||
@@ -0,0 +1,15 @@
|
||||
<h5>PROCESS</h5>
|
||||
<br>
|
||||
<p></p>
|
||||
<br>
|
||||
<section id="syntax" class="my-5">
|
||||
<h5>Syntax</h5>
|
||||
<pre><code>
|
||||
process.handle
|
||||
process.name
|
||||
process.id
|
||||
process.path
|
||||
process.is_explorer
|
||||
process.used
|
||||
</code></pre>
|
||||
</section>
|
||||
@@ -0,0 +1,92 @@
|
||||
<h5>REG</h5>
|
||||
<p>Registry functions</p>
|
||||
<br>
|
||||
<section id="registry-hives" class="my-5">
|
||||
<h5>Registry hive enum</h5>
|
||||
<p>Syntax</p>
|
||||
<pre><code>HKCU
|
||||
HKCR
|
||||
HKLM
|
||||
HKU
|
||||
HKEY_CLASSES_ROOT
|
||||
HKEY_CURRENT_USER
|
||||
HKEY_LOCAL_MACHINE
|
||||
HKEY_USERS
|
||||
</code></pre>
|
||||
</section>
|
||||
<section id="registry-types" class="my-5">
|
||||
<h5>Registry value type Enum</h5>
|
||||
<p>Syntax</p>
|
||||
<pre><code>reg.none // No data type
|
||||
reg.sz // REG_SZ
|
||||
reg.expand // REG_EXPAND_SZ
|
||||
reg.binary // REG_BINARY
|
||||
reg.multi // REG_MULTI_SZ
|
||||
reg.dword // REG_DWORD
|
||||
reg.qword // REG_QWORD</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="reg-function" class="my-5">
|
||||
<h5>The function of reading from the Registry.</h5>
|
||||
<p>Syntax</p>
|
||||
<code>reg(reg.lm, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion','ProductName')</code><br><br>
|
||||
<code>reg(reg.cr, 'txtfile\DefaultIcon')</code>
|
||||
</section>
|
||||
|
||||
<section id="reg.exists" class="my-5">
|
||||
<h5>reg.exists</h5>
|
||||
<p>Check that the key or value name exists</p>
|
||||
<p>Syntax</p>
|
||||
<p>Check that the key exists</p>
|
||||
<code>reg.exists('HKCU\Control Panel\Desktop')</code>
|
||||
<p>Check that the value name exists</p>
|
||||
<code>reg.exists('HKCU\Control Panel\Desktop', "WallPaper")</code>
|
||||
</section>
|
||||
|
||||
<section id="reg.get" class="my-5">
|
||||
<h5>reg.get</h5>
|
||||
<p>Read data by value name</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>reg('HKCU\Control Panel\Desktop', "WallPaper")
|
||||
reg.get('HKCU\Control Panel\Desktop', "WallPaper")
|
||||
reg.get('HKCU\Control Panel\Desktop')</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="reg.set" class="my-5">
|
||||
<h5>reg.set</h5>
|
||||
<p>Allows creating a subkey with the value name and value data</p>
|
||||
<p>Syntax</p>
|
||||
<p>Create Subkey</p>
|
||||
<pre><code>reg.set('HKCU\Software\Nilesoft\Shell')</pre></code>
|
||||
<p>Create Subkey with value and set value data type.</p>
|
||||
<pre><code>reg.set('HKCU\Software\Nilesoft\Shell', "test-int", 1, reg.dword)
|
||||
reg.set('HKCU\Software\Nilesoft\Shell', "test-str", 1, reg.sz)
|
||||
reg.set('HKCU\Software\Nilesoft\Shell', "test-str", 'some string', reg.sz)</code></pre>
|
||||
|
||||
<p>Set value data with auto type detection.</p><pre><code>
|
||||
reg.set('HKCU\Software\Nilesoft\Shell', 'test-auto-int', 1)
|
||||
reg.set('HKCU\Software\Nilesoft\Shell', 'test-auto-str', 'some string')</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="reg.delete" class="my-5">
|
||||
<h5>reg.delete</h5>
|
||||
<p>Allows deleting a subkey or deleting a value</p>
|
||||
<p>Syntax</p>
|
||||
<p>Delete value name.</p>
|
||||
<pre><code>reg.delete('HKCU\Software\Nilesoft\Shell', 'test-auto')</pre></code>
|
||||
<p>Delete subkey.</p>
|
||||
<pre><code>reg.delete('HKCU\Software\Nilesoft\Shell')</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="reg.keys" class="my-5">
|
||||
<h5>reg.keys</h5>
|
||||
<p>Returns all subkey names</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>reg.keys('HKCU\Software\Nilesoft\Shell')</pre></code>
|
||||
</section>
|
||||
<section id="reg.values" class="my-5">
|
||||
<h5>reg.values</h5>
|
||||
<p>Returns all value names</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>reg.values('HKCU\Software\Nilesoft\Shell')</pre></code>
|
||||
</section>
|
||||
@@ -0,0 +1,20 @@
|
||||
<h5>REGEX</h5>
|
||||
<p>regex functions</p>
|
||||
<br>
|
||||
<section id="regex.match" class="my-5">
|
||||
<h5>regex.match</h5>
|
||||
<p>Returns true if a match exists, false otherwise.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>regex.match(str, pattern)</code></pre>
|
||||
</section>
|
||||
<section id="regex.matches" class="my-5">
|
||||
<h5>regex.matches</h5>
|
||||
<p>Returns an array of strings</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>regex.matches(str, pattern)</code></pre>pre>
|
||||
</section>
|
||||
<section id="regex.replace" class="my-5">
|
||||
<h5>regex.replace</h5>
|
||||
<p>Syntax</p>
|
||||
<pre><code>regex.replace(str, pattern, "new str")</code></pre>
|
||||
</section>
|
||||
@@ -0,0 +1,247 @@
|
||||
<h5>SEL</h5>
|
||||
<p>Has many functions to handle selected file system objects.</p>
|
||||
<br>
|
||||
|
||||
<section id="sel" class="my-5">
|
||||
<h5>sel</h5>
|
||||
<p>Returns all selected items with double quotation mark and custom separator.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel(quote=<span class="syntax-keyword">false</span>, separator=' ')</code>
|
||||
<p>Parameters</p>
|
||||
<dl>
|
||||
<dt>quote</dt>
|
||||
<dd>Sets if the return value shall be quoted.</dd>
|
||||
<dt>separator</dt>
|
||||
<dd>Separator to join the different items from the selection.</dd>
|
||||
</dl>
|
||||
<p>Example</p>
|
||||
<pre><code>sel
|
||||
sel(true)
|
||||
sel(true, "\n")</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="sel.path" class="my-5">
|
||||
<h5>sel.path</h5>
|
||||
<p>Returns the path of the selected item..</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.path.name" class="my-5">
|
||||
<h5>sel.path.name</h5>
|
||||
<p>Returns the name without the extension of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.path.length" class="my-5">
|
||||
<h5>sel.path.length</h5>
|
||||
<p>Returns the number of characters in the path of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.path.title" class="my-5">
|
||||
<h5>sel.path.title</h5>
|
||||
<p>Returns the path title of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.path.quote" class="my-5">
|
||||
<h5>sel.path.quote</h5>
|
||||
<p>Returns the path of the selected item. with double quotation mark.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.short" class="my-5">
|
||||
<h5>sel.short</h5>
|
||||
<p>Returns the short path of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.short.length" class="my-5">
|
||||
<h5>sel.short.length</h5>
|
||||
<p>Returns the number of characters in the short path of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.raw" class="my-5">
|
||||
<h5>sel.raw</h5>
|
||||
<p>Returns the path of the selected item in raw format.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.raw.length" class="my-5">
|
||||
<h5>sel.raw.length</h5>
|
||||
<p>Returns the number of characters in the raw path of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.root" class="my-5">
|
||||
<h5>sel.root</h5>
|
||||
<p>Returns the root directory from the path of the selected items.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.name" class="my-5">
|
||||
<h5>sel.name</h5>
|
||||
<p>Returns the name and extension of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.name.length" class="my-5">
|
||||
<h5>sel.name.length</h5>
|
||||
<p>Returns the number of characters in the name of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.title" class="my-5">
|
||||
<h5>sel.title</h5>
|
||||
<p>Returns the name without extension of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.title.length" class="my-5">
|
||||
<h5>sel.title.length</h5>
|
||||
<p>Returns the number of characters in the name without extension of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.parent" class="my-5">
|
||||
<h5>sel.parent</h5>
|
||||
<p>Returns the directory path for the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.parent.quote" class="my-5">
|
||||
<h5>sel.parent.quote</h5>
|
||||
<p>Returns the directory path for the selected item with quotation mark.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.parent.raw" class="my-5">
|
||||
<h5>sel.parent.raw</h5>
|
||||
<p>Returns the directory path for the selected item in raw format.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.parent.name" class="my-5">
|
||||
<h5>sel.parent.name</h5>
|
||||
<p>Returns the name of the parent of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.parent.length" class="my-5">
|
||||
<h5>sel.parent.length</h5>
|
||||
<p>Returns the number of characters in the parent path of the selected item.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.count" class="my-5">
|
||||
<h5>sel.count</h5>
|
||||
<p>Returns count selected items.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.back" class="my-5">
|
||||
<h5>sel.back</h5>
|
||||
<p>Returns whether the selection is in the background.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.curdir" class="my-5">
|
||||
<h5>sel.curdir or sel.workdir</h5>
|
||||
<p>Returns the path of current working directory.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.file" class="my-5">
|
||||
<h5>sel.file</h5>
|
||||
<p>Returns the path for the selected item. If it is a file</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.file.name" class="my-5">
|
||||
<h5>sel.file.name</h5>
|
||||
<p>Returns the name for the selected item. If it is a file.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.file.name.length" class="my-5">
|
||||
<h5>sel.file.name.length</h5>
|
||||
<p>Returns the number of characters in the name of the selected item. If it is a file.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.file.ext" class="my-5">
|
||||
<h5>sel.file.ext</h5>
|
||||
<p>Returns the extension for the selected item. If it is a file.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.file.title" class="my-5">
|
||||
<h5>sel.file.title</h5>
|
||||
<p>Returns the name without an extension for the selected item. If it is a file.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.file.quote" class="my-5">
|
||||
<h5>sel.file.quote</h5>
|
||||
<p>Returns the path for the selected item with quotation mark. If it is a file.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.directory" class="my-5">
|
||||
<h5>sel.directory</h5>
|
||||
<p>Returns the path for the selected item. If it is a directory.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.directory.name" class="my-5">
|
||||
<h5>sel.directory.name</h5>
|
||||
<p>Returns the name for the selected item. If it is a directory.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.directory.length" class="my-5">
|
||||
<h5>sel.directory.length</h5>
|
||||
<p>Returns the number of characters in the path of the selected item. If it is a directory.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.directory.quote" class="my-5">
|
||||
<h5>sel.directory.quote</h5>
|
||||
<p>Returns the path for the selected item with quotation mark. If it is a directory.</p>
|
||||
</section>
|
||||
|
||||
<section id="sel.get" class="my-5">
|
||||
<h5>sel.get</h5>
|
||||
<p>Returns the path of the selected item by referring to the index number.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.get(index=<code>0</code>)</code>
|
||||
</section>
|
||||
|
||||
<section id="sel.path.raw" class="my-5">
|
||||
<h5>sel.path.raw</h5>
|
||||
<p>Returns the raw path of the selected item by referring to the index number.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.path.raw(index=<code>0</code>)</code>
|
||||
</section>
|
||||
|
||||
<section id="sel.length" class="my-5">
|
||||
<h5>sel.length</h5>
|
||||
<p>Returns the number of characters in the path of the selected item by referring to the index number.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.length(index=<code>0</code>)</code>
|
||||
</section>
|
||||
|
||||
<section id="sel.readonly" class="my-5">
|
||||
<h5>sel.readonly</h5>
|
||||
<p>Returns whether the selected item by referring to the index number is read-only.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.readonly(index=<code>0</code>)</code>
|
||||
</section>
|
||||
|
||||
<section id="sel.hidden" class="my-5">
|
||||
<h5>sel.hidden</h5>
|
||||
<p>Returns whether the selected item by referring to the index number is hidden.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.hidden(index=<code>0</code>)</code>
|
||||
</section>
|
||||
|
||||
<section id="sel.meta" class="my-5">
|
||||
<h5>sel.meta</h5>
|
||||
<p>Gets meta data by <a href="https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/properties/core-bumper.md">property key</a>.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.meta("System.Size"))</code>
|
||||
</section>
|
||||
<section id="sel.lnk" class="my-5">
|
||||
<h5>sel.lnk</h5>
|
||||
<p>Return the target file/dir path from the selected shortcut</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.lnk</code>
|
||||
</section>
|
||||
<section id="sel.lnk.type" class="my-5">
|
||||
<h5>sel.lnk.type</h5>
|
||||
<p>Return type the shortcut</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.lnk.type</code>
|
||||
</section>
|
||||
<section id="sel.lnk.dir" class="my-5">
|
||||
<h5>sel.lnk.dir</h5>
|
||||
<p>Return a dir path from the shortcut</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.lnk.dir</code>
|
||||
</section>
|
||||
<section id="sel.lnk.icon" class="my-5">
|
||||
<h5>sel.lnk.icon</h5>
|
||||
<p>Return a icon path and index from the shortcut</p>
|
||||
<p>Syntax</p>
|
||||
<code>sel.lnk.icon</code>
|
||||
</section>
|
||||
@@ -0,0 +1,214 @@
|
||||
<h5>STR</h5>
|
||||
<br>
|
||||
|
||||
<section id="str.get" class="my-5">
|
||||
<h5>str.get (str.at)</h5>
|
||||
<p>Returns a character from a specific location in the string.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.get("Hello World!", 7)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.set" class="my-5">
|
||||
<h5>str.set</h5>
|
||||
<p>Sets a character with a specific location in the string.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.set("Hello World!", 6, '-')</code>
|
||||
</section>
|
||||
|
||||
<section id="str.contains" class="my-5">
|
||||
<h5>str.contains</h5>
|
||||
<p>Returns a value indicating whether a specified substring occurs within this string.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.contains("Hello World!", 'World')</code>
|
||||
</section>
|
||||
|
||||
<section id="str.empty" class="my-5">
|
||||
<h5>str.empty (str.null)</h5>
|
||||
<p>Tests whether the string contains characters.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.empty("")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.start" class="my-5">
|
||||
<h5>str.start</h5>
|
||||
<p>Checks whether the string starts with the specified prefix.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.start("Hello World!", "World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.end" class="my-5">
|
||||
<h5>str.end</h5>
|
||||
<p>Checks whether the string ends with the specified suffix.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.end("Hello World!", "World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.equals" class="my-5">
|
||||
<h5>str.equals</h5>
|
||||
<p>Determines whether two String have the same value.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.equals("Hello World!", "Hello World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.not" class="my-5">
|
||||
<h5>str.not</h5>
|
||||
<p>Determine if two strings do not have the same value.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.not("Hello World!", "Hello-World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.length" class="my-5">
|
||||
<h5>str.length (str.len)</h5>
|
||||
<p>Gets the number of characters in the current string.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.length("Hello World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.trim" class="my-5">
|
||||
<h5>str.trim</h5>
|
||||
<p>Returns a new string in which all leading and trailing occurrences of a set of specified characters from the current string are removed.</p>
|
||||
<p>Syntax</p>
|
||||
<p>Removes all leading and trailing white-space characters from the current string.</p>
|
||||
<code>str.trim(" Hello World! ")</code><br><br>
|
||||
<p>Removes all leading and trailing 'H!' characters from the current string.</p>
|
||||
<code>str.trim("Hello World!", "H!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.trimstart" class="my-5">
|
||||
<h5>str.trimstart</h5>
|
||||
<p>Returns a new string in which all leading occurrences of a set of specified characters from the current string are removed.</p>
|
||||
<p>Syntax</p>
|
||||
<p>Removes all leading white-space characters from the current string.</p>
|
||||
<code>str.trimstart(" Hello World!")</code><br>
|
||||
|
||||
<p>Removes all leading 'H' characters from the current string.</p>
|
||||
<code>str.trimstart("Hello World!", "H")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.trimend" class="my-5">
|
||||
<h5>str.trimend</h5>
|
||||
<p>Returns a new string in which all trailing occurrences of a set of specified characters from the current string are removed.</p>
|
||||
<p>Syntax</p>
|
||||
<p>Removes all trailing white-space characters from the current string.</p>
|
||||
<code>str.trimend("Hello World! ")</code><br>
|
||||
|
||||
<p>Removes all trailing '!' characters from the current string.</p>
|
||||
<code>str.trimend("Hello World!", "!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.find" class="my-5">
|
||||
<h5>str.find</h5>
|
||||
<p>Searches a string in a forward direction for the first occurrence of a substring that matches a specified sequence of characters.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.find("Hello World!", "lo")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.findlast" class="my-5">
|
||||
<h5>str.findlast</h5>
|
||||
<p>Searches a string in a backward direction for the first occurrence of a substring that matches a specified sequence of characters.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.findlast("Hello World!", "Wor")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.lower" class="my-5">
|
||||
<h5>str.lower</h5>
|
||||
<p>Returns a copy of this string converted to lowercase.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.lower("Hello World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.upper" class="my-5">
|
||||
<h5>str.upper</h5>
|
||||
<p>Returns a copy of this string converted to uppercase.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.upper("Hello World!")</code>
|
||||
</section>
|
||||
|
||||
<section id="str.left" class="my-5">
|
||||
<h5>str.left</h5>
|
||||
<p>Extracts the left part of a string.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.left("Hello World!", 5)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.right" class="my-5">
|
||||
<h5>str.right</h5>
|
||||
<p>Extracts the right part of a string.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.right("Hello World!", 5)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.sub" class="my-5">
|
||||
<h5>str.sub</h5>
|
||||
<p>Copies a substring of at most some number of characters from a string beginning from a specified position.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.sub("Hello World!", 5)</code><br>
|
||||
<code>str.sub("Hello World!", 0, 5)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.remove" class="my-5">
|
||||
<h5>str.remove</h5>
|
||||
<p>Removes an element or a range of elements in a string from a specified position.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.replace("Hello World!", " ")</code><br>
|
||||
<code>str.remove("Hello World!", 5)</code><br>
|
||||
<code>str.remove("Hello World!", 5, 1)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.replace" class="my-5">
|
||||
<h5>str.replace</h5>
|
||||
<p>Replace elements in a string at a specified position with specific characters or characters copied from other ranges or strings.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.replace("Hello World!", "World", "User")</code><br>
|
||||
<code>str.replace("Hello World!", "world", "user", true)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.padleft" class="my-5">
|
||||
<h5>str.padleft</h5>
|
||||
<p>Returns a new string of a specified length in which the beginning of the current string is padded with spaces or with a specified character.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.padleft("Hello World!", "*")</code><br>
|
||||
<code>str.padleft("Hello World!", "*", 3)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.padright" class="my-5">
|
||||
<h5>str.padright</h5>
|
||||
<p>Returns a new string of a specified length in which the end of the current string is padded with spaces or with a specified character.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.padright("Hello World!", "*")</code><br>
|
||||
<code>str.padright("Hello World!", "*", 3)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.padding" class="my-5">
|
||||
<h5>str.padding</h5>
|
||||
<p>Returns a new string of a specified length in which the start and end of the current string is padded with spaces or with a specified character.</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.padding("Hello World!", "*")</code><br>
|
||||
<code>str.padding("Hello World!", "*", 3)</code>
|
||||
</section>
|
||||
|
||||
<section id="str.guid" class="my-5">
|
||||
<h5>str.guid</h5>
|
||||
<p>Returns a new guid string</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.guid</code> return 00000000000000000000000000000000 <br>
|
||||
<code>str.guid(1)</code> return 00000000-0000-0000-0000-000000000000 <br>
|
||||
<code>str.guid(2)</code> return {00000000-0000-0000-0000-000000000000} <br>
|
||||
<code>str.guid(3)</code> return (00000000-0000-0000-0000-000000000000) <br>
|
||||
</section>
|
||||
|
||||
<section id="str.capitalize" class="my-5">
|
||||
<h5>str.capitalize</h5>
|
||||
<p>Returns a new capitalize string</p>
|
||||
<p>Syntax</p>
|
||||
<code>str.capitalize('hello world')</code> return "Hello World" <br>
|
||||
</section>
|
||||
|
||||
<section id="str.res" class="my-5">
|
||||
<h5>str.res</h5>
|
||||
<p>Returns a string resource from the executable file. <em>"shell32.dll" is the default file.</em></p>
|
||||
<p>Syntax</p>
|
||||
<code>str.res(-4640)</code> return "Runs the selected command with elevation" from "shell32.dll"<br>
|
||||
<code>str.res('explorer.dll', -22000)</code> return "Desktop" <br>
|
||||
</section>
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
<h5>SYS (SYSTEM)</h5>
|
||||
|
||||
<section id="sys.name" class="my-5">
|
||||
<h5>sys.name</h5>
|
||||
<p>Returns Windows name.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.name</code>
|
||||
</section>
|
||||
|
||||
<section id="sys.type" class="my-5">
|
||||
<h5>sys.type</h5>
|
||||
<p>Returns system architecture.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.type == 64</code><br>
|
||||
<code>sys.type == 32</code>
|
||||
</section>
|
||||
|
||||
<section id="sys.is64" class="my-5">
|
||||
<h5>sys.is64</h5>
|
||||
<p>Returns if system architecture is x64.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.is64</code>
|
||||
</section>
|
||||
|
||||
<section id="sys.dark" class="my-5">
|
||||
<h5>sys.dark</h5>
|
||||
<p>Check if dark mode is enabled.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.dark</code>
|
||||
</section>
|
||||
|
||||
<section id="sys.var" class="my-5">
|
||||
<h5>sys.var</h5>
|
||||
<p>Retrieves the value of an environment variable.</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.var('WINDIR')</code>
|
||||
</section>
|
||||
|
||||
<section id="sys.version" class="my-5">
|
||||
<h5>sys.version (sys.ver)</h5>
|
||||
<p>Windows version.</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>sys.version
|
||||
sys.version.build
|
||||
sys.version.major
|
||||
sys.version.minor
|
||||
sys.version.name
|
||||
sys.version.type</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="sys.datetime" class="my-5">
|
||||
<h5>sys.datetime (system.datetime)</h5>
|
||||
<p>Date and time format</p>
|
||||
<p>Syntax</p>
|
||||
<pre><code>sys.datetime // the date and time in a short format (Format: YYYY.MM.DD-HH.MM.SS).
|
||||
sys.datetime.short // the date and time in a short format (Format: YYYY.MM.DD-HH.MM.SS).
|
||||
sys.datetime.dayofweek (sys.datetime.dw) // the day of the week as a number (Sunday as 1)
|
||||
|
||||
sys.datetime.date // the full date in a long format (Format: YYYY.MM.DD).
|
||||
sys.datetime.yy // the year part of the current date as a two-digit number.
|
||||
sys.datetime.year (sys.datetime.y) // the year part of the current date as a four-digit number.
|
||||
sys.datetime.month (sys.datetime.m) // the month part of the current date.
|
||||
sys.datetime.day (sys.datetime.d) // the day part of the current date.
|
||||
|
||||
sys.datetime.time // the full time in hours, minutes, and seconds (Format: HH.MM.SS).
|
||||
sys.datetime.pm // "AM" or "PM" based on the current time.
|
||||
sys.datetime.hour (sys.datetime.h) // the hour part of the current time (24-hour format).
|
||||
sys.datetime.minute (sys.datetime.min) // the minutes part of the current time.
|
||||
sys.datetime.second (sys.datetime.s) // the seconds part of the current time.
|
||||
sys.datetime.milliseconds (sys.datetime.ms) // the milliseconds part of the current time as a three-digit number.
|
||||
|
||||
sys.datetime("D") // the full date in a short format (Format: DD/MM/YYYY).
|
||||
sys.datetime("Y") // the year part of the current date as a four-digit number.
|
||||
sys.datetime("y") // the year part of the current date as a two-digit number.
|
||||
sys.datetime("m") // the month part of the current date as a two-digit number.
|
||||
sys.datetime("d") // the day part of the current date as a two-digit number.
|
||||
sys.datetime("P") (sys.datetime("p")) // "AM" or "PM" based on the current time.
|
||||
sys.datetime("h") // the hour part of the current time as a two-digit number (12-hour format).
|
||||
sys.datetime("H") // the hour part of the current time as a two-digit number (24-hour format).
|
||||
sys.datetime("M") // the minute part of the current time as a two-digit number.
|
||||
sys.datetime("S") // the second part of the current time as a two-digit number.
|
||||
sys.datetime("s") // the milliseconds part of the current time as a three-digit number.
|
||||
|
||||
datetime("y/m/d") // the date in a short format (Format: YYYY/MM/DD).
|
||||
datetime("h:M P") // the time in a short format (Format: HH:MM AM/PM).
|
||||
datetime("H.M.S.s") // the time in a long format (Format: HH.MM.SS.MS).</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="sys.paths" class="my-5">
|
||||
<h5>Windows paths</h5>
|
||||
<pre><code>sys // %WINDIR%
|
||||
|
||||
sys.root // %SYSTEMDRIVE%
|
||||
|
||||
sys.programdata // %PROGRAMDATA%
|
||||
sys.prog // %PROGRAMFILES%
|
||||
sys.prog32 // %PROGRAMFILES(x86)%
|
||||
sys.templates
|
||||
|
||||
sys.users
|
||||
sys.appdata // %APPDATA%
|
||||
sys.temp // %TEMP%
|
||||
|
||||
sys.directory (sys.dir) // %WINDIR%
|
||||
sys.path // %WINDIR%
|
||||
sys.bin // %WINDIR%\system32
|
||||
sys.bin32
|
||||
sys.bin64
|
||||
sys.wow</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="sys.is_primary_monitor" class="my-5">
|
||||
<h5>sys.is_primary_monitor</h5>
|
||||
<p>Returns true if the current monitor is the primary</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.is_primary_monitor</code><br>
|
||||
</section>
|
||||
|
||||
<section id="sys.langid" class="my-5">
|
||||
<h5>sys.langid</h5>
|
||||
<p>Returns the language ID</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.langid</code><br>
|
||||
</section>
|
||||
|
||||
<section id="sys.extended" class="my-5">
|
||||
<h5>sys.extended</h5>
|
||||
<p>Returns whether the Shift key is currently pressed</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.extended</code><br>
|
||||
</section>
|
||||
|
||||
<section id="sys.is11" class="my-5">
|
||||
<h5>sys.is11</h5>
|
||||
<p>Returns whether the Windows version is 11</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.is11</code><br>
|
||||
</section>
|
||||
|
||||
<section id="sys.is10" class="my-5">
|
||||
<h5>sys.is10</h5>
|
||||
<p>Returns whether the Windows version is 10</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.is10</code><br>
|
||||
</section>
|
||||
|
||||
<section id="sys.is81" class="my-5">
|
||||
<h5>sys.is81</h5>
|
||||
<p>Returns whether the Windows version is 8.1</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.is81</code><br>
|
||||
</section>
|
||||
|
||||
<section id="sys.is8" class="my-5">
|
||||
<h5>sys.is8</h5>
|
||||
<p>Returns whether the Windows version is 8</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.is8</code><br>
|
||||
</section>
|
||||
|
||||
<section id="sys.is7" class="my-5">
|
||||
<h5>sys.is7</h5>
|
||||
<p>Returns whether the Windows version is 7</p>
|
||||
<p>Syntax</p>
|
||||
<code>sys.is7</code><br>
|
||||
</section>
|
||||
@@ -0,0 +1,18 @@
|
||||
<h5>THIS</h5>
|
||||
<br>
|
||||
<p>This namespace contains functions that are used with the current item in the context menu.</p>
|
||||
<br>
|
||||
<section id="syntax" class="my-5">
|
||||
<h5>Syntax</h5>
|
||||
<pre><code>
|
||||
this.type // Returns the type of the current item [item = 0, menu = 1, separator = 2]
|
||||
this.checked // Returns true if the current item is checked
|
||||
this.pos // Returns the position of the current item in the context menu
|
||||
this.disabled // Returns true if the current item is disabled
|
||||
this.sys // Returns true if the current item is a system item
|
||||
this.title // Returns the title of the current item
|
||||
this.id // Returns the ID of the current item
|
||||
this.count // Returns the number of items in the context menu
|
||||
this.length // Returns the length of the current item's title
|
||||
</code></pre>
|
||||
</section>
|
||||
@@ -0,0 +1,36 @@
|
||||
<h5>USER</h5>
|
||||
<br>
|
||||
<section id="user.name" class="my-5">
|
||||
<h5>user.name</h5>
|
||||
<p>Returns the current username.</p>
|
||||
<p>Syntax</p>
|
||||
<code>user.name</code>
|
||||
</section>
|
||||
|
||||
<section id="user-functions" class="my-5">
|
||||
<h5>Functions to return the path of user directories</h5>
|
||||
<p>Syntax</p>
|
||||
<pre><code>user.home
|
||||
user.appdata
|
||||
user.contacts
|
||||
user.desktop
|
||||
user.directory (user.dir)
|
||||
user.documents
|
||||
user.documentslibrary
|
||||
user.downloads
|
||||
user.favorites
|
||||
user.libraries
|
||||
user.localappdata
|
||||
user.music
|
||||
user.personal
|
||||
user.pictures
|
||||
user.profile
|
||||
user.quicklaunch
|
||||
user.sendto
|
||||
user.startmenu
|
||||
user.temp
|
||||
user.templates
|
||||
user.videos</code>
|
||||
</pre>
|
||||
</section>
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<h5>WINDOW, WND</h5>
|
||||
<br>
|
||||
<p></p>
|
||||
<br>
|
||||
<section id="syntax" class="my-5">
|
||||
<h5>Syntax</h5>
|
||||
<pre><code>
|
||||
window.is_taskbar // Returns true if the window handle is for the Taskbar window
|
||||
window.is_desktop // Returns true if the window handle is for the Desktop window
|
||||
window.is_explorer // Returns true if the window handle is for the Explorer window
|
||||
window.is_tree // Returns true if the window handle is for the Side window
|
||||
window.is_edit // Returns true if the window handle is for the Edit menu
|
||||
window.is_start // Returns true if the window handle is for the Win+X menu
|
||||
|
||||
window.send(name, msg, wparam, lparam) // Search for the window by name and send the specified message
|
||||
window.post(name, msg, wparam, lparam) // Search for the window by name and send the specified message without waiting
|
||||
|
||||
window.send(null, msg, wparam, lparam) // Send the specified message to current window.
|
||||
window.post(null, msg, wparam, lparam) // Send the specified message without waiting to current window.
|
||||
|
||||
window.command(command) // Send WM_COMMAND to current window.
|
||||
window.command(command, name) // Search for the window by name and send the command to it.
|
||||
|
||||
window.handle
|
||||
window.name
|
||||
window.title
|
||||
window.owner
|
||||
window.parent
|
||||
window.parent.handle
|
||||
window.parent.name
|
||||
window.is_contextmenuhandler
|
||||
|
||||
</code></pre>
|
||||
</section>
|
||||
@@ -0,0 +1,33 @@
|
||||
<h4>Get Started</h4>
|
||||
<br>
|
||||
<p>
|
||||
This tutorial will teach you the basics of <b>Shell</b>.<br>
|
||||
It is not necessary to have any prior experience.
|
||||
</p>
|
||||
<p>
|
||||
To start using <b>Shell</b>, you need:<br>
|
||||
A text editor, like Notepad, to write <b>Shell</b> code.
|
||||
</p>
|
||||
<h5>Quickstart</h5>
|
||||
<p>Let's create our first menu item.</p>
|
||||
<p>Open the configuration file "shell.nss" and Write the following code and save.</p>
|
||||
<div class="notification is-info mt-5" role="alert">
|
||||
<i>Tip:</i> You find the configuration file <code>shell.nss</code> in the <i>Shell</i> program folder. To find the
|
||||
<i>Shell</i> program folder, use <kbd>shift</kbd>+<kbd>right-click</kbd> on the Taskbar. The <i>Shell</i> menu
|
||||
will appear at the top of the context menu. In its submenu, you can click on <code>directory</code> to open the folder
|
||||
where the <i>Shell</i> configuration files are saved.
|
||||
</div>
|
||||
<br/>
|
||||
<pre><code class="lang-shell">item(title='Hello, World!' cmd=msg('Hello @user.name'))
|
||||
</code></pre>
|
||||
<p>Don't worry if you don't understand the code above - we will discuss it in detail in later chapters.</p>
|
||||
<div class="notification is-info mt-5" role="alert">
|
||||
<i>Tip:</i> After editing any nss file, you'll need to update changes: hold <kbd>ctrl</kbd>+<kbd>right-click</kbd>
|
||||
on the desktop area or Taskbar to force <i>Shell</i> to reload the nss files. Alternatively, or you can restart
|
||||
<i>Windows Explorer</i>.
|
||||
</div>
|
||||
<p>The result will look something for this when you press the <kbd>right-click</kbd> in an empty place on the desktop:</p>
|
||||
<div class="has-text-centered my-5">
|
||||
<img class="preview" src="/docs/images/helloworld.png" title="">
|
||||
</div>
|
||||
<p><b>Congratulations</b> You have now added the first time a menu item to the context menu</p>
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 54 KiB |
@@ -0,0 +1,26 @@
|
||||
<h4>Introduction</h4>
|
||||
<br>
|
||||
<h5>What is Shell?</h5>
|
||||
<p>
|
||||
<b>Shell</b> is an extension of Windows File Explorer that can be used to create high-performance context menu items.
|
||||
And gives user a high level of control over context menu of Windows File Explorer.
|
||||
</p>
|
||||
<p>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.</p>
|
||||
<p><b>Shell</b> 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).</p>
|
||||
<div class="has-text-centered my-6">
|
||||
<img class="preview" src="/docs/images/dark/goto.png">
|
||||
</div>
|
||||
<h5>Why Use Shell</h5>
|
||||
<ul>
|
||||
<li>Is portable, fun and easy to learn!</li>
|
||||
<li>Configuration in plain text.</li>
|
||||
<li>Quick loading.</li>
|
||||
<li>Minimal resource usage.</li>
|
||||
<li>No limitations.</li>
|
||||
<li>Embedded expressions syntax.</li>
|
||||
<li>Built-in functions and predefined variables.</li>
|
||||
<li>Multiple sources of images (embedded icons, image files, svg, glyphs, and colors).</li>
|
||||
<li>Dynamic search and filter.</li>
|
||||
<li>Support Taskbar context menu.</li>
|
||||
<li>Full management of the context menu.</li>
|
||||
</ul>
|
||||
@@ -0,0 +1,218 @@
|
||||
<h4>Installation</h4>
|
||||
<br>
|
||||
<div class="notification is-warning mt-5" role="alert">
|
||||
<i>Info:</i> Administrative permissions are required for installation.
|
||||
</div>
|
||||
<br>
|
||||
<p>Shell can be installed in the following ways:</p>
|
||||
<ul>
|
||||
<li><a href="#installer">Installer</a></li>
|
||||
<li><a href="#portable">Portable</a></li>
|
||||
<li><a href="#winget">Windows Package Manager</a></li>
|
||||
<li><a href="#scoop">Scoop</a></li>
|
||||
<li><a href="#chocolatey">Chocolatey</a></li>
|
||||
</ul><br>
|
||||
<p>Please also note the following reference sections:</p>
|
||||
<ul>
|
||||
<li><a href="#cli">Command-Line Help</a></li>
|
||||
<li><a href="#keys">Keys to enable/disable Shell functionalities</a></li>
|
||||
</ul>
|
||||
<br>
|
||||
<div id="installer">
|
||||
<h5>Installer version</h5>
|
||||
<div id="installer-install">
|
||||
<h5>Install</h5>
|
||||
<p><a href="/download">Download</a> the installation file (Installer/Portable),
|
||||
run <code>setup.exe</code>, follow the installation steps, and agree to restart Windows File Explorer.</p>
|
||||
<p>The program will be installed to <code>C:\Program Files\Nilesoft Shell\</code>, unless you have chosen
|
||||
a different installation path during the installation steps.</p>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="installer-uninstall">
|
||||
<h5>Uninstall</h5>
|
||||
<p>Inside the Shell program folder (<code>C:\Program Files\Nilesoft Shell\</code> by default), run the <code>unst000.exe</code>
|
||||
or <code>unstall.exe</code> file, then follow the steps, and then agree to restart Windows File Explorer.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div id="portable">
|
||||
<h5>Portable version</h5>
|
||||
<div id="portable-install">
|
||||
<h5>Install</h5>
|
||||
<p><a href="/download">Download</a> the
|
||||
installation file (Installer/Portable),
|
||||
run <code>setup.exe</code>,
|
||||
click Next, chose the folder you want the program to be extracted
|
||||
to, <strong>Check the option Portable Mode</strong>, and click
|
||||
Extract.</p>
|
||||
<p>Open an <strong>elevated command prompt</strong> (or use <a href="https://github.com/gerardog/gsudo">gsudo</a>), change to the directory you have extracted the program to, and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">Administrator: Command Prompt</div>
|
||||
<div class="console-body">shell -register -restart</div>
|
||||
</div>
|
||||
<p>For further details, see the chapter <a href="#cli">Command-Line Help</a> below.</p>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="portable-uninstall">
|
||||
<h5>Uninstall</h5>
|
||||
<p>Open an <strong>elevated command prompt</strong> (or use <a href="https://github.com/gerardog/gsudo">gsudo</a>), change to the directory you have extracted the program to, and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">Administrator: Command Prompt</div>
|
||||
<div class="console-body">shell -unregister -restart</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="notification is-info mt-5">
|
||||
<i>Tip:</i> Close all instances of Windows File Explorer before uninstalling to avoid needing a reboot after
|
||||
it (Shell) has been uninstalled.
|
||||
</div>
|
||||
<br>
|
||||
<p>For further details see the chapter <a href="#cli">Command-Line Help</a> below.</p>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div id="winget">
|
||||
<h5>Windows Package Manager</h5>
|
||||
<p>Windows Package Manager is available from Windows 10 version 1809.</p>
|
||||
<div id="winget-install">
|
||||
<h5>Install</h5>
|
||||
<p>Open a command prompt, and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">COMMAND PROMPT</div>
|
||||
<div class="console-body">winget install Nilesoft.Shell</div>
|
||||
</div>
|
||||
<p>The program will be installed to <code>C:\Program Files\Nilesoft Shell\</code>.</p>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="winget-uninstall">
|
||||
<h5>Uninstall</h5>
|
||||
<p>Open a command prompt, and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">COMMAND PROMPT</div>
|
||||
<div class="console-body">winget uninstall Nilesoft.Shell</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div id="scoop">
|
||||
<h5>Scoop</h5>
|
||||
<p>Scoop can be installed following the instructions at <a href="https://scoop.sh/">scoop.sh</a>.</p>
|
||||
<div id="scoop-install">
|
||||
<h5>Install</h5>
|
||||
<p>Open a command prompt, and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">COMMAND PROMPT</div>
|
||||
<div class="console-body">scoop install nilesoft-shell</div>
|
||||
</div>
|
||||
<p>The program will be installed to <code>%USERPROFILE%\scoop\apps\nilesoft-shell\current\</code>.</p>
|
||||
<div class="notification is-info mt-5">
|
||||
<i>Tip:</i> If you get the error <code>Couldn't find manifest for 'nilesoft-shell'</code>, please run first
|
||||
<div class="console">
|
||||
<div class="console-title">COMMAND PROMPT</div>
|
||||
<div class="console-body">scoop bucket add extras</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Open an <strong>elevated command prompt</strong> (or use <a href="https://github.com/gerardog/gsudo">gsudo</a>), and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">Administrator: Command Prompt</div>
|
||||
<div class="console-body">shell -register -restart</div>
|
||||
</div>
|
||||
<p>For further details see the chapter <a href="#cli">Command-Line Help</a> below.</p>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="scoop-uninstall">
|
||||
<h5>Uninstall</h5>
|
||||
<p>Open an <strong>elevated command prompt</strong> (or use <a href="https://github.com/gerardog/gsudo">gsudo</a>), and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">Administrator: Command Prompt</div>
|
||||
<div class="console-body">shell -unregister -restart</div>
|
||||
</div>
|
||||
<p>Then run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">Administrator: Command Prompt</div>
|
||||
<div class="console-body">scoop uninstall nilesoft-shell</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<div id="chocolatey">
|
||||
<h5>Chocolatey</h5>
|
||||
<p>Chocolatey can be installed following the instructions at <a href="https://chocolatey.org/install#individual">chocolatey.org</a>.</p>
|
||||
<div id="chocolatey-install">
|
||||
<h5>Install</h5>
|
||||
<div class="notification is-info mt-5">
|
||||
<i>Notice:</i> Until the package has been moderated, you need to add the specific version string to the
|
||||
installer, adding e.g.<br/>
|
||||
<div class="console">
|
||||
<div class="console-title">COMMAND PROMPT</div>
|
||||
<div class="console-body">
|
||||
choco install nilesoft.shell --version=1.8.1
|
||||
</div>
|
||||
</div>
|
||||
Please find the latest published version at <a href="https://community.chocolatey.org/packages/nilesoft.shell#versionhistory">
|
||||
Chocolatey's Version History</a> and use the latest version number (replacing <code>1.8.1</code>).
|
||||
</div>
|
||||
<br>
|
||||
<p>Open an <strong>elevated command prompt</strong> (or use <a href="https://github.com/gerardog/gsudo">gsudo</a>), and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">COMMAND PROMPT</div>
|
||||
<div class="console-body">
|
||||
choco install nilesoft.shell
|
||||
</div>
|
||||
</div>
|
||||
<p>The program will be installed to <code>C:\Program Files\Nilesoft Shell\</code>.</p>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="chocolatey-uninstall">
|
||||
<h5>Uninstall</h5>
|
||||
<p>Open an <strong>elevated command prompt</strong> (or use <a href="https://github.com/gerardog/gsudo">gsudo</a>), and run</p>
|
||||
<div class="console">
|
||||
<div class="console-title">COMMAND PROMPT</div>
|
||||
<div class="console-body">choco uninstall nilesoft.shell</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
|
||||
<div id="cli">
|
||||
<h5 id="cli-help">Command-Line Help</h5><br>
|
||||
<code>shell -[options]</code>
|
||||
<br><br>
|
||||
<h5 id="cli-options">Options</h5>
|
||||
<table class="table table-sm">
|
||||
<tr>
|
||||
<td class="syntax-keyword w-25">-register (-r)</td>
|
||||
<td>Registering.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">-unregister (-u)</td>
|
||||
<td>Unregistering.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">-restart (-re)</td>
|
||||
<td>Restart Windows Explorer.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">-treat</td>
|
||||
<td>Disable Windows 11 context menu.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">-silent (-s)</td>
|
||||
<td>Prevents displaying messages.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="syntax-keyword">-?</td>
|
||||
<td>Display this help message.</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="keys">
|
||||
<h5>Use the following keys to enable/disable</h5>
|
||||
<p>These keys are used when you press <kbd>right-click</kbd> or press <kbd>Shift</kbd>+<kbd>F10</kbd> keys</p>
|
||||
<kbd>CTRL</kbd> To enable and reload the configuration file <code>shell.nss</code><br/>
|
||||
<kbd>WIN</kbd> To make priority to the modern context menu for Windows 11<br>
|
||||
<kbd>CTRL</kbd>+<kbd>WIN</kbd> To disable Shell and Enable Classic Context Menu<br>
|
||||
<kbd>RIGHT-CLICK</kbd>+<kbd>LEFT-CLICK</kbd> To reload the configuration file <code>shell.nss</code><br/>
|
||||
</div>
|
||||
@@ -0,0 +1,59 @@
|
||||
[
|
||||
{"title":"Introduction", "link":"/docs"},
|
||||
{"title":"Installation", "link":"/docs/installation"},
|
||||
{"title":"Get Started", "link":"/docs/get-started"},
|
||||
{
|
||||
"title":"Configuration", "link":"/docs/configuration",
|
||||
"items": [
|
||||
{"title":"Settings", "link":"/docs/configuration/settings"},
|
||||
{"title":"Themes", "link":"/docs/configuration/themes"},
|
||||
{"title":"Modify items", "link":"/docs/configuration/modify-items"},
|
||||
{"title":"New items", "link":"/docs/configuration/new-items"},
|
||||
{"title":"Properties", "link":"/docs/configuration/properties" }
|
||||
]
|
||||
},{
|
||||
"title":"Expressions", "link":"/docs/expressions",
|
||||
"items": [
|
||||
{"title":"Comments", "link":"/docs/expressions/comments"},
|
||||
{"title":"Variables", "link":"/docs/expressions/variables"},
|
||||
{"title":"String literal", "link":"/docs/expressions/string"},
|
||||
{"title":"Numeric literal", "link":"/docs/expressions/numeric"},
|
||||
{"title":"Color literal", "link":"/docs/expressions/color"},
|
||||
{"title":"Operators", "link":"/docs/expressions/operators"},
|
||||
{"title":"Identifier", "link":"/docs/expressions/identifier"}
|
||||
]
|
||||
},{
|
||||
"title":"Functions", "link":"/docs/functions",
|
||||
"items": [
|
||||
{"title":"app", "link":"/docs/functions/app"},
|
||||
{"title":"appx", "link":"/docs/functions/appx"},
|
||||
{"title":"color", "link":"/docs/functions/color"},
|
||||
{"title":"command", "link":"/docs/functions/command"},
|
||||
{"title":"id", "link":"/docs/functions/id"},
|
||||
{"title":"image", "link":"/docs/functions/image"},
|
||||
{"title":"io", "link":"/docs/functions/io"},
|
||||
{"title":"key", "link":"/docs/functions/key"},
|
||||
{"title":"msg", "link":"/docs/functions/msg"},
|
||||
{"title":"path", "link":"/docs/functions/path"},
|
||||
{"title":"process", "link":"/docs/functions/process"},
|
||||
{"title":"reg", "link":"/docs/functions/reg"},
|
||||
{"title":"sel", "link":"/docs/functions/sel"},
|
||||
{"title":"str", "link":"/docs/functions/str"},
|
||||
{"title":"sys", "link":"/docs/functions/sys"},
|
||||
{"title":"this", "link":"/docs/functions/this"},
|
||||
{"title":"user", "link":"/docs/functions/user"},
|
||||
{"title":"window", "link":"/docs/functions/window"},
|
||||
{"title":"clipboard", "link":"/docs/functions/clipboard"},
|
||||
{"title":"input", "link":"/docs/functions/input"},
|
||||
{"title":"ini", "link":"/docs/functions/ini"},
|
||||
{"title":"regex", "link":"/docs/functions/regex"}
|
||||
]
|
||||
},{
|
||||
"title":"Examples", "link":"/docs/examples",
|
||||
"items": [
|
||||
{"title":"Copy path", "link":"/docs/examples/copy-path"},
|
||||
{"title":"Favorites", "link":"/docs/examples/favorites"},
|
||||
{"title":"Go to", "link":"/docs/examples/goto"}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 898 B |
|
After Width: | Height: | Size: 7.2 KiB |
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>nilesoft-shell</id>
|
||||
<version>1.9</version>
|
||||
<title>Nilesoft Shell</title>
|
||||
<authors>Mahmoud Gomaa</authors>
|
||||
<owners>Mahmoud Gomaa</owners>
|
||||
<projectUrl>https://nilesoft.org</projectUrl>
|
||||
<iconUrl>https://cdn.jsdelivr.net/gh/moudey/Shell@main/packages/assets/logo-256.png</iconUrl>
|
||||
<copyright>2023 Nilesoft Ltd.</copyright>
|
||||
<licenseUrl>https://raw.githubusercontent.com/moudey/Shell/main/LICENSE</licenseUrl>
|
||||
<packageSourceUrl>https://github.com/moudey/Shell/tree/main/packages/choco</packageSourceUrl>
|
||||
<docsUrl>https://nilesoft.org/docs</docsUrl>
|
||||
<tags>context-menu right-click file-explorer shell-extension</tags>
|
||||
<summary>Powerful context menu manager for Windows File Explorer.</summary>
|
||||
<description>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.</description>
|
||||
<releaseNotes>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.</releaseNotes>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="tools\**" target="tools" />
|
||||
</files>
|
||||
</package>
|
||||
@@ -0,0 +1,13 @@
|
||||
$ErrorActionPreference = 'Stop' # stop on all errors
|
||||
$url = 'https://nilesoft.org/download/shell/1.9/setup.exe'
|
||||
$packageArgs = @{
|
||||
packageName = $env:ChocolateyPackageName
|
||||
fileType = 'exe'
|
||||
url = $url
|
||||
softwareName = 'Nilesoft Shell'
|
||||
checksum = '4df2b30fc6b9d6d7c95c7e5070fbeb305c7d1b30ef3c135bb9e2838c10114fb6'
|
||||
checksumType = 'sha256'
|
||||
silentArgs = '/VERYSILENT /NORESTART' # Inno Setup
|
||||
validExitCodes= @(0)
|
||||
}
|
||||
Install-ChocolateyPackage @packageArgs
|
||||
@@ -0,0 +1,24 @@
|
||||
$ErrorActionPreference = 'Stop' # stop on all errors
|
||||
$packageArgs = @{
|
||||
packageName = $env:ChocolateyPackageName
|
||||
softwareName = 'Nilesoft Shell'
|
||||
fileType = 'exe'
|
||||
silentArgs = '/VERYSILENT /NORESTART' # Inno Setup
|
||||
validExitCodes= @(0)
|
||||
}
|
||||
|
||||
[array]$key = Get-UninstallRegistryKey -SoftwareName $packageArgs['softwareName']
|
||||
|
||||
if ($key.Count -eq 1) {
|
||||
$key | % {
|
||||
$packageArgs['file'] = "$($_.UninstallString)"
|
||||
Uninstall-ChocolateyPackage @packageArgs
|
||||
}
|
||||
} elseif ($key.Count -eq 0) {
|
||||
Write-Warning "$packageName has already been uninstalled by other means."
|
||||
} elseif ($key.Count -gt 1) {
|
||||
Write-Warning "$($key.Count) matches found!"
|
||||
Write-Warning "To prevent accidental data loss, no programs will be uninstalled."
|
||||
Write-Warning "Please alert package maintainer the following keys were matched:"
|
||||
$key | % {Write-Warning "- $($_.DisplayName)"}
|
||||
}
|
||||
|
After Width: | Height: | Size: 292 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 30 KiB |
@@ -0,0 +1,30 @@
|
||||
##############################################################################
|
||||
##
|
||||
## Makefile for Detours.
|
||||
##
|
||||
## Microsoft Research Detours Package
|
||||
##
|
||||
## Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
##
|
||||
|
||||
ROOT = .
|
||||
!include "$(ROOT)\system.mak"
|
||||
|
||||
all:
|
||||
cd "$(MAKEDIR)\src"
|
||||
@$(MAKE) /NOLOGO /$(MAKEFLAGS)
|
||||
|
||||
clean:
|
||||
cd "$(MAKEDIR)\src"
|
||||
@$(MAKE) /NOLOGO /$(MAKEFLAGS) clean
|
||||
|
||||
realclean: clean
|
||||
cd "$(MAKEDIR)\src"
|
||||
@$(MAKE) /NOLOGO /$(MAKEFLAGS) realclean
|
||||
|
||||
-rmdir /q /s $(BINDS) 2> nul
|
||||
-rmdir /q /s dist 2> nul
|
||||
|
||||
-del /q /f /s *~ 2>nul
|
||||
|
||||
################################################################# End of File.
|
||||
@@ -0,0 +1,74 @@
|
||||
##############################################################################
|
||||
##
|
||||
## Makefile for Detours.
|
||||
##
|
||||
## Microsoft Research Detours Package, Version 4.0.1
|
||||
##
|
||||
## Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
##
|
||||
|
||||
#DETOURS_DEBUG="debug"
|
||||
|
||||
DETOURS_NAME=detours-$(DETOURS_TARGET_PROCESSOR)$(DETOURS_CONFIG)
|
||||
ROOT = ..
|
||||
!include "$(ROOT)\system.mak"
|
||||
|
||||
#######################/#######################################################
|
||||
##
|
||||
CFLAGS=/nologo /W4 /WX /we4777 /we4800 /Zi /MT /Gy /Gm- /Zl /Od /DDETOUR_DEBUG=$(DETOURS_DEBUG)
|
||||
|
||||
CFLAGS=$(CFLAGS) /DWIN32_LEAN_AND_MEAN /D_WIN32_WINNT=0x0601 $(DETOURS_DEFINITION)
|
||||
|
||||
!if defined(DETOURS_ANALYZE)
|
||||
CFLAGS=$(CFLAGS) /analyze
|
||||
!endif
|
||||
|
||||
OBJS = \
|
||||
$(OBJD)\detours.obj \
|
||||
$(OBJD)\disasm.obj \
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
.SUFFIXES: .cpp .h .obj
|
||||
|
||||
!ifdef DETOURS_ANALYZE
|
||||
.cpp{$(OBJD)}.obj:
|
||||
$(CC) $(CFLAGS) /Fd$(BIND)\$(DETOURS_NAME).pdb /Fo$(OBJD)\ /c $<
|
||||
!else
|
||||
.cpp{$(OBJD)}.obj::
|
||||
$(CC) $(CFLAGS) /Fd$(BIND)\$(DETOURS_NAME).pdb /Fo$(OBJD)\ /c $<
|
||||
!endif
|
||||
|
||||
##############################################################################
|
||||
|
||||
all: dirs \
|
||||
$(BIND)\$(DETOURS_NAME).lib \
|
||||
$(BIND)\detours.h \
|
||||
|
||||
##############################################################################
|
||||
|
||||
clean:
|
||||
-del *~ 2>nul
|
||||
-del $(BIND)\$(DETOURS_NAME).pdb $(BIND)\$(DETOURS_NAME).pdb 2>nul
|
||||
-rmdir /q /s $(OBJD) 2>nul
|
||||
|
||||
realclean: clean
|
||||
-rmdir /q /s $(OBJDS) 2>nul
|
||||
|
||||
##############################################################################
|
||||
|
||||
dirs:
|
||||
@if not exist "$(BIND)" mkdir "$(BIND)" && echo. Created $(BIND)
|
||||
@if not exist "$(OBJD)" mkdir "$(OBJD)" && echo. Created $(OBJD)
|
||||
|
||||
$(BIND)\$(DETOURS_NAME).lib : $(OBJS)
|
||||
link /lib /MACHINE:$(DETOURS_TARGET_PROCESSOR) /out:$@ /nologo $(OBJS)
|
||||
|
||||
$(BIND)\detours.h : detours.h
|
||||
copy detours.h $@
|
||||
|
||||
$(OBJD)\detours.obj : detours.cpp detours.h
|
||||
$(OBJD)\disasm.obj : disasm.cpp detours.h
|
||||
|
||||
|
||||
################################################################# End of File.
|
||||
@@ -0,0 +1,736 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Core Detours Functionality (detours.h of detours.lib)
|
||||
//
|
||||
// Microsoft Research Detours Package, Version 4.0.1
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#ifndef _DETOURS_H_
|
||||
#define _DETOURS_H_
|
||||
|
||||
#define DETOURS_VERSION 0x4c0c1 // 0xMAJORcMINORcPATCH
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
#ifdef DETOURS_INTERNAL
|
||||
|
||||
#define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS 1
|
||||
#define _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 1
|
||||
|
||||
#pragma warning(disable:4068) // unknown pragma (suppress)
|
||||
|
||||
#if _MSC_VER >= 1900
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4091) // empty typedef
|
||||
#endif
|
||||
|
||||
// Suppress declspec(dllimport) for the sake of Detours
|
||||
// users that provide kernel32 functionality themselves.
|
||||
// This is ok in the mainstream case, it will just cost
|
||||
// an extra instruction calling some functions, which
|
||||
// LTCG optimizes away.
|
||||
//
|
||||
#define _KERNEL32_ 1
|
||||
#define _USER32_ 1
|
||||
|
||||
#include <windows.h>
|
||||
#if (_MSC_VER < 1310)
|
||||
#else
|
||||
#pragma warning(push)
|
||||
#if _MSC_VER > 1400
|
||||
#pragma warning(disable:6102 6103) // /analyze warnings
|
||||
#endif
|
||||
#include <strsafe.h>
|
||||
#include <intsafe.h>
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
#include <crtdbg.h>
|
||||
|
||||
// Allow Detours to cleanly compile with the MingW toolchain.
|
||||
//
|
||||
#ifdef __GNUC__
|
||||
#define __try
|
||||
#define __except(x) if (0)
|
||||
#include <strsafe.h>
|
||||
#include <intsafe.h>
|
||||
#endif
|
||||
|
||||
// From winerror.h, as this error isn't found in some SDKs:
|
||||
//
|
||||
// MessageId: ERROR_DYNAMIC_CODE_BLOCKED
|
||||
//
|
||||
// MessageText:
|
||||
//
|
||||
// The operation was blocked as the process prohibits dynamic code generation.
|
||||
//
|
||||
#define ERROR_DYNAMIC_CODE_BLOCKED 1655L
|
||||
|
||||
#endif // DETOURS_INTERNAL
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
#undef DETOURS_X64
|
||||
#undef DETOURS_X86
|
||||
#undef DETOURS_IA64
|
||||
#undef DETOURS_ARM
|
||||
#undef DETOURS_ARM64
|
||||
#undef DETOURS_BITS
|
||||
#undef DETOURS_32BIT
|
||||
#undef DETOURS_64BIT
|
||||
|
||||
#if defined(_X86_)
|
||||
#define DETOURS_X86
|
||||
#define DETOURS_OPTION_BITS 64
|
||||
|
||||
#elif defined(_AMD64_)
|
||||
#define DETOURS_X64
|
||||
#define DETOURS_OPTION_BITS 32
|
||||
|
||||
#elif defined(_IA64_)
|
||||
#define DETOURS_IA64
|
||||
#define DETOURS_OPTION_BITS 32
|
||||
|
||||
#elif defined(_ARM_)
|
||||
#define DETOURS_ARM
|
||||
|
||||
#elif defined(_ARM64_)
|
||||
#define DETOURS_ARM64
|
||||
|
||||
#else
|
||||
#error Unknown architecture (x86, amd64, ia64, arm, arm64)
|
||||
#endif
|
||||
|
||||
#ifdef _WIN64
|
||||
#undef DETOURS_32BIT
|
||||
#define DETOURS_64BIT 1
|
||||
#define DETOURS_BITS 64
|
||||
// If all 64bit kernels can run one and only one 32bit architecture.
|
||||
//#define DETOURS_OPTION_BITS 32
|
||||
#else
|
||||
#define DETOURS_32BIT 1
|
||||
#undef DETOURS_64BIT
|
||||
#define DETOURS_BITS 32
|
||||
// If all 64bit kernels can run one and only one 32bit architecture.
|
||||
//#define DETOURS_OPTION_BITS 32
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
#if (_MSC_VER < 1299) && !defined(__MINGW32__)
|
||||
typedef LONG LONG_PTR;
|
||||
typedef ULONG ULONG_PTR;
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////// SAL 2.0 Annotations w/o SAL.
|
||||
//
|
||||
// These definitions are include so that Detours will build even if the
|
||||
// compiler doesn't have full SAL 2.0 support.
|
||||
//
|
||||
#ifndef DETOURS_DONT_REMOVE_SAL_20
|
||||
|
||||
#ifdef DETOURS_TEST_REMOVE_SAL_20
|
||||
#undef _Analysis_assume_
|
||||
#undef _Benign_race_begin_
|
||||
#undef _Benign_race_end_
|
||||
#undef _Field_range_
|
||||
#undef _Field_size_
|
||||
#undef _In_
|
||||
#undef _In_bytecount_
|
||||
#undef _In_count_
|
||||
#undef __in_ecount
|
||||
#undef _In_opt_
|
||||
#undef _In_opt_bytecount_
|
||||
#undef _In_opt_count_
|
||||
#undef _In_opt_z_
|
||||
#undef _In_range_
|
||||
#undef _In_reads_
|
||||
#undef _In_reads_bytes_
|
||||
#undef _In_reads_opt_
|
||||
#undef _In_reads_opt_bytes_
|
||||
#undef _In_reads_or_z_
|
||||
#undef _In_z_
|
||||
#undef _Inout_
|
||||
#undef _Inout_opt_
|
||||
#undef _Inout_z_count_
|
||||
#undef _Out_
|
||||
#undef _Out_opt_
|
||||
#undef _Out_writes_
|
||||
#undef _Outptr_result_maybenull_
|
||||
#undef _Readable_bytes_
|
||||
#undef _Success_
|
||||
#undef _Writable_bytes_
|
||||
#undef _Pre_notnull_
|
||||
#endif
|
||||
|
||||
#if defined(_Deref_out_opt_z_) && !defined(_Outptr_result_maybenull_)
|
||||
#define _Outptr_result_maybenull_ _Deref_out_opt_z_
|
||||
#endif
|
||||
|
||||
#if defined(_In_count_) && !defined(_In_reads_)
|
||||
#define _In_reads_(x) _In_count_(x)
|
||||
#endif
|
||||
|
||||
#if defined(_In_opt_count_) && !defined(_In_reads_opt_)
|
||||
#define _In_reads_opt_(x) _In_opt_count_(x)
|
||||
#endif
|
||||
|
||||
#if defined(_In_opt_bytecount_) && !defined(_In_reads_opt_bytes_)
|
||||
#define _In_reads_opt_bytes_(x) _In_opt_bytecount_(x)
|
||||
#endif
|
||||
|
||||
#if defined(_In_bytecount_) && !defined(_In_reads_bytes_)
|
||||
#define _In_reads_bytes_(x) _In_bytecount_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_
|
||||
#define _In_
|
||||
#endif
|
||||
|
||||
#ifndef _In_bytecount_
|
||||
#define _In_bytecount_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_count_
|
||||
#define _In_count_(x)
|
||||
#endif
|
||||
|
||||
#ifndef __in_ecount
|
||||
#define __in_ecount(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_opt_
|
||||
#define _In_opt_
|
||||
#endif
|
||||
|
||||
#ifndef _In_opt_bytecount_
|
||||
#define _In_opt_bytecount_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_opt_count_
|
||||
#define _In_opt_count_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_opt_z_
|
||||
#define _In_opt_z_
|
||||
#endif
|
||||
|
||||
#ifndef _In_range_
|
||||
#define _In_range_(x,y)
|
||||
#endif
|
||||
|
||||
#ifndef _In_reads_
|
||||
#define _In_reads_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_reads_bytes_
|
||||
#define _In_reads_bytes_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_reads_opt_
|
||||
#define _In_reads_opt_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_reads_opt_bytes_
|
||||
#define _In_reads_opt_bytes_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _In_reads_or_z_
|
||||
#define _In_reads_or_z_
|
||||
#endif
|
||||
|
||||
#ifndef _In_z_
|
||||
#define _In_z_
|
||||
#endif
|
||||
|
||||
#ifndef _Inout_
|
||||
#define _Inout_
|
||||
#endif
|
||||
|
||||
#ifndef _Inout_opt_
|
||||
#define _Inout_opt_
|
||||
#endif
|
||||
|
||||
#ifndef _Inout_z_count_
|
||||
#define _Inout_z_count_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _Out_
|
||||
#define _Out_
|
||||
#endif
|
||||
|
||||
#ifndef _Out_opt_
|
||||
#define _Out_opt_
|
||||
#endif
|
||||
|
||||
#ifndef _Out_writes_
|
||||
#define _Out_writes_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _Outptr_result_maybenull_
|
||||
#define _Outptr_result_maybenull_
|
||||
#endif
|
||||
|
||||
#ifndef _Writable_bytes_
|
||||
#define _Writable_bytes_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _Readable_bytes_
|
||||
#define _Readable_bytes_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _Success_
|
||||
#define _Success_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _Pre_notnull_
|
||||
#define _Pre_notnull_
|
||||
#endif
|
||||
|
||||
#ifdef DETOURS_INTERNAL
|
||||
|
||||
#pragma warning(disable:4615) // unknown warning type (suppress with older compilers)
|
||||
|
||||
#ifndef _Benign_race_begin_
|
||||
#define _Benign_race_begin_
|
||||
#endif
|
||||
|
||||
#ifndef _Benign_race_end_
|
||||
#define _Benign_race_end_
|
||||
#endif
|
||||
|
||||
#ifndef _Field_size_
|
||||
#define _Field_size_(x)
|
||||
#endif
|
||||
|
||||
#ifndef _Field_range_
|
||||
#define _Field_range_(x,y)
|
||||
#endif
|
||||
|
||||
#ifndef _Analysis_assume_
|
||||
#define _Analysis_assume_(x)
|
||||
#endif
|
||||
|
||||
#endif // DETOURS_INTERNAL
|
||||
#endif // DETOURS_DONT_REMOVE_SAL_20
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
#ifndef GUID_DEFINED
|
||||
#define GUID_DEFINED
|
||||
typedef struct _GUID
|
||||
{
|
||||
DWORD Data1;
|
||||
WORD Data2;
|
||||
WORD Data3;
|
||||
BYTE Data4[ 8 ];
|
||||
} GUID;
|
||||
|
||||
#ifdef INITGUID
|
||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
||||
const GUID name \
|
||||
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
|
||||
#else
|
||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
||||
const GUID name
|
||||
#endif // INITGUID
|
||||
#endif // !GUID_DEFINED
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifndef _REFGUID_DEFINED
|
||||
#define _REFGUID_DEFINED
|
||||
#define REFGUID const GUID &
|
||||
#endif // !_REFGUID_DEFINED
|
||||
#else // !__cplusplus
|
||||
#ifndef _REFGUID_DEFINED
|
||||
#define _REFGUID_DEFINED
|
||||
#define REFGUID const GUID * const
|
||||
#endif // !_REFGUID_DEFINED
|
||||
#endif // !__cplusplus
|
||||
|
||||
#ifndef ARRAYSIZE
|
||||
#define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0]))
|
||||
#endif
|
||||
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
/////////////////////////////////////////////////// Instruction Target Macros.
|
||||
//
|
||||
#define DETOUR_INSTRUCTION_TARGET_NONE ((PVOID)0)
|
||||
#define DETOUR_INSTRUCTION_TARGET_DYNAMIC ((PVOID)(LONG_PTR)-1)
|
||||
#define DETOUR_SECTION_HEADER_SIGNATURE 0x00727444 // "Dtr\0"
|
||||
|
||||
extern const GUID DETOUR_EXE_RESTORE_GUID;
|
||||
extern const GUID DETOUR_EXE_HELPER_GUID;
|
||||
|
||||
#define DETOUR_TRAMPOLINE_SIGNATURE 0x21727444 // Dtr!
|
||||
typedef struct _DETOUR_TRAMPOLINE DETOUR_TRAMPOLINE, *PDETOUR_TRAMPOLINE;
|
||||
|
||||
#ifndef DETOUR_MAX_SUPPORTED_IMAGE_SECTION_HEADERS
|
||||
#define DETOUR_MAX_SUPPORTED_IMAGE_SECTION_HEADERS 32
|
||||
#endif // !DETOUR_MAX_SUPPORTED_IMAGE_SECTION_HEADERS
|
||||
/*
|
||||
///////////////////////////////////////////////////////////// Binary Typedefs.
|
||||
//
|
||||
typedef BOOL (CALLBACK *PF_DETOUR_BINARY_BYWAY_CALLBACK)(
|
||||
_In_opt_ PVOID pContext,
|
||||
_In_opt_ LPCSTR pszFile,
|
||||
_Outptr_result_maybenull_ LPCSTR *ppszOutFile);
|
||||
|
||||
typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FILE_CALLBACK)(
|
||||
_In_opt_ PVOID pContext,
|
||||
_In_ LPCSTR pszOrigFile,
|
||||
_In_ LPCSTR pszFile,
|
||||
_Outptr_result_maybenull_ LPCSTR *ppszOutFile);
|
||||
|
||||
typedef BOOL (CALLBACK *PF_DETOUR_BINARY_SYMBOL_CALLBACK)(
|
||||
_In_opt_ PVOID pContext,
|
||||
_In_ ULONG nOrigOrdinal,
|
||||
_In_ ULONG nOrdinal,
|
||||
_Out_ ULONG *pnOutOrdinal,
|
||||
_In_opt_ LPCSTR pszOrigSymbol,
|
||||
_In_opt_ LPCSTR pszSymbol,
|
||||
_Outptr_result_maybenull_ LPCSTR *ppszOutSymbol);
|
||||
|
||||
typedef BOOL (CALLBACK *PF_DETOUR_BINARY_COMMIT_CALLBACK)(
|
||||
_In_opt_ PVOID pContext);
|
||||
|
||||
typedef BOOL (CALLBACK *PF_DETOUR_ENUMERATE_EXPORT_CALLBACK)(_In_opt_ PVOID pContext,
|
||||
_In_ ULONG nOrdinal,
|
||||
_In_opt_ LPCSTR pszName,
|
||||
_In_opt_ PVOID pCode);
|
||||
|
||||
typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FILE_CALLBACK)(_In_opt_ PVOID pContext,
|
||||
_In_opt_ HMODULE hModule,
|
||||
_In_opt_ LPCSTR pszFile);
|
||||
|
||||
typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FUNC_CALLBACK)(_In_opt_ PVOID pContext,
|
||||
_In_ DWORD nOrdinal,
|
||||
_In_opt_ LPCSTR pszFunc,
|
||||
_In_opt_ PVOID pvFunc);
|
||||
|
||||
// Same as PF_DETOUR_IMPORT_FUNC_CALLBACK but extra indirection on last parameter.
|
||||
typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FUNC_CALLBACK_EX)(_In_opt_ PVOID pContext,
|
||||
_In_ DWORD nOrdinal,
|
||||
_In_opt_ LPCSTR pszFunc,
|
||||
_In_opt_ PVOID* ppvFunc);
|
||||
*/
|
||||
typedef VOID * PDETOUR_BINARY;
|
||||
typedef VOID * PDETOUR_LOADED_BINARY;
|
||||
|
||||
//////////////////////////////////////////////////////////// Transaction APIs.
|
||||
//
|
||||
LONG WINAPI DetourTransactionBegin(VOID);
|
||||
LONG WINAPI DetourTransactionAbort(VOID);
|
||||
LONG WINAPI DetourTransactionCommit(VOID);
|
||||
LONG WINAPI DetourTransactionCommitEx(_Out_opt_ PVOID **pppFailedPointer);
|
||||
|
||||
LONG WINAPI DetourUpdateThread(_In_ HANDLE hThread);
|
||||
|
||||
LONG WINAPI DetourAttach(_Inout_ PVOID *ppPointer,
|
||||
_In_ PVOID pDetour);
|
||||
|
||||
LONG WINAPI DetourAttachEx(_Inout_ PVOID *ppPointer,
|
||||
_In_ PVOID pDetour,
|
||||
_Out_opt_ PDETOUR_TRAMPOLINE *ppRealTrampoline,
|
||||
_Out_opt_ PVOID *ppRealTarget,
|
||||
_Out_opt_ PVOID *ppRealDetour);
|
||||
|
||||
LONG WINAPI DetourDetach(_Inout_ PVOID *ppPointer,
|
||||
_In_ PVOID pDetour);
|
||||
|
||||
BOOL WINAPI DetourSetIgnoreTooSmall(_In_ BOOL fIgnore);
|
||||
BOOL WINAPI DetourSetRetainRegions(_In_ BOOL fRetain);
|
||||
PVOID WINAPI DetourSetSystemRegionLowerBound(_In_ PVOID pSystemRegionLowerBound);
|
||||
PVOID WINAPI DetourSetSystemRegionUpperBound(_In_ PVOID pSystemRegionUpperBound);
|
||||
|
||||
////////////////////////////////////////////////////////////// Code Functions.
|
||||
//
|
||||
PVOID WINAPI DetourFindFunction(_In_ LPCWSTR pszModule,
|
||||
_In_ LPCSTR pszFunction);
|
||||
PVOID WINAPI DetourCodeFromPointer(_In_ PVOID pPointer,
|
||||
_Out_opt_ PVOID *ppGlobals);
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
|
||||
_Inout_opt_ PVOID *ppDstPool,
|
||||
_In_ PVOID pSrc,
|
||||
_Out_opt_ PVOID *ppTarget,
|
||||
_Out_opt_ LONG *plExtra);
|
||||
BOOL WINAPI DetourSetCodeModule(_In_ HMODULE hModule,
|
||||
_In_ BOOL fLimitReferencesToModule);
|
||||
PVOID WINAPI DetourAllocateRegionWithinJumpBounds(_In_ LPCVOID pbTarget,
|
||||
_Out_ PDWORD pcbAllocatedSize);
|
||||
BOOL WINAPI DetourIsFunctionImported(_In_ PBYTE pbCode,
|
||||
_In_ PBYTE pbAddress);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
/////////////////////////////////////////////////// Type-safe overloads for C++
|
||||
//
|
||||
#if __cplusplus >= 201103L || _MSVC_LANG >= 201103L
|
||||
#include <type_traits>
|
||||
|
||||
template<typename T>
|
||||
struct DetoursIsFunctionPointer : std::false_type {};
|
||||
|
||||
template<typename T>
|
||||
struct DetoursIsFunctionPointer<T*> : std::is_function<typename std::remove_pointer<T>::type> {};
|
||||
|
||||
template<
|
||||
typename T,
|
||||
typename std::enable_if<DetoursIsFunctionPointer<T>::value, int>::type = 0>
|
||||
LONG DetourAttach(_Inout_ T *ppPointer,
|
||||
_In_ T pDetour) noexcept
|
||||
{
|
||||
return DetourAttach(
|
||||
reinterpret_cast<void**>(ppPointer),
|
||||
reinterpret_cast<void*>(pDetour));
|
||||
}
|
||||
|
||||
template<
|
||||
typename T,
|
||||
typename std::enable_if<DetoursIsFunctionPointer<T>::value, int>::type = 0>
|
||||
LONG DetourAttachEx(_Inout_ T *ppPointer,
|
||||
_In_ T pDetour,
|
||||
_Out_opt_ PDETOUR_TRAMPOLINE *ppRealTrampoline,
|
||||
_Out_opt_ T *ppRealTarget,
|
||||
_Out_opt_ T *ppRealDetour) noexcept
|
||||
{
|
||||
return DetourAttachEx(
|
||||
reinterpret_cast<void**>(ppPointer),
|
||||
reinterpret_cast<void*>(pDetour),
|
||||
ppRealTrampoline,
|
||||
reinterpret_cast<void**>(ppRealTarget),
|
||||
reinterpret_cast<void**>(ppRealDetour));
|
||||
}
|
||||
|
||||
template<
|
||||
typename T,
|
||||
typename std::enable_if<DetoursIsFunctionPointer<T>::value, int>::type = 0>
|
||||
LONG DetourDetach(_Inout_ T *ppPointer,
|
||||
_In_ T pDetour) noexcept
|
||||
{
|
||||
return DetourDetach(
|
||||
reinterpret_cast<void**>(ppPointer),
|
||||
reinterpret_cast<void*>(pDetour));
|
||||
}
|
||||
|
||||
#endif // __cplusplus >= 201103L || _MSVC_LANG >= 201103L
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//////////////////////////////////////////////// Detours Internal Definitions.
|
||||
//
|
||||
#ifdef __cplusplus
|
||||
#ifdef DETOURS_INTERNAL
|
||||
|
||||
#define NOTHROW
|
||||
// #define NOTHROW (nothrow)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
#if (_MSC_VER < 1299) && !defined(__GNUC__)
|
||||
#include <imagehlp.h>
|
||||
typedef IMAGEHLP_MODULE IMAGEHLP_MODULE64;
|
||||
typedef PIMAGEHLP_MODULE PIMAGEHLP_MODULE64;
|
||||
typedef IMAGEHLP_SYMBOL SYMBOL_INFO;
|
||||
typedef PIMAGEHLP_SYMBOL PSYMBOL_INFO;
|
||||
|
||||
static inline
|
||||
LONG InterlockedCompareExchange(_Inout_ LONG *ptr, _In_ LONG nval, _In_ LONG oval)
|
||||
{
|
||||
return (LONG)::InterlockedCompareExchange((PVOID*)ptr, (PVOID)nval, (PVOID)oval);
|
||||
}
|
||||
#else
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4091) // empty typedef
|
||||
#include <dbghelp.h>
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
#if defined(_INC_STDIO) && !defined(_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS)
|
||||
#error detours.h must be included before stdio.h (or at least define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS earlier)
|
||||
#endif
|
||||
#define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS 1
|
||||
|
||||
|
||||
#if 1 || defined(DETOURS_IA64)
|
||||
|
||||
//
|
||||
// IA64 instructions are 41 bits, 3 per bundle, plus 5 bit bundle template => 128 bits per bundle.
|
||||
//
|
||||
|
||||
#define DETOUR_IA64_INSTRUCTIONS_PER_BUNDLE (3)
|
||||
|
||||
#define DETOUR_IA64_TEMPLATE_OFFSET (0)
|
||||
#define DETOUR_IA64_TEMPLATE_SIZE (5)
|
||||
|
||||
#define DETOUR_IA64_INSTRUCTION_SIZE (41)
|
||||
#define DETOUR_IA64_INSTRUCTION0_OFFSET (DETOUR_IA64_TEMPLATE_SIZE)
|
||||
#define DETOUR_IA64_INSTRUCTION1_OFFSET (DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTION_SIZE)
|
||||
#define DETOUR_IA64_INSTRUCTION2_OFFSET (DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTION_SIZE + DETOUR_IA64_INSTRUCTION_SIZE)
|
||||
|
||||
C_ASSERT(DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTIONS_PER_BUNDLE * DETOUR_IA64_INSTRUCTION_SIZE == 128);
|
||||
|
||||
__declspec(align(16)) struct DETOUR_IA64_BUNDLE
|
||||
{
|
||||
public:
|
||||
union
|
||||
{
|
||||
BYTE data[16];
|
||||
UINT64 wide[2];
|
||||
};
|
||||
|
||||
enum {
|
||||
A_UNIT = 1u,
|
||||
I_UNIT = 2u,
|
||||
M_UNIT = 3u,
|
||||
B_UNIT = 4u,
|
||||
F_UNIT = 5u,
|
||||
L_UNIT = 6u,
|
||||
X_UNIT = 7u,
|
||||
};
|
||||
struct DETOUR_IA64_METADATA
|
||||
{
|
||||
ULONG nTemplate : 8; // Instruction template.
|
||||
ULONG nUnit0 : 4; // Unit for slot 0
|
||||
ULONG nUnit1 : 4; // Unit for slot 1
|
||||
ULONG nUnit2 : 4; // Unit for slot 2
|
||||
};
|
||||
|
||||
protected:
|
||||
static const DETOUR_IA64_METADATA s_rceCopyTable[33];
|
||||
|
||||
UINT RelocateBundle(_Inout_ DETOUR_IA64_BUNDLE* pDst, _Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra) const;
|
||||
|
||||
bool RelocateInstruction(_Inout_ DETOUR_IA64_BUNDLE* pDst,
|
||||
_In_ BYTE slot,
|
||||
_Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra) const;
|
||||
|
||||
// 120 112 104 96 88 80 72 64 56 48 40 32 24 16 8 0
|
||||
// f. e. d. c. b. a. 9. 8. 7. 6. 5. 4. 3. 2. 1. 0.
|
||||
|
||||
// 00
|
||||
// f.e. d.c. b.a. 9.8. 7.6. 5.4. 3.2. 1.0.
|
||||
// 0000 0000 0000 0000 0000 0000 0000 001f : Template [4..0]
|
||||
// 0000 0000 0000 0000 0000 03ff ffff ffe0 : Zero [ 41.. 5]
|
||||
// 0000 0000 0000 0000 0000 3c00 0000 0000 : Zero [ 45.. 42]
|
||||
// 0000 0000 0007 ffff ffff c000 0000 0000 : One [ 82.. 46]
|
||||
// 0000 0000 0078 0000 0000 0000 0000 0000 : One [ 86.. 83]
|
||||
// 0fff ffff ff80 0000 0000 0000 0000 0000 : Two [123.. 87]
|
||||
// f000 0000 0000 0000 0000 0000 0000 0000 : Two [127..124]
|
||||
BYTE GetTemplate() const;
|
||||
// Get 4 bit opcodes.
|
||||
BYTE GetInst0() const;
|
||||
BYTE GetInst1() const;
|
||||
BYTE GetInst2() const;
|
||||
BYTE GetUnit(BYTE slot) const;
|
||||
BYTE GetUnit0() const;
|
||||
BYTE GetUnit1() const;
|
||||
BYTE GetUnit2() const;
|
||||
// Get 37 bit data.
|
||||
UINT64 GetData0() const;
|
||||
UINT64 GetData1() const;
|
||||
UINT64 GetData2() const;
|
||||
|
||||
// Get/set the full 41 bit instructions.
|
||||
UINT64 GetInstruction(BYTE slot) const;
|
||||
UINT64 GetInstruction0() const;
|
||||
UINT64 GetInstruction1() const;
|
||||
UINT64 GetInstruction2() const;
|
||||
void SetInstruction(BYTE slot, UINT64 instruction);
|
||||
void SetInstruction0(UINT64 instruction);
|
||||
void SetInstruction1(UINT64 instruction);
|
||||
void SetInstruction2(UINT64 instruction);
|
||||
|
||||
// Get/set bitfields.
|
||||
static UINT64 GetBits(UINT64 Value, UINT64 Offset, UINT64 Count);
|
||||
static UINT64 SetBits(UINT64 Value, UINT64 Offset, UINT64 Count, UINT64 Field);
|
||||
|
||||
// Get specific read-only fields.
|
||||
static UINT64 GetOpcode(UINT64 instruction); // 4bit opcode
|
||||
static UINT64 GetX(UINT64 instruction); // 1bit opcode extension
|
||||
static UINT64 GetX3(UINT64 instruction); // 3bit opcode extension
|
||||
static UINT64 GetX6(UINT64 instruction); // 6bit opcode extension
|
||||
|
||||
// Get/set specific fields.
|
||||
static UINT64 GetImm7a(UINT64 instruction);
|
||||
static UINT64 SetImm7a(UINT64 instruction, UINT64 imm7a);
|
||||
static UINT64 GetImm13c(UINT64 instruction);
|
||||
static UINT64 SetImm13c(UINT64 instruction, UINT64 imm13c);
|
||||
static UINT64 GetSignBit(UINT64 instruction);
|
||||
static UINT64 SetSignBit(UINT64 instruction, UINT64 signBit);
|
||||
static UINT64 GetImm20a(UINT64 instruction);
|
||||
static UINT64 SetImm20a(UINT64 instruction, UINT64 imm20a);
|
||||
static UINT64 GetImm20b(UINT64 instruction);
|
||||
static UINT64 SetImm20b(UINT64 instruction, UINT64 imm20b);
|
||||
|
||||
static UINT64 SignExtend(UINT64 Value, UINT64 Offset);
|
||||
|
||||
BOOL IsMovlGp() const;
|
||||
|
||||
VOID SetInst(BYTE Slot, BYTE nInst);
|
||||
VOID SetInst0(BYTE nInst);
|
||||
VOID SetInst1(BYTE nInst);
|
||||
VOID SetInst2(BYTE nInst);
|
||||
VOID SetData(BYTE Slot, UINT64 nData);
|
||||
VOID SetData0(UINT64 nData);
|
||||
VOID SetData1(UINT64 nData);
|
||||
VOID SetData2(UINT64 nData);
|
||||
BOOL SetNop(BYTE Slot);
|
||||
BOOL SetNop0();
|
||||
BOOL SetNop1();
|
||||
BOOL SetNop2();
|
||||
|
||||
public:
|
||||
BOOL IsBrl() const;
|
||||
VOID SetBrl();
|
||||
VOID SetBrl(UINT64 target);
|
||||
UINT64 GetBrlTarget() const;
|
||||
VOID SetBrlTarget(UINT64 target);
|
||||
VOID SetBrlImm(UINT64 imm);
|
||||
UINT64 GetBrlImm() const;
|
||||
|
||||
UINT64 GetMovlGp() const;
|
||||
VOID SetMovlGp(UINT64 gp);
|
||||
|
||||
VOID SetStop();
|
||||
|
||||
UINT Copy(_Out_ DETOUR_IA64_BUNDLE *pDst, _Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra = NULL) const;
|
||||
};
|
||||
#endif // DETOURS_IA64
|
||||
|
||||
#ifdef DETOURS_ARM
|
||||
|
||||
#define DETOURS_PFUNC_TO_PBYTE(p) ((PBYTE)(((ULONG_PTR)(p)) & ~(ULONG_PTR)1))
|
||||
#define DETOURS_PBYTE_TO_PFUNC(p) ((PBYTE)(((ULONG_PTR)(p)) | (ULONG_PTR)1))
|
||||
|
||||
#endif // DETOURS_ARM
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // DETOURS_INTERNAL
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // _DETOURS_H_
|
||||
//
|
||||
//////////////////////////////////////////////////////////////// End of File.
|
||||
@@ -0,0 +1,112 @@
|
||||
##############################################################################
|
||||
##
|
||||
## Establish build target type for Detours.
|
||||
##
|
||||
## Microsoft Research Detours Package
|
||||
##
|
||||
## Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
##
|
||||
|
||||
############################################## Determine Processor Build Type.
|
||||
#
|
||||
# Default the detours architecture to match the compiler target that
|
||||
# has been selected by the user via the VS Developer Command Prompt
|
||||
# they launched.
|
||||
|
||||
DETOURS_TARGET_PROCESSOR=arm64
|
||||
|
||||
DETOURS_DEFINITION=""
|
||||
|
||||
!IF "$(DETOURS_TARGET_PROCESSOR)" == "" && "$(VSCMD_ARG_TGT_ARCH)" != ""
|
||||
DETOURS_TARGET_PROCESSOR = $(VSCMD_ARG_TGT_ARCH)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(DETOURS_TARGET_PROCESSOR)" == "" && "$(PROCESSOR_ARCHITEW6432)" != ""
|
||||
DETOURS_TARGET_PROCESSOR = x86
|
||||
!ENDIF
|
||||
|
||||
!IF "$(DETOURS_TARGET_PROCESSOR)" == ""
|
||||
DETOURS_TARGET_PROCESSOR = $(PROCESSOR_ARCHITECTURE)
|
||||
!ENDIF
|
||||
|
||||
# Uppercase DETOURS_TARGET_PROCESSOR
|
||||
DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:A=a)
|
||||
DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:D=d)
|
||||
DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:I=i)
|
||||
DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:M=m)
|
||||
DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:R=r)
|
||||
DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:X=x)
|
||||
|
||||
|
||||
!IF "$(DETOURS_TARGET_PROCESSOR)" == "amd64"
|
||||
DETOURS_TARGET_PROCESSOR = x64
|
||||
!ENDIF
|
||||
|
||||
|
||||
!if "$(DETOURS_TARGET_PROCESSOR:64=)" == "$(DETOURS_TARGET_PROCESSOR)"
|
||||
DETOURS_32BIT=1
|
||||
DETOURS_BITS=32
|
||||
!else
|
||||
DETOURS_64BIT=1
|
||||
DETOURS_BITS=64
|
||||
!endif
|
||||
|
||||
########################################## Configure build based on Processor.
|
||||
##
|
||||
## DETOURS_OPTION_PROCESSOR: Set this macro if the processor *will* run code
|
||||
## from another ISA (i.e. x86 on x64).
|
||||
##
|
||||
## DETOURS_OPTION_BITS: Set this macro if the processor *may* have
|
||||
## an alternative word size.
|
||||
##
|
||||
!IF "$(DETOURS_TARGET_PROCESSOR)" == "x64"
|
||||
#!MESSAGE Building for 64-bit x64.
|
||||
DETOURS_SOURCE_BROWSING = 0
|
||||
DETOURS_OPTION_PROCESSOR=x86
|
||||
DETOURS_OPTION_BITS=32
|
||||
DETOURS_DEFINITION=/DDETOURS_X64_OFFLINE_LIBRARY
|
||||
!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "ia64"
|
||||
#!MESSAGE Building for 64-bit IA64.
|
||||
DETOURS_OPTION_PROCESSOR=x86
|
||||
DETOURS_OPTION_BITS=32
|
||||
DETOURS_DEFINITION=/DDETOURS_X86_OFFLINE_LIBRARY
|
||||
!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "x86"
|
||||
#!MESSAGE Building for 32-bit x86.
|
||||
DETOURS_OPTION_BITS=64
|
||||
# Don't set DETOURS_OPTION_PROCESSOR for x64 because we don't *know* that
|
||||
# we'll run on a 64-bit machine.
|
||||
!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "arm"
|
||||
#!MESSAGE Building for 32-bit ARM.
|
||||
DETOURS_DEFINITION=/DDETOURS_ARM_OFFLINE_LIBRARY
|
||||
!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "arm64"
|
||||
#!MESSAGE Building for 64-bit ARM.
|
||||
DETOURS_DEFINITION=/DDETOURS_ARM64_OFFLINE_LIBRARY
|
||||
!ELSE
|
||||
!MESSAGE Note: To select the target processor architecture set either
|
||||
!MESSAGE PROCESSOR_ARCHITECTURE or DETOURS_TARGET_PROCESSOR.
|
||||
!MESSAGE
|
||||
!ERROR Unknown target processor: "$(DETOURS_TARGET_PROCESSOR)"
|
||||
!ENDIF
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
!IF "$(DETOURS_CONFIG)" == "debug"
|
||||
DETOURS_DEBUG=1
|
||||
DETOURS_CONFIG="-debug"
|
||||
!ELSE
|
||||
DETOURS_DEBUG=0
|
||||
!ENDIF
|
||||
|
||||
BIND = $(ROOT)\bin
|
||||
OBJD = $(BIND)\obj\$(DETOURS_TARGET_PROCESSOR)$(DETOURS_CONFIG)
|
||||
|
||||
BINDS = \
|
||||
$(ROOT)\bin
|
||||
|
||||
OBJDS = \
|
||||
$(BIND)\obj\x86$(DETOURS_CONFIG) \
|
||||
$(BIND)\obj\x64$(DETOURS_CONFIG) \
|
||||
$(BIND)\obj\arm$(DETOURS_CONFIG) \
|
||||
$(BIND)\obj\arm64$(DETOURS_CONFIG) \
|
||||
|
||||
##############################################################################
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29519.181
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Detours", "Detours.vcxproj", "{37489709-8054-4903-9C49-A79846049FC9}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
DebugMDd|ARM = DebugMDd|ARM
|
||||
DebugMDd|ARM64 = DebugMDd|ARM64
|
||||
DebugMDd|x64 = DebugMDd|x64
|
||||
DebugMDd|x86 = DebugMDd|x86
|
||||
ReleaseMD|ARM = ReleaseMD|ARM
|
||||
ReleaseMD|ARM64 = ReleaseMD|ARM64
|
||||
ReleaseMD|x64 = ReleaseMD|x64
|
||||
ReleaseMD|x86 = ReleaseMD|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|ARM.ActiveCfg = DebugMDd|ARM
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|ARM.Build.0 = DebugMDd|ARM
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|ARM64.ActiveCfg = DebugMDd|ARM64
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|ARM64.Build.0 = DebugMDd|ARM64
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|x64.ActiveCfg = DebugMDd|x64
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|x64.Build.0 = DebugMDd|x64
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|x86.ActiveCfg = DebugMDd|Win32
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.DebugMDd|x86.Build.0 = DebugMDd|Win32
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|ARM.ActiveCfg = ReleaseMD|ARM
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|ARM.Build.0 = ReleaseMD|ARM
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|ARM64.ActiveCfg = ReleaseMD|ARM64
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|ARM64.Build.0 = ReleaseMD|ARM64
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|x64.ActiveCfg = ReleaseMD|x64
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|x64.Build.0 = ReleaseMD|x64
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|x86.ActiveCfg = ReleaseMD|Win32
|
||||
{37489709-8054-4903-9C49-A79846049FC9}.ReleaseMD|x86.Build.0 = ReleaseMD|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {1E71C644-7F30-4025-B1DF-6A4F07A2EDB3}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,602 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="DebugMDd|ARM">
|
||||
<Configuration>DebugMDd</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="DebugMDd|ARM64">
|
||||
<Configuration>DebugMDd</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="DebugMDd|Win32">
|
||||
<Configuration>DebugMDd</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="ReleaseMD|ARM">
|
||||
<Configuration>ReleaseMD</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="ReleaseMD|ARM64">
|
||||
<Configuration>ReleaseMD</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="ReleaseMD|Win32">
|
||||
<Configuration>ReleaseMD</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="DebugMDd|x64">
|
||||
<Configuration>DebugMDd</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="ReleaseMD|x64">
|
||||
<Configuration>ReleaseMD</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{37489709-8054-4903-9C49-A79846049FC9}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>Detours</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|x64'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|ARM'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|x64'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|ARM'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='DebugMDd|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='DebugMDd|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|ARM'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|ARM64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|ARM'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|ARM64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|x64'">
|
||||
<NMakeBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean
|
||||
nmake</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|ARM'">
|
||||
<NMakeBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean
|
||||
nmake</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|ARM64'">
|
||||
<NMakeBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean
|
||||
nmake</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|x64'">
|
||||
<NMakeBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean
|
||||
nmake</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|ARM'">
|
||||
<NMakeBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean
|
||||
nmake</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|Win32'">
|
||||
<NMakeBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean
|
||||
nmake</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|Win32'">
|
||||
<NMakeBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean
|
||||
nmake</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|ARM64'">
|
||||
<NMakeBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean
|
||||
nmake</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<ProgramDataBaseFileName>$(OutputPath)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PostBuildEvent />
|
||||
<PreBuildEvent>
|
||||
<Command>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<PrecompiledHeaderFile />
|
||||
<PrecompiledHeaderOutputFile />
|
||||
<ProgramDataBaseFileName>$(OutputPath)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PostBuildEvent />
|
||||
<PreBuildEvent>
|
||||
<Command>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|ARM'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<PrecompiledHeaderFile>
|
||||
</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<ProgramDataBaseFileName>$(OutputPath)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PostBuildEvent />
|
||||
<PreBuildEvent>
|
||||
<Command>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMDd|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<PrecompiledHeaderFile>
|
||||
</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<ProgramDataBaseFileName>$(OutputPath)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PostBuildEvent />
|
||||
<PreBuildEvent>
|
||||
<Command>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<ProgramDataBaseFileName>$(OutputPath)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PostBuildEvent />
|
||||
<PreBuildEvent>
|
||||
<Command>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeaderFile />
|
||||
<PrecompiledHeaderOutputFile />
|
||||
<ProgramDataBaseFileName>$(OutputPath)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PostBuildEvent />
|
||||
<PreBuildEvent>
|
||||
<Command>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|ARM'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeaderFile>
|
||||
</PrecompiledHeaderFile>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<ProgramDataBaseFileName>$(OutputPath)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PostBuildEvent />
|
||||
<PreBuildEvent>
|
||||
<Command>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseMD|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeaderFile/>
|
||||
<PrecompiledHeaderOutputFile/>
|
||||
<ProgramDataBaseFileName>$(OutputPath)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PostBuildEvent />
|
||||
<PreBuildEvent>
|
||||
<Command>SET DETOURS_TARGET_PROCESSOR=$(PlatformTarget)
|
||||
cd ..
|
||||
nmake</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\samples\comeasy\comeasy.cpp" />
|
||||
<ClCompile Include="..\samples\comeasy\wrotei.cpp" />
|
||||
<ClCompile Include="..\samples\commem\commem.cpp" />
|
||||
<ClCompile Include="..\samples\cping\cping.cpp" />
|
||||
<ClCompile Include="..\samples\disas\disas.cpp" />
|
||||
<ClCompile Include="..\samples\disas\unk.cpp" />
|
||||
<ClCompile Include="..\samples\disas\x86.cpp" />
|
||||
<ClCompile Include="..\samples\dtest\dtarge.cpp" />
|
||||
<ClCompile Include="..\samples\dtest\dtest.cpp" />
|
||||
<ClCompile Include="..\samples\dumpe\dumpe.cpp" />
|
||||
<ClCompile Include="..\samples\dumpi\dumpi.cpp" />
|
||||
<ClCompile Include="..\samples\dynamic_alloc\main.cpp" />
|
||||
<ClCompile Include="..\samples\echo\echofx.cpp" />
|
||||
<ClCompile Include="..\samples\echo\echonul.cpp" />
|
||||
<ClCompile Include="..\samples\echo\main.cpp" />
|
||||
<ClCompile Include="..\samples\einst\edll1x.cpp" />
|
||||
<ClCompile Include="..\samples\einst\edll2x.cpp" />
|
||||
<ClCompile Include="..\samples\einst\edll3x.cpp" />
|
||||
<ClCompile Include="..\samples\einst\einst.cpp" />
|
||||
<ClCompile Include="..\samples\excep\excep.cpp" />
|
||||
<ClCompile Include="..\samples\excep\firstexc.cpp" />
|
||||
<ClCompile Include="..\samples\findfunc\extend.cpp" />
|
||||
<ClCompile Include="..\samples\findfunc\findfunc.cpp" />
|
||||
<ClCompile Include="..\samples\findfunc\symtest.cpp" />
|
||||
<ClCompile Include="..\samples\findfunc\target.cpp" />
|
||||
<ClCompile Include="..\samples\impmunge\impmunge.cpp" />
|
||||
<ClCompile Include="..\samples\member\member.cpp" />
|
||||
<ClCompile Include="..\samples\opengl\ogldet.cpp" />
|
||||
<ClCompile Include="..\samples\opengl\testogl.cpp" />
|
||||
<ClCompile Include="..\samples\region\region.cpp" />
|
||||
<ClCompile Include="..\samples\setdll\setdll.cpp" />
|
||||
<ClCompile Include="..\samples\simple\simple.cpp" />
|
||||
<ClCompile Include="..\samples\simple\sleep5.cpp" />
|
||||
<ClCompile Include="..\samples\simple_safe\simple_safe.cpp" />
|
||||
<ClCompile Include="..\samples\simple_safe\sleep5.cpp" />
|
||||
<ClCompile Include="..\samples\slept\dslept.cpp" />
|
||||
<ClCompile Include="..\samples\slept\sleepbed.cpp" />
|
||||
<ClCompile Include="..\samples\slept\sleepnew.cpp" />
|
||||
<ClCompile Include="..\samples\slept\sleepold.cpp" />
|
||||
<ClCompile Include="..\samples\slept\slept.cpp" />
|
||||
<ClCompile Include="..\samples\slept\verify.cpp" />
|
||||
<ClCompile Include="..\samples\syelog\sltest.cpp" />
|
||||
<ClCompile Include="..\samples\syelog\sltestp.cpp" />
|
||||
<ClCompile Include="..\samples\syelog\syelog.cpp" />
|
||||
<ClCompile Include="..\samples\syelog\syelogd.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\talloc.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll1x.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll2x.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll3x.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll4x.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll5x.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll6x.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll7x.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll8x.cpp" />
|
||||
<ClCompile Include="..\samples\talloc\tdll9x.cpp" />
|
||||
<ClCompile Include="..\samples\traceapi\testapi.cpp" />
|
||||
<ClCompile Include="..\samples\traceapi\trcapi.cpp" />
|
||||
<ClCompile Include="..\samples\traceapi\_win32.cpp" />
|
||||
<ClCompile Include="..\samples\tracebld\tracebld.cpp" />
|
||||
<ClCompile Include="..\samples\tracebld\trcbld.cpp" />
|
||||
<ClCompile Include="..\samples\tracelnk\trclnk.cpp" />
|
||||
<ClCompile Include="..\samples\tracemem\trcmem.cpp" />
|
||||
<ClCompile Include="..\samples\tracereg\trcreg.cpp" />
|
||||
<ClCompile Include="..\samples\traceser\trcser.cpp" />
|
||||
<ClCompile Include="..\samples\tracessl\trcssl.cpp" />
|
||||
<ClCompile Include="..\samples\tracetcp\trctcp.cpp" />
|
||||
<ClCompile Include="..\samples\tryman\size.cpp" />
|
||||
<ClCompile Include="..\samples\tryman\tryman.cpp" />
|
||||
<ClCompile Include="..\samples\tryman\tstman.cpp" />
|
||||
<ClCompile Include="..\samples\withdll\withdll.cpp" />
|
||||
<ClCompile Include="..\src\creatwth.cpp" />
|
||||
<ClCompile Include="..\src\detours.cpp" />
|
||||
<ClCompile Include="..\src\disasm.cpp" />
|
||||
<ClCompile Include="..\src\disolarm.cpp" />
|
||||
<ClCompile Include="..\src\disolarm64.cpp" />
|
||||
<ClCompile Include="..\src\disolia64.cpp" />
|
||||
<ClCompile Include="..\src\disolx64.cpp" />
|
||||
<ClCompile Include="..\src\disolx86.cpp" />
|
||||
<ClCompile Include="..\src\image.cpp" />
|
||||
<ClCompile Include="..\src\modules.cpp" />
|
||||
<ClCompile Include="..\src\uimports.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\samples\dtest\dtarge.h" />
|
||||
<ClInclude Include="..\samples\excep\firstexc.h" />
|
||||
<ClInclude Include="..\samples\findfunc\target.h" />
|
||||
<ClInclude Include="..\samples\slept\slept.h" />
|
||||
<ClInclude Include="..\samples\syelog\syelog.h" />
|
||||
<ClInclude Include="..\samples\tracebld\tracebld.h" />
|
||||
<ClInclude Include="..\src\detours.h" />
|
||||
<ClInclude Include="..\src\detver.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\.gitignore" />
|
||||
<None Include="..\LICENSE.md" />
|
||||
<None Include="..\Makefile" />
|
||||
<None Include="..\README.md" />
|
||||
<None Include="..\samples\comeasy\Makefile" />
|
||||
<None Include="..\samples\commem\Makefile" />
|
||||
<None Include="..\samples\common.mak" />
|
||||
<None Include="..\samples\cping\cping.dat" />
|
||||
<None Include="..\samples\cping\Makefile" />
|
||||
<None Include="..\samples\disas\arm.asm" />
|
||||
<None Include="..\samples\disas\ia64.asm" />
|
||||
<None Include="..\samples\disas\Makefile" />
|
||||
<None Include="..\samples\disas\x64.asm" />
|
||||
<None Include="..\samples\dtest\Makefile" />
|
||||
<None Include="..\samples\dumpe\Makefile" />
|
||||
<None Include="..\samples\dumpi\Makefile" />
|
||||
<None Include="..\samples\dynamic_alloc\Makefile" />
|
||||
<None Include="..\samples\dynamic_alloc\x64.asm" />
|
||||
<None Include="..\samples\dynamic_alloc\x86.asm" />
|
||||
<None Include="..\samples\echo\Makefile" />
|
||||
<None Include="..\samples\einst\Makefile" />
|
||||
<None Include="..\samples\excep\Makefile" />
|
||||
<None Include="..\samples\findfunc\Makefile" />
|
||||
<None Include="..\samples\impmunge\Makefile" />
|
||||
<None Include="..\samples\Makefile" />
|
||||
<None Include="..\samples\member\Makefile" />
|
||||
<None Include="..\samples\opengl\Makefile" />
|
||||
<None Include="..\samples\region\Makefile" />
|
||||
<None Include="..\samples\setdll\Makefile" />
|
||||
<None Include="..\samples\simple\Makefile" />
|
||||
<None Include="..\samples\simple_safe\Makefile" />
|
||||
<None Include="..\samples\slept\Makefile" />
|
||||
<None Include="..\samples\syelog\Makefile" />
|
||||
<None Include="..\samples\talloc\Makefile" />
|
||||
<None Include="..\samples\traceapi\Makefile" />
|
||||
<None Include="..\samples\tracebld\Makefile" />
|
||||
<None Include="..\samples\tracelnk\Makefile" />
|
||||
<None Include="..\samples\tracemem\Makefile" />
|
||||
<None Include="..\samples\tracereg\Makefile" />
|
||||
<None Include="..\samples\traceser\Makefile" />
|
||||
<None Include="..\samples\tracessl\Makefile" />
|
||||
<None Include="..\samples\tracetcp\Makefile" />
|
||||
<None Include="..\samples\tryman\Makefile" />
|
||||
<None Include="..\samples\tryman\managed.cs" />
|
||||
<None Include="..\samples\withdll\Makefile" />
|
||||
<None Include="..\system.mak" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="..\CREDITS.md" />
|
||||
<Text Include="..\samples\cping\ReadMe.Txt" />
|
||||
<Text Include="..\samples\dtest\NORMAL_IA64.TXT" />
|
||||
<Text Include="..\samples\dtest\NORMAL_X64.TXT" />
|
||||
<Text Include="..\samples\dtest\NORMAL_X86.TXT" />
|
||||
<Text Include="..\samples\README.TXT" />
|
||||
<Text Include="..\samples\slept\NORMAL_IA64.TXT" />
|
||||
<Text Include="..\samples\slept\NORMAL_X64.TXT" />
|
||||
<Text Include="..\samples\slept\NORMAL_X86.TXT" />
|
||||
<Text Include="..\samples\talloc\NORMAL_IA64.TXT" />
|
||||
<Text Include="..\samples\talloc\NORMAL_X64.TXT" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="..\samples\comeasy\wrotei.rc" />
|
||||
<ResourceCompile Include="..\samples\dtest\dtarge.rc" />
|
||||
<ResourceCompile Include="..\samples\echo\echofx.rc" />
|
||||
<ResourceCompile Include="..\samples\findfunc\extend.rc" />
|
||||
<ResourceCompile Include="..\samples\findfunc\target.rc" />
|
||||
<ResourceCompile Include="..\samples\opengl\ogldet.rc" />
|
||||
<ResourceCompile Include="..\samples\simple\simple.rc" />
|
||||
<ResourceCompile Include="..\samples\simple_safe\simple_safe.rc" />
|
||||
<ResourceCompile Include="..\samples\slept\dslept.rc" />
|
||||
<ResourceCompile Include="..\samples\slept\slept.rc" />
|
||||
<ResourceCompile Include="..\samples\traceapi\trcapi.rc" />
|
||||
<ResourceCompile Include="..\samples\tracebld\trcbld.rc" />
|
||||
<ResourceCompile Include="..\samples\tracelnk\trclnk.rc" />
|
||||
<ResourceCompile Include="..\samples\tracemem\trcmem.rc" />
|
||||
<ResourceCompile Include="..\samples\tracereg\trcreg.rc" />
|
||||
<ResourceCompile Include="..\samples\traceser\trcser.rc" />
|
||||
<ResourceCompile Include="..\samples\tracessl\trcssl.rc" />
|
||||
<ResourceCompile Include="..\samples\tracetcp\trctcp.rc" />
|
||||
<ResourceCompile Include="..\samples\tryman\tstman.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Midl Include="..\samples\cping\iping.idl" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,605 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="samples">
|
||||
<UniqueIdentifier>{4DE3849F-647A-48FF-8873-256D44DFF3CA}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\comeasy">
|
||||
<UniqueIdentifier>{6215A674-4251-4F64-AA56-6F80297E5F8B}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\commem">
|
||||
<UniqueIdentifier>{B581B77F-AE4D-43BC-8C4F-EDE0E61EFFD3}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\cping">
|
||||
<UniqueIdentifier>{BF2ACC0E-890D-4BD0-B532-6228AF011E3E}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\disas">
|
||||
<UniqueIdentifier>{32F50667-320C-4799-B7DA-D1878C358D64}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\dtest">
|
||||
<UniqueIdentifier>{314C251E-4D8E-4837-9C36-4741399ED2A1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\dumpe">
|
||||
<UniqueIdentifier>{53C9A890-D5AB-4FD1-B898-6107C0E676E7}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\dumpi">
|
||||
<UniqueIdentifier>{17467834-9161-4FB2-BBEF-E3233CBBC818}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\dynamic_alloc">
|
||||
<UniqueIdentifier>{5A3371DC-E827-47CC-901A-F3D91162EFB2}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\echo">
|
||||
<UniqueIdentifier>{A2B9B912-8C03-400F-B271-51EEB4CE6843}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\einst">
|
||||
<UniqueIdentifier>{571B99A3-B6D5-4838-B189-4A038B104B2A}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\excep">
|
||||
<UniqueIdentifier>{F1740406-C1BB-49C7-A602-9DDACBD4ABCA}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\findfunc">
|
||||
<UniqueIdentifier>{58CCECE5-A38B-4C56-8E3F-3E0722393F56}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\impmunge">
|
||||
<UniqueIdentifier>{B3E06AC8-3F78-43C8-B7AC-84546475F960}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\member">
|
||||
<UniqueIdentifier>{CD32F55E-60C5-4ED6-ACCC-4B43E6AC195D}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\opengl">
|
||||
<UniqueIdentifier>{1ABFBA92-4E60-481A-9007-8150D95E072F}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\region">
|
||||
<UniqueIdentifier>{0929821A-9C85-4D74-B969-865D6DA40D2A}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\setdll">
|
||||
<UniqueIdentifier>{9017F1FA-4DCB-44D1-854D-2F14358791F5}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\simple">
|
||||
<UniqueIdentifier>{D9D7E0B0-4E14-473F-AE28-B4A5AF4EB427}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\simple_safe">
|
||||
<UniqueIdentifier>{1F157B88-D9DA-41E3-9B18-FC5600777FB1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\slept">
|
||||
<UniqueIdentifier>{88EFC740-5E28-484E-97FC-E7BBA6D36454}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\syelog">
|
||||
<UniqueIdentifier>{EA900A65-64CA-417B-8DE7-4174C9CB1E5A}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\talloc">
|
||||
<UniqueIdentifier>{7A1582F0-0A25-4A0E-B7E5-14F6E332BDFA}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\traceapi">
|
||||
<UniqueIdentifier>{B99E03FF-320A-4D13-BFB8-674E102E306D}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\tracebld">
|
||||
<UniqueIdentifier>{6169E241-5297-4B63-8D32-407D592EF103}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\tracelnk">
|
||||
<UniqueIdentifier>{EFD841EC-A8B1-4CD6-AC2D-0D286669BA3B}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\tracemem">
|
||||
<UniqueIdentifier>{14F0CAFF-0470-4D28-9083-3FD5656E7B27}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\tracereg">
|
||||
<UniqueIdentifier>{A3CE1454-F707-4A29-B389-2E762651CDD7}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\traceser">
|
||||
<UniqueIdentifier>{D3299D5A-9CE3-45E6-9784-4166606BA70B}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\tracessl">
|
||||
<UniqueIdentifier>{6E1471A7-7B40-4528-8210-64CFC4663258}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\tracetcp">
|
||||
<UniqueIdentifier>{62236214-1B41-4765-9D9D-1E313B4E5AB7}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\tryman">
|
||||
<UniqueIdentifier>{24AC6634-A8C9-430B-8D95-45DEB57070C9}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="samples\withdll">
|
||||
<UniqueIdentifier>{077E7134-5AA3-4151-8313-88106FCBDAB3}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="src">
|
||||
<UniqueIdentifier>{E980771B-0BA5-4B01-947A-B99D33E31E89}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\src\uimports.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\creatwth.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\detours.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\disasm.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\disolarm.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\disolarm64.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\disolia64.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\disolx64.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\disolx86.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\image.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\modules.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tryman\size.cpp">
|
||||
<Filter>samples\tryman</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tracebld\tracebld.cpp">
|
||||
<Filter>samples\tracebld</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tracebld\trcbld.cpp">
|
||||
<Filter>samples\tracebld</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tracelnk\trclnk.cpp">
|
||||
<Filter>samples\tracelnk</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tracemem\trcmem.cpp">
|
||||
<Filter>samples\tracemem</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tracereg\trcreg.cpp">
|
||||
<Filter>samples\tracereg</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\traceser\trcser.cpp">
|
||||
<Filter>samples\traceser</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tracessl\trcssl.cpp">
|
||||
<Filter>samples\tracessl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tracetcp\trctcp.cpp">
|
||||
<Filter>samples\tracetcp</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tryman\tryman.cpp">
|
||||
<Filter>samples\tryman</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\tryman\tstman.cpp">
|
||||
<Filter>samples\tryman</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\withdll\withdll.cpp">
|
||||
<Filter>samples\withdll</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\traceapi\_win32.cpp">
|
||||
<Filter>samples\traceapi</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\slept\dslept.cpp">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\simple\simple.cpp">
|
||||
<Filter>samples\simple</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\simple\sleep5.cpp">
|
||||
<Filter>samples\simple</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\simple_safe\simple_safe.cpp">
|
||||
<Filter>samples\simple_safe</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\simple_safe\sleep5.cpp">
|
||||
<Filter>samples\simple_safe</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\slept\sleepbed.cpp">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\slept\sleepnew.cpp">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\slept\sleepold.cpp">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\slept\slept.cpp">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\syelog\sltest.cpp">
|
||||
<Filter>samples\syelog</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\syelog\sltestp.cpp">
|
||||
<Filter>samples\syelog</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\syelog\syelog.cpp">
|
||||
<Filter>samples\syelog</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\syelog\syelogd.cpp">
|
||||
<Filter>samples\syelog</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\talloc.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll1x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll2x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll3x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll4x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll5x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll6x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll7x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll8x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\talloc\tdll9x.cpp">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\traceapi\testapi.cpp">
|
||||
<Filter>samples\traceapi</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\traceapi\trcapi.cpp">
|
||||
<Filter>samples\traceapi</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\slept\verify.cpp">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\dtest\dtarge.cpp">
|
||||
<Filter>samples\dtest</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\dtest\dtest.cpp">
|
||||
<Filter>samples\dtest</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\dumpe\dumpe.cpp">
|
||||
<Filter>samples\dumpe</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\dumpi\dumpi.cpp">
|
||||
<Filter>samples\dumpi</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\echo\echofx.cpp">
|
||||
<Filter>samples\echo</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\echo\echonul.cpp">
|
||||
<Filter>samples\echo</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\einst\edll1x.cpp">
|
||||
<Filter>samples\einst</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\einst\edll2x.cpp">
|
||||
<Filter>samples\einst</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\einst\edll3x.cpp">
|
||||
<Filter>samples\einst</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\einst\einst.cpp">
|
||||
<Filter>samples\einst</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\excep\excep.cpp">
|
||||
<Filter>samples\excep</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\findfunc\extend.cpp">
|
||||
<Filter>samples\findfunc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\findfunc\findfunc.cpp">
|
||||
<Filter>samples\findfunc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\excep\firstexc.cpp">
|
||||
<Filter>samples\excep</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\impmunge\impmunge.cpp">
|
||||
<Filter>samples\impmunge</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\dynamic_alloc\main.cpp">
|
||||
<Filter>samples\dynamic_alloc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\echo\main.cpp">
|
||||
<Filter>samples\echo</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\member\member.cpp">
|
||||
<Filter>samples\member</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\opengl\ogldet.cpp">
|
||||
<Filter>samples\opengl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\region\region.cpp">
|
||||
<Filter>samples\region</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\setdll\setdll.cpp">
|
||||
<Filter>samples\setdll</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\findfunc\symtest.cpp">
|
||||
<Filter>samples\findfunc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\findfunc\target.cpp">
|
||||
<Filter>samples\findfunc</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\opengl\testogl.cpp">
|
||||
<Filter>samples\opengl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\comeasy\comeasy.cpp">
|
||||
<Filter>samples\comeasy</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\commem\commem.cpp">
|
||||
<Filter>samples\commem</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\cping\cping.cpp">
|
||||
<Filter>samples\cping</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\disas\disas.cpp">
|
||||
<Filter>samples\disas</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\disas\unk.cpp">
|
||||
<Filter>samples\disas</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\comeasy\wrotei.cpp">
|
||||
<Filter>samples\comeasy</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\samples\disas\x86.cpp">
|
||||
<Filter>samples\disas</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\src\detours.h">
|
||||
<Filter>src</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\detver.h">
|
||||
<Filter>src</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\samples\tracebld\tracebld.h">
|
||||
<Filter>samples\tracebld</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\samples\slept\slept.h">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\samples\syelog\syelog.h">
|
||||
<Filter>samples\syelog</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\samples\dtest\dtarge.h">
|
||||
<Filter>samples\dtest</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\samples\excep\firstexc.h">
|
||||
<Filter>samples\excep</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\samples\findfunc\target.h">
|
||||
<Filter>samples\findfunc</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\samples\tracebld\Makefile">
|
||||
<Filter>samples\tracebld</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\tracelnk\Makefile">
|
||||
<Filter>samples\tracelnk</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\tracemem\Makefile">
|
||||
<Filter>samples\tracemem</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\tracereg\Makefile">
|
||||
<Filter>samples\tracereg</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\traceser\Makefile">
|
||||
<Filter>samples\traceser</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\tracessl\Makefile">
|
||||
<Filter>samples\tracessl</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\tracetcp\Makefile">
|
||||
<Filter>samples\tracetcp</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\tryman\Makefile">
|
||||
<Filter>samples\tryman</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\withdll\Makefile">
|
||||
<Filter>samples\withdll</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\tryman\managed.cs">
|
||||
<Filter>samples\tryman</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\simple\Makefile">
|
||||
<Filter>samples\simple</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\simple_safe\Makefile">
|
||||
<Filter>samples\simple_safe</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\slept\Makefile">
|
||||
<Filter>samples\slept</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\syelog\Makefile">
|
||||
<Filter>samples\syelog</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\talloc\Makefile">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\traceapi\Makefile">
|
||||
<Filter>samples\traceapi</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\dumpe\Makefile">
|
||||
<Filter>samples\dumpe</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\dumpi\Makefile">
|
||||
<Filter>samples\dumpi</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\dynamic_alloc\Makefile">
|
||||
<Filter>samples\dynamic_alloc</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\echo\Makefile">
|
||||
<Filter>samples\echo</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\einst\Makefile">
|
||||
<Filter>samples\einst</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\excep\Makefile">
|
||||
<Filter>samples\excep</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\findfunc\Makefile">
|
||||
<Filter>samples\findfunc</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\impmunge\Makefile">
|
||||
<Filter>samples\impmunge</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\member\Makefile">
|
||||
<Filter>samples\member</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\opengl\Makefile">
|
||||
<Filter>samples\opengl</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\region\Makefile">
|
||||
<Filter>samples\region</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\setdll\Makefile">
|
||||
<Filter>samples\setdll</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\dynamic_alloc\x64.asm">
|
||||
<Filter>samples\dynamic_alloc</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\dynamic_alloc\x86.asm">
|
||||
<Filter>samples\dynamic_alloc</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\disas\arm.asm">
|
||||
<Filter>samples\disas</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\common.mak">
|
||||
<Filter>samples</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\cping\cping.dat">
|
||||
<Filter>samples\cping</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\disas\ia64.asm">
|
||||
<Filter>samples\disas</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\comeasy\Makefile">
|
||||
<Filter>samples\comeasy</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\commem\Makefile">
|
||||
<Filter>samples\commem</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\cping\Makefile">
|
||||
<Filter>samples\cping</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\disas\Makefile">
|
||||
<Filter>samples\disas</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\dtest\Makefile">
|
||||
<Filter>samples\dtest</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\Makefile">
|
||||
<Filter>samples</Filter>
|
||||
</None>
|
||||
<None Include="..\samples\disas\x64.asm">
|
||||
<Filter>samples\disas</Filter>
|
||||
</None>
|
||||
<None Include="..\.gitignore" />
|
||||
<None Include="..\LICENSE.md" />
|
||||
<None Include="..\Makefile" />
|
||||
<None Include="..\README.md" />
|
||||
<None Include="..\system.mak" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="..\samples\slept\NORMAL_IA64.TXT">
|
||||
<Filter>samples\slept</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\talloc\NORMAL_IA64.TXT">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\slept\NORMAL_X64.TXT">
|
||||
<Filter>samples\slept</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\talloc\NORMAL_X64.TXT">
|
||||
<Filter>samples\talloc</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\slept\NORMAL_X86.TXT">
|
||||
<Filter>samples\slept</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\dtest\NORMAL_IA64.TXT">
|
||||
<Filter>samples\dtest</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\dtest\NORMAL_X64.TXT">
|
||||
<Filter>samples\dtest</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\dtest\NORMAL_X86.TXT">
|
||||
<Filter>samples\dtest</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\cping\ReadMe.Txt">
|
||||
<Filter>samples\cping</Filter>
|
||||
</Text>
|
||||
<Text Include="..\samples\README.TXT">
|
||||
<Filter>samples</Filter>
|
||||
</Text>
|
||||
<Text Include="..\CREDITS.md" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="..\samples\traceapi\trcapi.rc">
|
||||
<Filter>samples\traceapi</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\tracebld\trcbld.rc">
|
||||
<Filter>samples\tracebld</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\tracelnk\trclnk.rc">
|
||||
<Filter>samples\tracelnk</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\tracemem\trcmem.rc">
|
||||
<Filter>samples\tracemem</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\tracereg\trcreg.rc">
|
||||
<Filter>samples\tracereg</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\traceser\trcser.rc">
|
||||
<Filter>samples\traceser</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\tracessl\trcssl.rc">
|
||||
<Filter>samples\tracessl</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\tracetcp\trctcp.rc">
|
||||
<Filter>samples\tracetcp</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\tryman\tstman.rc">
|
||||
<Filter>samples\tryman</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\slept\dslept.rc">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\simple\simple.rc">
|
||||
<Filter>samples\simple</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\simple_safe\simple_safe.rc">
|
||||
<Filter>samples\simple_safe</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\slept\slept.rc">
|
||||
<Filter>samples\slept</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\dtest\dtarge.rc">
|
||||
<Filter>samples\dtest</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\echo\echofx.rc">
|
||||
<Filter>samples\echo</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\findfunc\extend.rc">
|
||||
<Filter>samples\findfunc</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\opengl\ogldet.rc">
|
||||
<Filter>samples\opengl</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\findfunc\target.rc">
|
||||
<Filter>samples\findfunc</Filter>
|
||||
</ResourceCompile>
|
||||
<ResourceCompile Include="..\samples\comeasy\wrotei.rc">
|
||||
<Filter>samples\comeasy</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Midl Include="..\samples\cping\iping.idl">
|
||||
<Filter>samples\cping</Filter>
|
||||
</Midl>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plutosvg", "plutosvg\plutosvg.vcxproj", "{0FB29240-171B-41E9-B255-95BE753D0EB2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|ARM64 = Debug|ARM64
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|ARM = Release|ARM
|
||||
Release|ARM64 = Release|ARM64
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|x64.Build.0 = Debug|x64
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Debug|x86.Build.0 = Debug|Win32
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|ARM.Build.0 = Release|ARM
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|x64.ActiveCfg = Release|x64
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|x64.Build.0 = Release|x64
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|x86.ActiveCfg = Release|Win32
|
||||
{0FB29240-171B-41E9-B255-95BE753D0EB2}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {2B021D4C-7D18-41AB-BA19-8F6DC4160B22}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
|
||||
<!--
|
||||
作者:mingkuang
|
||||
修改日期:2018-08-14
|
||||
|
||||
|
||||
VC-LTL自动化加载配置,建议你将此文件单独复制到你的工程再使用,该文件能自动识别当前环境是否存在VC-LTL,并且自动应用。
|
||||
|
||||
使用方法:
|
||||
1. 在属性管理器选择所有Release配置,然后右键选择“添加现有属性表”。
|
||||
2. 务必保证所有依赖的静态库也均用VC-LTL重新编译。
|
||||
|
||||
|
||||
VC-LTL默认搜索顺序
|
||||
1. VC-LTL.props所在目录,即 $(MSBuildThisFileDirectory)
|
||||
2. 当前项目根目录,即 $(ProjectDir)VC-LTL
|
||||
3. 前解决方案根目录,即 $(SolutionDir)VC-LTL
|
||||
4. 当前项目父目录,即 $(ProjectDir)..\VC-LTL
|
||||
5. 当前解决方案父目录,即 $(SolutionDir)..\VC-LTL
|
||||
6. 注册表HKEY_CURRENT_USER\Code\VC-LTL@Root
|
||||
|
||||
把VC-LTL放在其中一个位置即可,VC-LTL就能被自动引用。
|
||||
|
||||
如果你对默认搜索顺序不满,你可以修改此文件。你也可以直接指定$(VC_LTL_Root)宏更加任性的去加载VC-LTL。
|
||||
|
||||
-->
|
||||
|
||||
<!--#####################################################################VC-LTL设置#####################################################################-->
|
||||
<PropertyGroup>
|
||||
<!--<DisableAdvancedSupport>true</DisableAdvancedSupport>-->
|
||||
<SupportWinXP>false</SupportWinXP>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<PropertyGroup>
|
||||
<!--Shared.props文件根目录存在VC-LTL?-->
|
||||
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And (Exists('$(MSBuildThisFileDirectory)_msvcrt.h')) ">$(MSBuildThisFileDirectory)</VC_LTL_Root>
|
||||
|
||||
<!--当前项目根目录存在VC-LTL?-->
|
||||
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And (Exists('$(ProjectDir)VC-LTL\_msvcrt.h')) ">$(ProjectDir)VC-LTL</VC_LTL_Root>
|
||||
|
||||
<!--当前解决方案根目录存在VC-LTL?-->
|
||||
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And ('$(SolutionDir)'!='') And (Exists('$(SolutionDir)VC-LTL\_msvcrt.h')) ">$(SolutionDir)VC-LTL</VC_LTL_Root>
|
||||
|
||||
<!--当前项目父目录存在VC-LTL?-->
|
||||
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And (Exists('$(ProjectDir)..\VC-LTL\_msvcrt.h')) ">$(ProjectDir)..\VC-LTL</VC_LTL_Root>
|
||||
|
||||
<!--当前解决方案父目录存在VC-LTL?-->
|
||||
<VC_LTL_Root Condition=" ('$(VC_LTL_Root)'=='') And ('$(SolutionDir)'!='') And (Exists('$(SolutionDir)..\VC-LTL\_msvcrt.h')) ">$(SolutionDir)..\VC-LTL</VC_LTL_Root>
|
||||
|
||||
<!--如果本地工程没有,那么继续尝试通过注册表获取VC-LTL路径,双击Install.cmd可以自动产生此注册表。-->
|
||||
<VC_LTL_Root Condition=" '$(VC_LTL_Root)'=='' ">$(Registry:HKEY_CURRENT_USER\Code\VC-LTL@Root)</VC_LTL_Root>
|
||||
</PropertyGroup>
|
||||
|
||||
<ImportGroup Condition=" '$(VC_LTL_Root)'!=''">
|
||||
<Import Project="$(VC_LTL_Root)\Config\config.props" Condition="Exists('$(VC_LTL_Root)\Config\config.props')"/>
|
||||
|
||||
<!--兼容模式,尝试加载老版本-->
|
||||
<Import Project="$(VC_LTL_Root)\ltlvcrt.props" Condition="(!Exists('$(VC_LTL_Root)\Config\config.props')) And (Exists('$(VC_LTL_Root)\ltlvcrt.props'))"/>
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,198 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{0fb29240-171b-41e9-b255-95be753d0eb2}</ProjectGuid>
|
||||
<RootNamespace>plutosvg</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="VC-LTL.props" Condition="'$(Configuration)|$(Platform)'=='Release|$(Platform)'" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<CompileAs>CompileAsC</CompileAs>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<Lib>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<SuppressStartupBanner>false</SuppressStartupBanner>
|
||||
<CompileAs>CompileAsC</CompileAs>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<Lib>
|
||||
<SuppressStartupBanner>false</SuppressStartupBanner>
|
||||
<OutputFile>$(OutDir)$(TargetName)-$(Platform)$(TargetExt)</OutputFile>
|
||||
</Lib>
|
||||
<Xdcmake>
|
||||
<SuppressStartupBanner>false</SuppressStartupBanner>
|
||||
</Xdcmake>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>false</SuppressStartupBanner>
|
||||
</Bscmake>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<CompileAs>CompileAsC</CompileAs>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<Lib>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<CompileAs>CompileAsC</CompileAs>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<Lib>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
</Lib>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\plutosvg.c" />
|
||||
<ClCompile Include="source\plutovg-blend.c" />
|
||||
<ClCompile Include="source\plutovg-dash.c" />
|
||||
<ClCompile Include="source\plutovg-font.c" />
|
||||
<ClCompile Include="source\plutovg-geometry.c" />
|
||||
<ClCompile Include="source\plutovg-paint.c" />
|
||||
<ClCompile Include="source\plutovg-rle.c" />
|
||||
<ClCompile Include="source\plutovg.c" />
|
||||
<ClCompile Include="source\sw_ft_math.c" />
|
||||
<ClCompile Include="source\sw_ft_raster.c" />
|
||||
<ClCompile Include="source\sw_ft_stroker.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="source\plutosvg.h" />
|
||||
<ClInclude Include="source\plutovg-private.h" />
|
||||
<ClInclude Include="source\plutovg.h" />
|
||||
<ClInclude Include="source\stb_truetype.h" />
|
||||
<ClInclude Include="source\sw_ft_math.h" />
|
||||
<ClInclude Include="source\sw_ft_raster.h" />
|
||||
<ClInclude Include="source\sw_ft_stroker.h" />
|
||||
<ClInclude Include="source\sw_ft_types.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
<ItemGroup>
|
||||
<None Include="VC-LTL.props" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\plutosvg.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\plutovg.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\plutovg-blend.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\plutovg-dash.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\plutovg-font.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\plutovg-geometry.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\plutovg-paint.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\plutovg-rle.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\sw_ft_math.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\sw_ft_raster.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\sw_ft_stroker.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="source\plutosvg.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\plutovg.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\plutovg-private.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\stb_truetype.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\sw_ft_math.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\sw_ft_raster.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\sw_ft_stroker.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\sw_ft_types.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="VC-LTL.props" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||