175 Commits

Author SHA1 Message Date
Anixx
e2758ec376 Support for unthemed taskbar (#2369)
* Support for unthemed taskbar

See this discussion:
https://github.com/Open-Shell/Open-Shell-Menu/discussions/2367

* Refactor color handling in StartMenuDLL
2026-01-24 11:26:25 +01:00
ge0rdi
dd57854da1 Scale custom button image according to current DPI (#2248)
Fixes #2246
2025-12-12 09:09:21 +01:00
ge0rdi
40d8f5b119 AppVeyor: New deployment token 2025-11-30 16:02:35 +01:00
benja2998
4ebeadd949 Remove another '>' symbol (#2243)
Remove another 'z
2025-06-25 17:27:18 +02:00
benja2998
dc1994e713 Remove random '>' symbol in readme (#2223) 2025-05-25 07:23:42 +02:00
ge0rdi
8c713cc5fd Update ARM notice in readme 2025-05-24 08:31:51 +02:00
Matthijs Lavrijsen
58b909037f Add ARM64 support (#641)
* Add ARM64 build configurations to projects

* StartMenu: add ARM64 support

* Add support for IAT hooking on ARM64

* Add ARM64 support to Classic IE

* Add ARM64 support to installer

NB: WiX 3.14.0.3910 or higher is required to create the MSI

* Revert whitespace change

* Separate x86/x64 and ARM64 installers

* Change suffix of ARM64 binaries

* Put also ARM64 MSI to final installer

* Fix sln

* Build some DLLs as ARM64X

These are meant to be loaded to both x64 and ARM64 processes.
We will compile them as ARM64X (when building for ARM64).
That way they will contain both x64 and ARM64 code paths.

https://learn.microsoft.com/en-us/windows/arm/arm64x-pe

* Make sure x64 installer cannot be installed on ARM64

In case if somebody manually tries to install x64 MSI on ARM64.
This is not supported/working scenario.

---------

Co-authored-by: ge0rdi <ge0rdi@users.noreply.github.com>
2025-05-08 10:14:56 +02:00
ge0rdi
146c27ecd2 Fix tray button positioning 2025-03-13 07:11:37 +01:00
ge0rdi
4943938d0f [ExplorerPatcher] Don't shift custom start button on Win11 2025-03-13 07:11:36 +01:00
ge0rdi
d5c561720d [ExplorerPatcher] Fix taskbar texturing
Fixes #2094.
2025-03-13 07:11:26 +01:00
ge0rdi
58d804d22a Remove obsolete links from help
Fixes #2148
2025-03-02 11:18:32 +01:00
vodek3
a280fa92e1 Update StartMenuL10N.ini (#2103) 2025-01-13 07:01:26 +01:00
ge0rdi
f22f10c7d5 Apply taskbar customizations to News and interests
Fixes #676
2025-01-04 16:10:52 +01:00
ge0rdi
faf79de4d5 Fix custom button position on auto-hiding taskbar
Fixes #2067.
2025-01-04 16:10:52 +01:00
ge0rdi
552fbd8296 Set position of tray buttons on primary taskbar only
It seems that secondary taskbars handle try button positioning
correctly. So there is no need for this workaround.

Original change was introduced in 674a486 due to #1232 issue.
2025-01-04 16:10:52 +01:00
ge0rdi
055ac87039 Fix modern settings on Win11 24H2+ (#2091) 2025-01-04 09:47:32 +01:00
Curious Insatiable
d82fadb926 Update StartMenuL10N.ini for all languages (#2086) 2025-01-02 21:02:28 +01:00
ge0rdi
31acb6b092 Remove obsolete product version fallback 2024-12-20 14:11:20 +01:00
ge0rdi
077afd2377 Add missing version info 2024-12-20 14:07:09 +01:00
ge0rdi
680e6eedbb AppVeyor: New deployment token 2024-12-06 07:25:00 +01:00
ge0rdi
f60e2a18cb Fix custom button auto-hiding (#2041) 2024-12-04 19:54:58 +01:00
Curious Insatiable
4e7ca97def Update StartMenu.html (#2036) 2024-12-03 17:15:01 +01:00
ge0rdi
348d8fa54e ModernSettings: Use proper AllSystemSettings file on newer Win11
It seems that AllSystemSettings file name changed since 24H2.
We will look for new file first and then fall-back to original one.

Fixes #2033.
2024-12-03 10:45:41 +01:00
ge0rdi
5809217adc Use WiX Toolset v3.14 2024-12-03 10:24:03 +01:00
ge0rdi
b17d08b7a6 Fix start button/menu misalignment on touch-screen devices
Windows 11 22H2 introduced new touch-optimized taskbar for devices with
touch screen.

It seems that in this mode taskbar window size is bigger than actual
taskbar on screen. There is region defined for the window that covers
actually displayed portion of the window.

We should account for that region (if present) when obtaining taskbar
window dimensions.

More info about how to enable/disable touch taskbar:
https://www.elevenforum.com/t/turn-on-or-off-tablet-optimized-taskbar-in-windows-11.5133/
2024-12-03 10:24:03 +01:00
Curious Insatiable
cc3336ea26 Update StartMenu.html (#1795) 2024-12-03 10:21:50 +01:00
Curious Insatiable
32c75254b9 Update MenuADMX.txt (#1794) 2024-12-03 10:21:16 +01:00
Curious Insatiable
0aa78709e6 Update OpenShellADMX.txt (#1793) 2024-12-03 10:20:49 +01:00
Alex G
040d3d08d3 Update README.md (#1912) 2024-12-03 10:18:43 +01:00
ge0rdi
7770e3b98b Make FixFolderScroll available in all Windows versions (#1887) 2024-03-30 18:11:32 +01:00
ge0rdi
211d12be70 Don't install new Immersive skin on Windows 7
It uses metro colors so it works only on Win8+.

https://github.com/Open-Shell/Open-Shell-Menu/discussions/1866#discussioncomment-8906191
2024-03-25 20:10:34 +01:00
ge0rdi
ccf14504c9 Install new Immersive skin on all systems
There is no need to limit it just to Win10+ as it works well also on
older Windows.

https://github.com/Open-Shell/Open-Shell-Menu/discussions/1866
2024-03-13 19:54:52 +01:00
floppyD
d105c2567e Update pt-BR localization (#1846) 2024-02-18 12:17:09 +01:00
Lixkote
7e83c56d80 Update Start Menu style previews.
Update the old blurry start menu previews to a more modern pixel-perfect ones that resemble the new default immersive skin.
2024-02-17 12:48:58 +01:00
ge0rdi
8359cfcc81 Fix potential division by zero in DetectGrayscaleImage (#1696) 2023-09-13 10:27:02 +02:00
ge0rdi
aac293832c Avoid recursive Start menu initialization (#1675)
It may happen that during `InitStartMenuDLL` execution some component
posts a message that is then intercepted by (still active) `HookInject`
that will call `InitStartMenuDLL` again (and everything will repeat).

To prevent such endless recursion during initialization, we will make
sure that `InitStartMenuDLL` will be executed just once.
2023-08-24 20:55:13 +02:00
ge0rdi
422b0481bc Rename Align to corner of the screen setting to Align to edge of taskbar
The setting was improperly named and evoked that custom button should be
"moved" to the corner of screen even for center aligned taskbar on Windows 11.

What the setting does (and always did) is to align button to the edge of
taskbar (e.g. bottom edge in case of bottom taskbar) instead of centering it.

Hopefully it will be now more clear.
2023-08-24 11:42:26 +02:00
ge0rdi
c517e21465 Display "Searching..." progress always
Commit be8568c that introduced option to disable "See more results" also
changed behavior of "Searching..." item that indicates search in progress.

We will now make sure that the search progress indicator is displayed
always. No matter of options.
2023-08-16 15:39:47 +02:00
ge0rdi
8f1a696e94 Fix search results overlapping (#1648)
Changes in be8568 commit caused that under certain circumstances search
results may overlap "Search the Internet" item.
2023-08-16 15:39:47 +02:00
ge0rdi
4047d726ac Fix checkboxes in settings dialog with custom themes (#1630) 2023-08-16 15:39:47 +02:00
ge0rdi
4b26b4d9e6 Allow negative horizontal/vertical menu offsets (#1629)
Menu offsets were previously applied to s_MainMenuLimits.
Though when deciding where to put start menu (CalculateCorner) we are
now taking into account also position of start button (as since Win11 it
may not be in corner of the screen).

This broke negative menu offsets.

We will fix it by applying menu offsets in CalculateCorner as a last
step once we have determined start menu position.
This should make even more sense than previous approach.
2023-08-16 15:39:47 +02:00
ge0rdi
2f251c4f63 Separate taskbar icon for Open-Shell menu settings dialog
It will be now separate from Explorer's icons in taskbar.
Open-Shell icon will be displayed for better clarity.

https://github.com/Open-Shell/Open-Shell-Menu/issues/31#issuecomment-1656611895
2023-08-16 15:39:47 +02:00
RaNo99
d2985bab88 Update README.md
Works well on windows 11 already.
2023-07-31 18:02:32 +02:00
ge0rdi
f897241a08 Use nlohmann.json NuGet package instead of direct file
This way it will be easier to update to new version (when released).
And it will be also clear that we have dependency on this 3rd party
library.
2023-07-26 12:05:44 +02:00
ge0rdi
8f26cae3f0 Update bug_report.yml 2023-07-26 09:18:10 +02:00
ge0rdi
bbe2aa5d2f Setup: Change symbols package name to OpenShellSymbols_*
This way it will be nicely sorted after main OpenShellSetup_* package in assets page.
2023-07-24 18:37:35 +02:00
ge0rdi
12f1742f71 Show shutdown warning if there are multiple users logged in (#1303) 2023-07-24 18:09:49 +02:00
ge0rdi
931e5e831f Setup: Upload Utility.exe artifact
Utility tool can be used for multiple purposes - like enabling logging,
or manual uninstall.
We will upload and deploy it along other binaries.
2023-07-19 19:45:45 +02:00
ge0rdi
6c6e1515ef Utility: Various fixes
* Add files/keys from more recent Open-Shell versions
* Fix website links
2023-07-19 19:44:50 +02:00
ge0rdi
eb49564282 Update bug_report.yml 2023-07-13 09:13:03 +02:00
ge0rdi
7ea9f0ef1c Update bug_report.yml 2023-07-13 09:11:12 +02:00
ge0rdi
a0c1357f85 Update bug_report.yml 2023-07-13 09:10:04 +02:00
ge0rdi
4f8bb5ac57 Update bug_report.yml 2023-07-13 09:09:25 +02:00
ge0rdi
10f06b2794 Update bug_report.yml 2023-07-13 09:06:14 +02:00
ge0rdi
b2b734f295 Update BUILDME.txt
Update WiX version used for builds.
2023-07-07 09:15:15 +02:00
ge0rdi
9800b03b63 Remove GetDocRelativePath function
Help is always located in the same folder as binary that is using it.
2023-06-10 21:50:46 +02:00
ge0rdi
4377817bef Copy *L10N.ini files to output folder
So that they can be used during debugging.
2023-06-10 21:50:46 +02:00
ge0rdi
8fee436996 Build: Change output paths
All output (and intermediate) files will go to folder outside of source tree.
2023-06-10 21:50:46 +02:00
ge0rdi
9f949dd99b Remove old updating mechanism
We have our own updating already and don't plan to use old one.
There is no need to keep it around.
2023-06-09 17:52:18 +02:00
ge0rdi
714c98130a Simplify project files
Put common build settings into separate props file.
This way it will be much easier to do changes that should affect all
projects in the future.
2023-06-09 17:52:18 +02:00
ge0rdi
fc79fb76c1 Add menu animation fps logging 2023-06-09 14:08:22 +02:00
ge0rdi
9878f02f70 Improve menu animation timing
Use steady_clock with 1ms resolution instead of GetTickCount that has typical resolution 10-16ms.
This should result in more smooth menu animations.
2023-06-09 14:08:22 +02:00
ge0rdi
9c149334fa Properly round font size
Use MulDiv for proper rounding to nearest integer.

Fixes #1547.
2023-05-27 13:33:41 +02:00
ge0rdi
2130047bd6 Prevent potential Explorer crash
Fixes #1523
2023-04-09 19:07:58 +02:00
vodek3
bcc76dd6ab Help: Add custom button tutorial
Based on original Classic Shell tutorial:
http://www.classicshell.net/tutorials/buttontutorial.html
2023-02-07 19:54:54 +01:00
vodek3
e7bbe0e235 Help: Add skinning tutorial
Based on original Classic Shell tutorial:
http://www.classicshell.net/tutorials/skintutorial.html
2023-02-07 19:54:54 +01:00
vodek3
8ffed5651d Help: Change title of help window 2023-02-07 19:54:54 +01:00
vodek3
faa666b54d Skin: Adding the ability to localize Immersive/Immersive7 skins 2023-02-07 19:54:54 +01:00
ge0rdi
42aaaed045 Don't show first-time settings dialog if settings were imported from XML already (#1319) 2023-02-07 16:22:31 +01:00
ge0rdi
4705b35694 Fix Aero button alignment on multiple monitors (#1310)
Shift Aero button slightly when it is positioned in corner of any
monitor (not just primary one).

Moreover this shift should be done only for top/bottom taskbar.
2023-02-03 08:55:26 +01:00
ge0rdi
073035bee9 Override SearchFiles description in ADML
So that it will not depend on whether Windows Search service is running or not.

Fixes #1318
2023-01-31 14:05:18 +01:00
ge0rdi
ab4771e015 Setup: Don't install Classic IE by default
IE was deprecated long ago. There is no need to install Classic IE by
default.
Users will be still able to install it if they want.
2023-01-30 19:34:23 +01:00
ge0rdi
d0ad10429f Skin: Suppress warning regarding use of wildcards in project files
Skin projects are created just once and then they are not supposed to be
changed (from within VS).
So we can mark them as _read only_ projects.

https://learn.microsoft.com/en-us/cpp/build/reference/vcxproj-files-and-wildcards?view=msvc-170
2023-01-29 16:11:38 +01:00
Eli
7f56207fa1 Update README.md
Various formatting & style improvements
2023-01-25 06:55:05 +01:00
ge0rdi
21eea53dfd Properly scale default skin font according to DPI (#1110)
Original fix introduced in 528d15 was not correct.
The problem is that `SystemParametersInfo` uses DPI that current session
started with.

We should use `SystemParametersInfoForDpi` (available since Win10 1607)
that returns properly scaled font size.

Fixes #1110
2023-01-19 08:27:02 +01:00
ge0rdi
2d6fb1f3bb Setup: Recognize also /h and /help parameters (#1278)
Otherwise they will get passed to `msiexec` that will display its help
window that may confuse our users (as they expect our help to be displayed).
2023-01-13 16:42:16 +01:00
ge0rdi
528d15e6c9 Properly scale default skin font according to DPI (#1110)
If skin doesn't specify font to be used (such as `Classic Skin`) we will
use default system font (used for menus).

But we didn't scale the font size according to DPI.
This commit will fix that.

Fixes #1110
2023-01-13 16:42:16 +01:00
ge0rdi
615fe66544 Start menu keyboard hotkey fix for Win11 Insider (#1165)
Windows 11 Insider builds started to register global shell hotkey for
Win key (and Ctrl+Esc) that are used to trigger start menu.

The problem is that it is not (easily) possible to intercept messages
about these hotkeys.

Thus we will unregister them during init and install hook that will
prevent their further registration.

Fixes #1165
2023-01-13 16:42:16 +01:00
bonzibudd
01c1227895 New issue templates
Updated to use YAML format, along with some minor changes and additions.

 - Update format and description for further clarity
2023-01-09 07:03:05 +01:00
Eli Farmer
ecd17cb628 New default Immersive skin for Win10/11 (#538)
Fixes #538
2023-01-06 18:05:01 +01:00
ge0rdi
134b414f0b Use proper modern settings icon (#495)
Fixes #495
2023-01-06 18:05:01 +01:00
ge0rdi
421f55192e Properly scale modern task icons (#518)
Fixes #518
2023-01-06 18:05:01 +01:00
ge0rdi
cf763d3a32 Optimize main icon for size
Bigger icons are stored as PNG.
2023-01-06 18:05:01 +01:00
ge0rdi
4a417cc02c Skin: Common skin project props 2023-01-06 18:05:01 +01:00
Mr-Update
c6924a8b92 Update StartMenuL10N.ini (German) 2023-01-02 20:42:26 +01:00
ge0rdi
344aa60893 Select Apps icon based on Windows version
We now have nicer Apps icons for Win10/11 so we will select proper icon
based on Windows version.
2022-12-30 18:14:22 +01:00
Eli Farmer
7f492f3a9f Modern looking icons for Apps folder on Win10/11. 2022-12-30 18:14:22 +01:00
ge0rdi
1c95f17460 Fixed typo [skip ci] 2022-12-29 10:24:53 +01:00
ge0rdi
674a486c7f Make sure tray buttons are properly positioned when custom start button was created
Fixes #1232
2022-12-28 19:26:22 +01:00
ge0rdi
412accc066 Help: Fix StartMenu registry path 2022-12-28 19:26:22 +01:00
ge0rdi
ba24c72347 Simplify "advanced_boot" command handling
`SHUTDOWN_RESTART_BOOTOPTIONS` should be supported at least since Win8.1
2022-12-28 19:26:22 +01:00
ge0rdi
11dd302689 Properly handle Windows updates during shutdown
Windows updates are applied on shutdown/reboot no matter of flags used
in ExitWindowsEx (or InitiateShutdown).

Windows start menu shutdown code handles updates in special way.
If there are updates prepared and shutdown/reboot is selected it will
use `UpdateSessionOrchestrator` object to dismiss updates and carry out
the command.

We will now do similar thing.

Fixes #1250
2022-12-28 19:26:22 +01:00
ge0rdi
58bc654304 Allow shutdown even if limited admin doesn't have shutdown privilege
Shutdown privilege can be removed from users (in Local Security Policy settings).
This will remove it also from limited admin.

Thus admin will be unable to shutdown machine (because Explorer runs as
limited admin by default).

In such case we will attempt to do silent elevation and proceed with
shutdown using `SystemSettingsAdminFlows.exe` helper.

Fixes #1015
2022-12-28 19:26:22 +01:00
ge0rdi
c5410326fe Use InitiateShutdown instead of ExitWindowsEx for shutdown/restart
Windows start menu uses it that way too.
ExitWindowsEx is also annotated as legacy API in SDK.

We will also put shutdown handling into separate function, so that we
have it handled at one place (will make further changes easier).
2022-12-28 19:26:22 +01:00
ge0rdi
db0e768f81 Proper sleep operation on systems with connected standby enabled
Standard API for sleep (`SetSuspendState`) seems to do nothing on
systems with connected standby.

Windows start menu calls `NtPowerInformation(ScreenOff)` on such systems instead.
This is implemented in `shutdownux!ShutdownViewModel::_InitiatePowerTransition` function.

Fixes #719
2022-12-28 19:26:22 +01:00
ge0rdi
23a1dc7e07 Added new option "Require Alt key for accelerators"
With the option enabled keyboard accelerators will be triggered only if Alt key
is pressed as well.

This is how typical Windows keyboard accelerators work, to avoid
confusion with regular key presses.

Fixes #117
2022-12-28 19:26:22 +01:00
ge0rdi
a7b6a80799 Added new option "Enable accelerators"
It will control whether keyboard accelerators are used in start menu.

Disabling it can be helpful for people that tend to hit some accelerator by mistake.

Fixes #447
2022-12-28 19:26:22 +01:00
ge0rdi
fad20ba4c7 Activate start menu window only after search focus was set
Start menu window was activated early in the process of its creation.
This means it was receiving input before focus was set to search bar.
And that may have lead to unwanted use of keyboard accelerators.

We need to make sure that window is activated (receives input) only once
focus was set to search box.

Fixes #1068
2022-12-28 19:26:22 +01:00
ge0rdi
2a7fc0034c ModernSettings: Remove duplicates
Windows started to add newer version of settings to settings description
file. These have the same description as older settings, but use
different parameters.

Unfortunately old settings are still present.
This causes our modern settings folder to contain duplicates.
And also we tend to use older setting definitions that no longer work
properly.

Thus we will de-duplicate parsed settings and try to keep newer ones
(that should work better).
New settings tend to have numeric suffix, so we will keep those with
biggest suffix.

Fixes #1031
2022-12-28 19:26:22 +01:00
ge0rdi
658981adf7 ModernSettings: Improve indirect string loading
Defender settings on Win11 use indirect strings in form:
`@{Microsoft.SecHealthUI_8wekyb3d8bbwe?ms-resource://Microsoft.SecHealthUI/Resources/DisplayName}`

`SHLoadIndirectString` is unable to load such indirect string, because it expects full
package name (instead of package family name).

In such case we will convert package family name to full name and try again.
2022-12-28 19:26:22 +01:00
ge0rdi
b6f5402220 Fix taskbar texture on Windows 11
- Taskbar is now handled by taskbar.dll, so we need to hook APIs there
  - TaskList window (MSTaskListWClass) is not visible so we need to
    hook messages of its parent TaskBand window (MSTaskSwWClass)

Fixes #1230
2022-12-28 19:26:22 +01:00
ge0rdi
de0d6cff40 Show start menu next to taskbar by default
This changes default value of `Show next to taskbar (when the taskbar is vertical)` setting to `enabled`.

It makes more sense to have menu next to vertical taskbar than to
overlap it (and hide taskbar buttons).

Windows start menu does it like that too.
2022-12-28 19:26:22 +01:00
ge0rdi
881787bed6 Proper start menu alignment in case of vertical taskbar Windows 11
Fixes #1231
2022-12-28 19:26:22 +01:00
ge0rdi
e25b656275 Use VS2022
Note that `_ATL_MODULES` define is now needed for compatibility with C++
conformance mode (`/permissive-`).
More details here:
https://developercommunity.visualstudio.com/t/Crash-in-ATL-CEnumerator::MoveNext-after/10116823
2022-12-28 19:26:22 +01:00
Eli Farmer
a784b6fdb4 Remove unnecessary Localization folder
Folder is not used anywhere in build, instead Src/Localization is used.
2022-12-24 17:35:59 +01:00
Eli Farmer
bfb8ef31fe Rename Menu.html to StartMenu.html
This should fix the initial error message upon launching the help dialog.
Fixes #524

fix

 - Rename Menu.html in other languages
2022-12-24 17:35:59 +01:00
Eli Farmer
4e4da93b6c Updates to Help
- New help style
 - Grammar fixes/slight reformatting
 - Windows 8 -> 8+
 - Links now go to Github or Classic shell mirror
 - Updated Readme and EULA style to match
 Fixes #1173, #880
2022-12-24 17:35:59 +01:00
ge0rdi
b0c1d9a229 Fix for potential crash introduced in 1b013c3
Fixes #1245
2022-12-14 16:10:10 +01:00
Eli Farmer
ac80080f90 Update README.md
- General grammar/format/convention improvements
 - Switch to shields.io for gitter badge and change color of Discord badge
2022-12-08 15:23:34 +01:00
bonzibudd
d28c8e512a New icons and installer artwork
This adds the new artwork for the main icon and installer screens.
Addresses #31.

Update classic button thumbnail

Improve setup banner icon

Fix web.ico size

New installer art

Fix dialog2
2022-12-07 11:58:37 +01:00
bonzibudd
be57a43589 Format ReadMe icon 2022-12-07 11:58:37 +01:00
ge0rdi
0465ac9c1b Use Segoe Fluent Icons font for modern settings icons on Win11
It seems that Windows 11 prefers `Segoe Fluent Icons` over `Segoe MDL2 Assets` font.
https://learn.microsoft.com/en-us/windows/apps/design/style/segoe-fluent-icons-font

Most of settings defined in `AllSystemSettings_{253E530E-387D-4BC2-959D-E6F86122E5F2}.xml` now refer to the new font.
2022-12-06 19:17:18 +01:00
ge0rdi
77d2d3a01d Don't show Windows Shell Experience Host in list of frequent programs
It is not a program that user will use explicitly.
No need to show it in the list even if Windows tracks it as frequent
program for some reason.

Fixes #1164
2022-12-06 19:17:18 +01:00
ge0rdi
704459225b Properly handle automatically hiding taskbar on multi-monitor setup
When taskbar is hidden its window is moved off the screen (except for
few pixels at border). It may happen that the taskbar window actually
spans to another monitor (though still not visible).

MonitorFromWindow API may thus return different monitor handle than the
one visible taskbar is on.

We will use GetTaskbarPosition function that correctly identifies taskbar's
monitor by checking rectangle of visible taskbar.

Fixes #908
2022-12-06 19:17:18 +01:00
ge0rdi
04770c403d Windows 11 start menu button support
- handling of `Taskbar alignment` setting (left/center)
  - start menu position is based on position of start button
  - mouse clicks to original button now work properly (without triggering original menu)
  - custom button is properly positioned
  - Win+X works properly
2022-12-06 19:17:18 +01:00
ge0rdi
f42980e090 Make debugging more skin friendly
Debug StartMenuDLL used to not find skins when put to Open-Shell
installation folder.

Now it will try to look for skins in default location (Skins folder in
the same folder as DLL) and use alternative (Skins folder one level up)
if not present.
2022-12-06 19:17:18 +01:00
ge0rdi
7ad33f509e Fix skin options default values
Multi-string settings have to be terminated by new line.
Otherwise there may be some garbage (following the string)
stored in registry.
2022-12-06 19:17:18 +01:00
ge0rdi
1b013c3590 Don't track usage of Open-Shell modern settings folder
This way `Open-Shell Modern Settings` folder won't appear in File
Explorer's frequent list.

Fixes #744.
2022-12-06 19:17:18 +01:00
ge0rdi
cef27bdfa0 Use more convenient format for color settings
We are storing color settings in BBGGRR format (for historical reasons).
This may be confusing for people that are used to (more widely used) RRGGBB format.

Thus we will present color settings in RRGGBB format when editing.

We will still use BBGGRR format for those settings internally. To
maintain backward compatibility with existing settings stored in
registry/xml.

Also setting descriptions now contain hint about expected color format.
This way it should be more clear what values `Open-Shell` expects.

Fixes #82, #1141.
2022-12-06 19:17:18 +01:00
ge0rdi
f7334882c3 Fix image rendering on Win7
Fixes #1023 #90.
2022-12-06 19:17:18 +01:00
ge0rdi
9397d58986 Show Open-Shell version in start context menu
Fixes #888.
2022-12-06 19:17:18 +01:00
ge0rdi
7f6b7229f6 Get proper branding string on Windows 11
Based on info from https://dennisbabkin.com/blog/?t=how-to-tell-the-real-version-of-windows-your-app-is-running-on#ver_string .

Fixes #878, #960, #1063.
2022-12-06 19:17:18 +01:00
ge0rdi
a0a03760cd Build: Fix source indexing
x64 version of pdbstr doesn't work (because of missing __CxxFrameHandler4 on Windows Server 2019).
Fortunately it seems that x86 version works well, so we can use that one.
2022-12-06 19:17:18 +01:00
among-us-official
9606e11e0e Restore Main_no_icons2 behavior for inline subitems (#1172) 2022-10-15 10:53:16 +02:00
ge0rdi
7f04293361 Update README.md
Download link should point to latest official release.
2022-10-14 20:02:19 +02:00
ge0rdi
e6b33a70e4 Add -reloadsettings command line switch
It will force Open-Shell to reload settings from registry.

Fixes #1157.
2022-10-08 07:48:50 +02:00
ge0rdi
179a59ac1b Revert "Auto-detect when setting is back to default value"
This reverts commit 998d83c15c.

This change was wrong and it shouldn't get merged in first place.
See https://github.com/Open-Shell/Open-Shell-Menu/pull/829#issuecomment-907667829 for further explanation.

Fixes #1135.
2022-09-12 16:17:06 +02:00
ge0rdi
2a5ed14599 Fix 'Highlight modified settings' option tooltip 2022-09-12 16:17:06 +02:00
ge0rdi
1cc5d2eb53 Fix broken menu sorting
It was broken in bb26cec commit.

Fixes #1111
2022-09-09 17:07:29 +02:00
coddec
687e50914f Update appveyor.yml
Change secure,hashed auth token as suggested by @ge0rdi
2022-09-08 13:31:28 +10:00
floppyD
a165ba38a6 Update StartMenuL10N.ini (#1125)
That's how it's called on Windows. "Configurações do computador" also makes the start menu way larger than it should be.
2022-09-01 19:27:25 -04:00
ge0rdi
6b7cfc5ab2 Update: Remove unused code for checking nightly build on AppVeyor
We have nightly builds on Github already.
2022-08-21 22:51:18 +02:00
ge0rdi
1f2c3d43a6 Update: Get nightly (prerelease) builds from Github
We are now deploying official builds from master to Github releases page
(as Prerelease).
So we should get these build from there.

This is also related to AppVeyor's rather tight download limits that
make it quite challenge to obtain nightly builds.
2022-08-21 22:51:18 +02:00
ge0rdi
5bee5ae143 Update JSON library to latest version (3.11.2) 2022-08-21 22:51:18 +02:00
ge0rdi
f01c126b36 AppVeyor: Deploy only if build was done under official account 2022-08-21 22:47:52 +02:00
ge0rdi
3d1fa11973 Update README.md
- Updated "release" badge to point to latest release version directly
- Removed "Latest nightly build" link as nightly builds are now part of standard Releases page
2022-08-21 22:20:32 +02:00
ge0rdi
93245dc4d6 AppVeyor: deploy build to GitHub releases page 2022-08-21 14:01:21 +02:00
ge0rdi
86447299b1 AppVeyor: build only from master
We want to do official builds from master only.
PR builds should be not affected by this.
2022-08-21 14:00:12 +02:00
thisismy-github
64259f73e8 Various single-click option fixes
Fixed single-click option ignoring split arrows
Fixed Apps folder being clickable
2022-08-13 16:00:26 -04:00
thisismy-github
8031739110 Added option to customize Pinned folder location
Items can be pinned to directories that require administative privileges
(such as Open-Shell's default installation directory), so long as users
take ownership of the pinned folder. Also adds a command to Open-Shell's
context menu that opens the current pinned folder.

Adds general support for directory-based settings by creating a new
setting type called TYPE_DIRECTORY which uses a new bool added to
BrowseLinkHelper, called bFoldersOnly. START_MENU_PINNED_ROOT
has been removed, and all instances of both it and BrowseLinkHelper
have been adjusted accordingly. To create your own directory-based
settings, use CSetting::TYPE_DIRECTORY. Empty directory paths are
reset to their default value as they can cause unexpected behavior.
2022-08-13 16:00:26 -04:00
thisismy-github
27e5c2bc74 Added option to open folders to their true path
Adds a new function called GetFakeFolder which attempts to find and get
the target.lnk file from a fake folder (what Open-Shell uses to pin
folders). If detected, InvokeCommand is swapped for a ShellExecute call
to the target shortcut. Fixes #555, #653, and by extension, #691.
2022-08-13 16:00:26 -04:00
thisismy-github
bb26cec0ec Added option to single-expand any Win7 style item
Expands the "display as a list of drives" option from This PC to work on
almost any item in the Windows 7 style. Incompatible items have a new
setting called ITEM_NODRIVES which blocks the option from appearing.
This PC still uses the original "list of drives" text, while other items
use "list of links" instead. Sorting has been updated to account for
this option by adding a property called bFolderLink which marks any
folder, even if it is not explicitly expandable.
2022-08-13 16:00:26 -04:00
thisismy-github
ef663d2051 Added option to set custom commands for controls
Includes a unique option for each control and supports environment
variables.
2022-08-13 16:00:26 -04:00
thisismy-github
be8568ce00 Added option to hide "see more results" in search
Hides the item in both start menu styles and adjusts search height to
ensure the empty space is used. Partially fixes #660, but currently
does not honor group policy settings.
2022-08-13 16:00:26 -04:00
thisismy-github
5399e3ad8c Added option to use a custom search hint
If set, intercepts the search hint's DrawText function and swaps out the
default text for user-defined text. Leaving the text blank results in an
empty search box.
2022-08-13 16:00:26 -04:00
thisismy-github
68379f4098 Fixed bug between XML files and active edit boxes
When loading XML files, settings with active edit boxes open will not be
adjusted. This adds an additional tab-reload before the load begins to
forcibly close any active edit boxes.
2022-08-13 16:00:26 -04:00
thisismy-github
daa1d96f12 Added option to never highlight modified settings
Prevents settings from appearing in bold. Does not change the helper
text at the bottom of the window.
2022-08-13 16:00:26 -04:00
thisismy-github
998d83c15c Auto-detect when setting is back to default value
Intercepts *most* instances of FLAG_DEFAULT getting set, including
when XML files are loaded and when Open-Shell starts, adding
if-statements to those spots to check if a new value is actually
different from the setting's default value. Ensures more consistency
behind the scenes and gets rid of inaccurate bold highlights.
2022-08-13 16:00:26 -04:00
thisismy-github
0cb43dd17c Added option to always single-click folders
Opens pinned items on both sides of the start menu in just one click,
while preserving hover functionality. Ignores the All Programs button
for now as the All Programs folder is rarely accessed and this option
can obstruct its use, especially for the inline menu style. Fixes #692.
2022-08-13 16:00:26 -04:00
among-us-official
b89aaed785 Fix corrupted icons in second column (#1088)
When using skin with a different second column icon size, all of the
icons in it would become blank.

Because m_bTwoColumns is set after AddStandardItems, it is still false
in the column break check. As a workaround, use the value it's assigned
later in InitWindowInternal instead.

Fix Open-Shell/Open-Shell-Menu#980
2022-08-11 16:46:12 -04:00
Let's All Love Lain
47cc2b2304 Replacing 'scopeList' contiguous placement of elements in memory more efficient and std::make_unique c++17
Signed-off-by: germanaizek <GermanAizek@yandex.ru>
2022-05-12 20:54:42 +02:00
germanaizek
a20215d9da Replace 'push*' -> 'emplace*' if possible and use std::move() 2022-05-12 20:54:42 +02:00
germanaizek
4f362760b6 Remove unused vars, usage '= default;' and fixed lower scope 2022-05-12 20:54:42 +02:00
Ibuprophen
2e43d4c7a1 Update README.md 2022-05-10 11:05:42 -04:00
bonzibudd
4b2688245f Don't change Taskbar text color/texture until relaunch
This will accurately represent when these changes are able to take effect. Currently, the settings don't make any immediate changes or are broken when applied, and this should fix that.

Fixes #602.
2021-06-08 19:51:04 +02:00
bonzibudd
082f85a4e2 Scale menu icons up to 250% (240 DPI)
This should allow for icons in the menu to scale better for higher DPI displays. Configurations above 250% will retain the sizes for 240DPI.
2021-05-10 08:11:18 +02:00
bonzibudd
0ce76c9c36 Skin: Tweak programs icon arrows 2021-05-06 08:23:04 +02:00
bonzibudd
6e71d7c414 Skin: Add "Back" arrow to programs button
This can help distinguish when the programs list has been activated.
2021-05-06 08:23:04 +02:00
bonzibudd
84909cf397 Skin: Retain list padding when using icon frames
This will make the padding of list items stay the same regardless of if icon frames are enabled or not. List padding shouldn't change with the icon frame option because lists don't contain icon frames.
2021-05-06 08:23:04 +02:00
bonzibudd
fc290d5a6a Skin: Remove extra "Submenu_opacity" 2021-05-06 08:23:04 +02:00
bonzibudd
ebd530f652 Skin: Better scaling of icon frames
This will make the space around icon frames scale appropriately.
2021-05-06 08:23:04 +02:00
bonzibudd
e50c5f73d7 "About this skin" text should link to Open-Shell 2021-05-06 08:23:04 +02:00
bonzibudd
1db0006c96 Fix right-hand padding with Icon frames enabled
This should improve the right-hand spacing when icon frames are enabled, and right-hand icons are disabled. There shouldn't be any extra icon/text padding for Main2 when icons aren't enabled.
2021-05-04 11:26:29 +02:00
GenesisToxical
7d0a9df1c3 Quick Access to Taskbar Tab - SettingsUI.cpp
Easy access to modify Taskbar options without having to activate all other tabs.
2021-04-03 10:13:01 +02:00
Anis Errais
8e1b4e35a3 Added options for moving the start menu and showing the start menu at the edge of working area instead of against the taskbar 2021-02-09 20:57:48 +01:00
Xenhat
859afc63d3 Label topmost discussion link correctly as Gitter 2020-12-27 10:50:55 -05:00
Xenhat
ee6db35b34 Update README.md
Add link to Discussions section and Discord for questions
2020-12-27 10:49:38 -05:00
ge0rdi
283c0fce03 Fix Shutdown item text
To be consistent with text in Windows.

Fixes #501.
2020-10-23 18:07:39 +02:00
ge0rdi
ac5e69f1a0 Use modern Help icon in Classic/Two column menu style
Fixes #506.
2020-10-23 18:07:38 +02:00
ge0rdi
b2df22104e Setup: Fix installer warning on Windows 7
`Warning 1946. Property 'System.AppUserModel.ToastActivatorCLSID' for shortcut 'Open-Shell Update.lnk' could not be set.`

Windows 7 doesn't recognize `System.AppUserModel.ToastActivatorCLSID`
name so we have to use GUID directly.

https://docs.microsoft.com/en-us/troubleshoot/windows/win32/warning-1946-when-you-install-installer-package

Fixes #507.
2020-10-23 18:07:37 +02:00
ge0rdi
c88f028f3e Show Settings above Control Panel by default
(Modern) Settings are more and more important in Windows 10,
so it makes sense to show them above Control Panel.

This changes only defaults, users will be still able to order start menu
items as they like.

Fixes #23.
2020-10-23 10:13:57 +02:00
ge0rdi
312bfd99d5 Update settings search category names
To make it consistent with the rest of product:

`Settings` category is renamed to `Control Panel`
`Modern Settings` category is renamed to `Settings`
2020-10-23 10:13:57 +02:00
ge0rdi
ca576a0224 Display Modern settings search results above Control Panel ones
(Modern) Settings are just more and more important in Windows 10.
So it makes sense to show their search results first.

Fixes #481.
2020-10-23 10:13:57 +02:00
ge0rdi
a5f35b133f Improve compatibility with WindowBlinds
`Open-Shell` hooks `SHFillRectClr` (ordinal 197) API from `shlwapi.dll`
in order to be able to customize taskbar.

The API is hooked even if taskbar customization is disabled in `Open-Shell` (default).

`WindowBlinds` hooks the same API so this is causing clashes between
both programs.
In fact `Open-Shell` hooks later which makes `WindowBlinds` hook to be
completely ignored.

The solution would be to hook only if taskbar customization is enabled.

This way `Open-Shell` should be more compatible with other customization
tools in default state.

Fixes #433.
2020-10-23 10:13:57 +02:00
ge0rdi
f197c9f43d Don't show jump list for Settings application
It reports just one category with unsupported type, thus jump-list will be
empty.

Fixes #487.
2020-10-23 10:13:57 +02:00
446 changed files with 7855 additions and 40595 deletions

View File

@@ -1,31 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Version:**
- Open-Shell: [e.g. 4.4.131]
- OS: [e.g. Windows 10 1903]
**Additional context**
Add any other context about the problem here.

61
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,61 @@
name: Bug report
description: Create a report to help us improve
labels: Bug
body:
- type: markdown
attributes:
value: |
**Please, make sure you are using [latest](https://github.com/Open-Shell/Open-Shell-Menu/releases) `Open-Shell` build before reporting a bug.**
Especially on `Windows 11` you should use 4.4.190 (or newer).
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is. Screenshots are also encouraged.
placeholder: Please use English for reports and screenshots to allow maintainers to easily understand the issue.
validations:
required: true
- type: dropdown
attributes:
label: Area of issue
description: What component(s) of Open-Shell does this involve? Select all that apply.
multiple: true
options:
- Start menu
- Taskbar
- Windows Explorer
- Internet Explorer
- Installation/Other
validations:
required: true
- type: textarea
attributes:
label: To reproduce
description: Steps to reproduce the behavior
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
attributes:
label: Expected behavior
placeholder: What did you expect to happen?
- type: input
attributes:
label: Open-Shell version
placeholder: e.g. 4.4.170
validations:
required: true
- type: input
attributes:
label: Windows version
placeholder: e.g. Windows 10 22H2
validations:
required: true
- type: textarea
attributes:
label: Additional context
description: Add any other context about the problem here.

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Github Discussions
url: https://github.com/Open-Shell/Open-Shell-Menu/discussions
about: Please ask and answer questions here.

View File

@@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: Enhancement/Feature Request
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -0,0 +1,39 @@
name: Feature request
description: Suggest an idea for this project
labels: Enhancement/Feature Request
body:
- type: textarea
attributes:
label: Is your feature request related to a problem? Please describe.
description: A clear and concise description of what the problem is.
placeholder: Ex. I'm always frustrated when [...]
validations:
required: true
- type: textarea
attributes:
label: Describe the solution you'd like
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: dropdown
attributes:
label: Area of issue
description: What component(s) of Open-Shell does this involve? Select all that apply.
multiple: true
options:
- Start menu
- Taskbar
- Windows Explorer
- Internet Explorer
- Installation/Other
validations:
required: true
- type: textarea
attributes:
label: Alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered.
- type: textarea
attributes:
label: Additional context
description: Add any other context or screenshots about the feature request here.

5
.gitignore vendored
View File

@@ -20,12 +20,15 @@
# Build results
[Dd]ebug/
[Dd]ebug64/
[Dd]ebugARM64/
[Dd]ebugPublic/
[Rr]elease/
[Rr]elease64/
[Rr]eleaseARM64/
[Rr]eleases/
x64/
x86/
ARM64/
bld/
[Bb]in/
[Oo]bj/
@@ -68,6 +71,7 @@ StyleCopReport.xml
*_i.c
*_p.c
*_i.h
*_h.h
*.ilk
*.meta
*.obj
@@ -348,7 +352,6 @@ ASALocalRun/
*.PVS-Studio.*
# Classic-Shell specific ignores
Src/StartMenu/Skins/
Src/Setup/Output/
Src/Setup/Final/
Src/Setup/Temp/

View File

@@ -1,437 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Classic Explorer</title>
<style type="text/css">
h1 {
color: #0070c0;
font-family: "Times New Roman",Times,serif;
}
body {
font-family: Arial,Helvetica,sans-serif;
}
</style></head><body>
<h1><a target="_blank" href="http://www.classicshell.net/"><img src="images/OpenShell.png" style="border: 0px solid ; width: 64px; height: 64px;" alt="Open-Shell website" title="Open-Shell website"></a>&nbsp; Classic Explorer</h1><span style="font-style: italic; color: rgb(0, 112, 192); font-weight: bold;"></span><br>
<span style="font-weight: bold; color: rgb(79, 129, 189);">Classic
Explorer</span> is a plugin for Windows Explorer that:
<ul>
<li>Adds a toolbar to Explorer for some common operations (Go
to parent folder, Cut, Copy, Paste, Delete, Properties, Email). The toolbar is fully customizable</li>
<li>Replaces the copy UI in Windows 7 with the more user-friendly &#8220;classic&#8221; version similar to Windows XP</li>
<li>Handles Alt+Enter in the folder panel of Windows Explorer and shows the properties of the selected folder</li>
<li>Has options for customizing the folder panel to look more like the Windows XP version or to not fade the expand buttons</li>
<li>Can show the free disk space and the total file size in the status bar</li>
<li>Can disable the breadcrumbs in the address bar</li>
<li>Fixes
a long list of features that are broken in Windows 7 &#8211; missing icon
overlay for shared folders, the jumping folders in the navigation pane,
missing sorting headers in list view, and more<br>
</li>
</ul><br>
<h1><a name="copy"></a>New copy UI (Windows 7 only)<br>
</h1>
In Vista when you copy files and there is a conflict you are presented
with this:<br>
<br>
<img src="images/before.png" style="width: 460px; height: 472px;" alt="Before" title="Before"><br>
<p>What&#8217;s wrong with it?</p>
<p>Well, for
starters it is half a screen full of text that you have to read. Also
it is not immediately clear what parts of it are clickable. You have to
move the mouse around to discover the UI like in a <a target="_blank" href="http://en.wikipedia.org/wiki/Day_of_the_Tentacle">Lucas Arts
adventure game</a>. And finally the keyboard usability is awful. To
tell it
<span style="font-weight: bold; color: rgb(79, 129, 189);">&#8220;yes, I know what I&#8217;m doing, I want to overwrite all files&#8221;</span> you have to
press <strong><span style="color: rgb(79, 129, 189);">Alt+D, up, up, up, Space</span></strong>! It is harder than performing the <a target="_blank" href="http://www.youtube.com/watch?v=AErqKebdqjU&amp;feature=fvw">Akuma
Kara Demon move</a> in Street Fighter 3. There is a time and a place
for
that stuff and copying files is not it.</p>
<p>The Classic Explorer plugin brings back the simpler dialog box from Windows XP:<br>
</p>
<p><img src="images/after.png" style="width: 438px; height: 251px;" alt="After" title="After"><br>
</p>
<p>It
is immediately clear what is clickable <span style="font-style: italic;">(clue &#8211; the buttons at the
bottom)</span>, there is easy keyboard navigation (press <span style="font-weight: bold; color: rgb(79, 129, 189);">Y</span> for &#8220;Yes&#8221;, <span style="font-weight: bold; color: rgb(79, 129, 189);">A</span> to
copy all files) and you can still see which file is newer and which is
larger. And of course just like in Windows XP, holding down <strong style="color: rgb(79, 129, 189);">Shift</strong> while clicking on the No button means "No to All" (or just press <strong style="color: rgb(79, 129, 189);">Shift+N</strong>).<br>
</p>
<p>If you click
on <span style="text-decoration: underline;">More&#8230;</span> you will get
the original dialog from Windows. From there you
will see all the details and you&#8217;ll get an extra option to &#8220;Copy, but
keep both files&#8221;.</p>
<p><span style="font-weight: bold;">Important Note:</span> Only the UI is replaced. The underlying system that does the actual copying is not affected.<br>
</p>
<p><br>
</p>
<h1><a name="alt_enter"></a>Alt+Enter in the folder panel</h1>
Alt+Enter is
universal shortcut across Windows to bring up the properties of the
selection. But newer versions of Windows it doesn&#8217;t work in the left
panel that shows the folders. It works fine on the right where the
files are. This is broken compared to Windows XP where Alt+Enter works
in both places.
<p>To solve the
problem, the Classic Explorer plugin detects when you press Alt+Enter
and shows the properties for the currently selected folder.<br>
</p>
<p><br>
</p>
<h1><a name="toolbar"></a>Toolbar for Windows Explorer</h1>
Windows
Explorer in Vista doesn&#8217;t have a toolbar like the one in Windows XP. If
you want to go to the parent folder you have to use the breadcrumbs
bar. If you want to copy or delete a file with the mouse you have to
right-click and look for the Delete command. The right-click menu gets
bigger and bigger the more shell extensions you have installed, and
finding the right command can take a while.<br>
<p>To solve the problem, the Classic Explorer plugin adds a new toolbar:<br>
</p>
&nbsp;<img src="images/toolbar.png" alt="Explorer Toolbar" title="Explorer Toolbar"><br>
<br>
The available button are: Go Up, Cut, Copy, Paste, Delete, Properties,
Email, Settings. More buttons can be added from the Settings dialog.<br>
<br>
<span style="font-weight: bold; color: rgb(0, 112, 192);">Hints:</span><br>
&nbsp;&nbsp;&nbsp; - Hold the <strong>Control key</strong> when clicking the Up button to open the parent folder in a new Explorer window.<br>
&nbsp;&nbsp;&nbsp; - Hold the <strong>Shift key</strong> when clicking the Delete button to permanently delete a file<br>
<br>
The new toolbar doesn&#8217;t show up in Explorer automatically after
installation. You have to do a few things before you can use it:<br>
<ol style="font-family: Helvetica,Arial,sans-serif;">
<li>Open a new Windows Explorer window (Win key+E)</li>
<li>Turn on the menu in Explorer &#8211; Go to Tools (Alt+T), Folder
Options, the View tab, and make sure &#8220;Always show menus&#8221; is checked.</li>
<li>Right click on the menu bar and select &#8220;Classic Explorer Bar&#8221; to
show the toolbar.</li>
<li>If that option is not available (you only see &#8220;Lock the
Toolbars&#8221;) you may have to enable the plugin from Internet Explorer.
Run IE, right click on its toolbar and select &#8220;Classic Explorer Bar&#8221;.
It will ask you if you want to enable this add-on. Select &#8220;Enable&#8221;,
then repeat steps 1 through 3 again.</li>
<li>If even then you don't see the toolbar, maybe the browser
extensions are disabled on your system. This is usually the default for
servers. Open the "Internet Options", go to the "Advanced" tab, and check
the option "Enable third-party browser extensions".<br>
</li>
</ol><br>
<h1><a name="statusbar"></a>Status bar<br>
</h1>
Classic Explorer restores the original Explorer status bar that shows the free disk space and the size of the selected files:<br>
<br>
<img src="images/statusbar.png" style="width: 507px; height: 26px;" alt="File size in status bar" title="File size in status bar"><br>
<br>
Unlike the built-in status bar, the selection size is shown even if
more than 100 files are selected. When no files are selected the total
size of all files in the folder is shown.<br>
<br><strong>Windows 7 note:</strong> Classic Explorer enhances the
default status bar instead of replacing it. To see it, you have to turn
it on first from the View menu.
The status bar is different from the blue
Details Pane you see at the bottom of Explorer. You can turn off the
Details Pane from the Organize menu to save space. Also there is a bug
in the Windows 7 Explorer that sometimes doesn't show any text in the
status bar. Press <strong style="color: rgb(0, 112, 192);">F5</strong> to refresh the view and get the status text.<br>
<br><strong>Windows 8 note:</strong> Classic Explorer adds its own
status bar. You should hide the default status bar to save space.
Select the View tab in the ribbon, then click on Options. Select the
View tab in the options. Locate the checkbox "Show status bar" and
uncheck it.
<br>
<br>
<h1><a name="settings"></a>Settings</h1>You can access the settings of Classic Explorer from the toolbar or from the start menu:<br>
<img style="width: 682px; height: 465px;" alt="" src="images/explorer_settings.png"><br>
<br>You can choose from seeing only the basic settings, or all
available settings. Hover over each setting to see a description of
what it's for. Type in the search box to find a setting by name.<br>
Every setting has a default value. The default value can be constant,
or it may depend on the current system settings. Once you edit a
setting it becomes "modified" and is shown in bold. To revert to the
default value, right-click on the setting.<br>
<br>You can save the settings to an XML file, and later load them back.
Press the <span style="font-weight: bold;">Backup</span> button to access these functions. From there you can
also reset all settings to their default value.<br>
<br>
Press OK to store your settings. Most of the settings will be applied
the next time you open a new Explorer window. Small number of settings
will require a log off before you can see the change.<br>
<br>
<span style="font-weight: bold;">Note:</span> All Settings windows are resizable. Resize them and place them where you want them to be. They will remember the new position.<br>
<br>
Here's one example of what can be customized:<br>
<img src="images/titlebar.png" alt="Title bar tweaks" title="Title bar tweaks"><br>
<br>
Click on the <span style="font-weight: bold;">Toolbar Buttons</span> tab to customize the toolbar:<br>
<img style="width: 682px; height: 465px;" alt="" src="images/toolbar_settings.png"><br>
<br>The column on the left shows the current buttons in the toolbar,
and the column on the right lists the buttons you can add to the
toolbar. You can drag and drop buttons from the right column to the
left. You
can rearrange the buttons by dragging them up and down. If you drop one button inside another you will create a sub-menu.<br>
Hover over each
button to see a short description of what it does. Right-click on each
button to access more functions (like Delete, Rename, etc). From the
right-click menu you can also reset the toolbar to the original state.<br>
Each item in the left column must have a unique name. This is the
identifier of the item and can only contain English letters, digits and
underscore. Some items (like SEPARATOR) cannot be renamed.<br>
<br>
<span style="font-weight: bold;">Important Note:</span> Not all available commands have default icons or text. That's because Windows doesn't have icons for things like <span style="font-weight: bold;">Undo</span>, <span style="font-weight: bold;">Select All</span>, etc. If you want to use such buttons in your toolbar you will have to provide your own icon. See below how to do it.<br>
<br>
After you place a button in the toolbar, you can edit it's attributes. Double-click on the button to edit:<br>
<img style="width: 446px; height: 375px;" alt="Edit toolbar button" title="Edit toolbar button" src="images/button_settings.png"><br>
Here you can select a command for the button, its text and icon. Press the <span style="font-weight: bold;">Restore Defaults</span> button to get the default text and icon for the chosen command.<br>
The command can be:<br>
<ul>
<li><span style="font-weight: bold;">left blank</span> - then if the link attribute is used, it will act as a command</li>
<li><span style="font-weight: bold;">one of the predefined commands</span> - from the dropdown</li>
<li><span style="font-weight: bold;">open &lt;some folder&gt;</span> - this will open the folder in the current browser</li>
<li><span style="font-weight: bold;">sortby &lt;property&gt;</span> - this will sort the folder by the given property - <span style="font-weight: bold;">name, type, size </span>or<span style="font-weight: bold;"> date</span>. Use '-' in front of the property to sort in descending order: <span style="font-weight: bold;">"sortby -name"</span>. You can use other properties if you know their code. For example <span style="font-weight: bold;">"sortby {B725F130-47EF-101A-A5F1-02608C9EEBAC}, 10"</span> is the same as <span style="font-weight: bold;">"sortby name"</span>. For more property codes refer to the file <span style="font-weight: bold;">propkey.h</span> in the Windows SDK (also found <a href="http://msdn.microsoft.com/en-us/library/cc251929%28v=prot.10%29.aspx">here</a> - scroll down to the "Full property table"). Not all property codes are valid or supported (for example the <span style="font-weight: bold;">album year</span> property <span style="font-weight: bold;">{56A3372E-CE9C-11D2-9F0E-006097C686F6}, 5</span> only works when showing music albums)</li>
<li><span style="font-weight: bold;">groupby &lt;property&gt;</span> - similar to <span style="font-weight: bold;">sortby</span>, but groups the files by a given property. Use the command <span style="font-weight: bold;">groupby</span> with no property to disable the grouping<br>
</li>
<li><span style="font-weight: bold;">custom executable string</span>
- this can be a name of a program and its arguments, or even a URL
(like http://www.google.com). You can use environment variables like <span style="font-weight: bold;">%SystemRoot%</span>. You can also use the
placeholders <span style="font-weight: bold;">%1</span>, <span style="font-weight: bold;">%2</span>, <span style="font-weight: bold;">%3</span>, <span style="font-weight: bold;">%4</span> and <span style="font-weight: bold;">%5</span>:</li>
<ul>
<li><span style="font-weight: bold;">%1</span> is the path of the
current folder. Keep in mind that if the current folder is a root of a
drive it will end with a backslash (like C:\)<br>
</li>
<li><span style="font-weight: bold;">%2</span> is the path of the selected file (only when a single file is
selected)</li>
<li><span style="font-weight: bold;">%3</span>
is a name of a temporary text file that contains all selected files.
Each line in the text file contains one file with its full path<br>
</li>
<li><span style="font-weight: bold;">%4</span>
is the same as %3, but the file is in Unicode (UTF16) format. The file
contains no byte order mark. %3 and %4 can't both be used by the same command<br>
</li>
<li><span style="font-weight: bold;">Note to developers: </span>When
%3 or %4 is used, it is the responsibility of the command to delete the
temporary file when it finishes. Otherwise the temp file will be left
behind and waste disk space. Also if the command is a console application
or a batch file it will be launched in silent mode with no console
window</li>
<li><span style="font-weight: bold;">%5</span> is a name of a
temporary text file, which can be used to return a command back to
Classic Explorer. If the first 2 bytes of the file are 255 and 254, the
file is treated as Unicode. Only one command can be used at a time. The command
can be:</li>
<ul>
<li><span style="font-weight: bold;">open &lt;folder name&gt;</span> - causes Explorer to navigate to the given folder</li>
<li><span style="font-weight: bold;">select &lt;list of file names&gt;</span>
- selects the given files, deselects the rest. The file names must be
separated by a tab or a newline character. The files should not contain
a path. If they do, the path will be ignored<br>
</li>
<li><span style="font-weight: bold;">refresh</span> - refreshes Explorer</li>
</ul>
</ul>
<ul>
<li><span style="font-weight: bold;">Note to developers:</span>
commands using %5 will run in silent mode (like commands using %3 or
%4) but
also Explorer will wait for the process to finish. The process must
finish as quickly as possible, because Explorer will be frozen during
the execution of the command</li>
<li>See the next section for a few examples how to use these parameters<br>
</li>
</ul>
</ul>
The link can be a path to a file or a folder. If it is a file, that
file will be executed. If it is a folder, that folder will be opened as
a sub-menu (only for top-level buttons).<br>
<br>
The icon can be:<br style="font-weight: bold;">
<ul>
<li><span style="font-weight: bold;">left blank</span> - then if the link attribute points to a file or a folder, the icon of that file or folder will be used<br>
<span style="font-weight: bold;"></span></li>
<li><span style="font-weight: bold;">resource file,icon ID</span> - for example <span style="font-weight: bold;">%windir%\notepad.exe,2</span>. Do not leave space between the file name and the comma. <span style="font-weight: bold;">Make sure you are using the icon's resource ID, and not the icon's index.</span> For best results use the <span style="font-weight: bold;">[...]</span> button next to the icon box</li>
<li><span style="font-weight: bold;">,icon ID</span> - same as above, but the resource file is the <span style="font-weight: bold;">ClassicExplorer.dll</span> itself. This is useful when referring to Classic Explorer's own icons<br>
</li>
<li><span style="font-weight: bold;">icon file</span> -&nbsp; for example <span style="font-weight: bold;">C:\Program Files\Mozilla Thunderbird\Email.ico</span></li>
<li><span style="font-weight: bold;">none</span> - this will use a blank icon</li>
</ul>
If the label or the tip attribute start with <span style="font-weight: bold;">$</span> (dollar sign), then the
system will treat it as a name of a string in the <span style="font-weight: bold;">ExplorerL10N.ini</span>
file. The actual text will depend on the current language setting. This
is useful when creating a toolbar that can be used by multiple languages.<br>
<br>
<span style="font-weight: bold;">Note to developers: </span>Buttons for custom commands can be checked or disabled. The toolbar checks the registry key <span style="font-weight: bold;">HKCU\Software\OpenShell\ClassicExplorer</span>
for a DWORD value with the name of the button (the name used in left
column). 0 means normal, 1 is disabled and 2 is checked. The toolbar
reads the registry keys on startup. To force the buttons to update
their state after that you need to find all Explorer windows, locate
the child window with class <span style="font-weight: bold;">OpenShell.CBandWindow</span>, and post a message <span style="font-weight: bold;">WM_CLEAR</span>. This is useful if you are developing a custom exe to be used by the toolbar.<br>
<br>
<h1><a name="examples"></a>Examples for Custom Commands</h1>
<h3>0) Use quotes when necessary</h3>In order to support paths that
contain spaces, you should use quotes around the path parameters. The
quotes are not always required, like in examples 1 and 2 below. Make
sure you test your commands with paths containing spaces to avoid
surprises.<br>
<br>
<h3>1) Print the current folder</h3>
Use this command: <span style="font-weight: bold;">cmd.exe /k echo %1</span>. %1 will be replaced by the path of the current folder.<br>
<br>
<h3>2) Open the selected file in Notepad</h3>
Use this command: <span style="font-weight: bold;">%SystemRoot%\notepad.exe %2</span>.
%2 will be replaced by the full name of the selected file. It doesn't
need to be in quotes because Notepad uses the whole command line as a
file name.<br>
<br>
<h3>3) Copy selected files to the parent folder<br>
</h3>
Create a batch file called <span style="font-weight: bold;">C:\CopyParent.bat:<br><span style="font-family: monospace;">
set list=%1<br>
set list=%list:"=%<br>
for /F "delims=" %%i in (%list%) do copy /Y "%%i" ..<br>
del %1<br style="font-family: monospace;"></span></span>
<br>
Use this command: <span style="font-weight: bold;">C:\</span><span style="font-weight: bold;">CopyParent</span><span style="font-weight: bold;">.bat "%3"</span>.
%3 will be replaced by a text file containing the full names of all
selected files. The batch file will read each line of that text file,
and copy each of the selected files to the parent folder. At the end
the batch file deletes the initial
temp file. The first two <b>set</b> commands remove the quotes from the %1 parameter.<br>
<br>
<h3>4) Select all text files</h3>
Create a batch file called <span style="font-weight: bold;">C:\SelectText.bat</span>:<br>
<span style="font-weight: bold; font-family: monospace;">echo select &gt; %1</span><br style="font-weight: bold; font-family: monospace;">
<span style="font-weight: bold; font-family: monospace;">dir *.txt /b &gt;&gt; %1</span><br style="font-weight: bold; font-family: monospace;">
<br>
Use this command: <span style="font-weight: bold;">C:\SelectText.bat "%5".</span>
%5 will be replaced by a blank text file, where the command must output
the word "select" and a list of files it wants to select. The "dir
*.txt /b" command provides that list.<br>
<br>
<br>
<h1><a name="admin"></a>Administrative Settings</h1>The settings are
per user and are stored in the registry. By default every user can edit
all of their settings. An administrator can lock specific settings, so
no user can edit them:<br>
<img style="width: 682px; height: 465px;" alt="" src="images/up_locked.png"><br>
In this example the setting "Show Up button" is locked to always be
"Before Back/Forward" and can't be changed by any user. This is achieved
by adding the setting to the <span style="font-weight: bold;">HKEY_LOCAL_MACHINE\SOFTWARE\OpenShell\ClassicExplorer</span> registry key. Create a string value called "ShowUpButton" and set it to "BeforeBack".<br>
<br>In some cases you may not want to lock the value for all users, but
simply modify the initial value of the setting. In such case add
"_Default" to the name of the value. For example if you want the Up
button to be before Back by default but still allow the users to change
it if they wish, create a string value named "ShowUpButton_Default" and
set it to "BeforeBack".<br>
<br>
The easiest way to know the registry name of a setting and its value is to modify it, and then look it up in <span style="font-weight: bold;">HKEY_CURRENT_USER\Software\OpenShell\ClassicExplorer\Settings</span>.<br>
Sometimes you may want to lock a setting to its default value, but you
don't know what the default value is. Then create a DWORD value and set
it to 0xDEFA.<br>
<br>
There is also a global setting <span style="font-weight: bold;">EnableSettings</span>. Set it to 0 in the
registry to prevent the users from even opening the Settings dialog:<br>
<img style="width: 603px; height: 257px;" alt="Disable all settings" title="Disable all settings" src="images/settings_disable_ex.png"><br>
<br>
You can enable or disable Classic Explorer for individual processes
using the 2 registry settings "ProcessWhiteList" and
"ProcessBlackList". <span style="font-weight: bold;">ProcessWhiteList </span>is
a list of processes for which Classic Explorer will load. Use only the
file name of the process (like "notepad.exe"), separate multiple names
with a comma or a semicolon. <span style="font-weight: bold;">ProcessBlackList</span>
is a list of processes for which Classic Explorer will not load. You
should only use one of the two lists. If both lists are specified, the
black list will be ignored. The lists are only used when you enable the
features that are supported for processes other than Explorer. At the
moment these features are: the shared overlay icon and the replacements
for the copy dialogs.<br>
<br>
Editing the settings through group policies is also supported. Extract the file <b>PolicyDefinitions.zip</b> found in the installation folder and read the document <b>PolicyDefinitions.rtf</b> for more details.<br>
<br>
<br>
<h1><a name="dependencies"></a>Dependencies on Windows settings<br>
</h1>
Some Classic Explorer settings require specific Windows settings to be enabled:<br>
<ul>
<li><span style="font-weight: bold;">Windows Vista navigation pane style</span> - requires Windows to be using Aero or Basic theme</li>
<li><span style="font-weight: bold;">Auto-navigate to the selected folder</span>
- this setting can be set to "Always" only when Explorer is set to
"Automatically expand to current folder". Look for it in the <span style="font-weight: bold;">General</span> tab of <span style="font-weight: bold;">Tools -&gt; Folder Options</span></li>
<li><span style="font-weight: bold;">Show caption in the title bar</span>
- the caption will show either the full path name or only the name of
the current folder. To see the full path you need to enable "Display
the full path in the title bar (Classic theme only)" in the <span style="font-weight: bold;">View</span> tab of <span style="font-weight: bold;">Tools -&gt; Folder Options</span></li>
<li><span style="font-weight: bold;">All status bar settings</span> - require the status bar to be visible (not to be confused with the Details Pane). Check <span style="font-weight: bold;">View -&gt; Status bar</span></li>
</ul>
<br>
<h1><a name="localization"></a>Localization</h1>
The user
interface (except the Settings dialog box) is localized in 35
languages.<br>
The Settings dialog box is translated in a smaller number of languages.
The default installation contains only English. More languages can be
downloaded from the <a href="http://www.classicshell.net/translations/">translations page</a>. Make sure you download the translation package for the exact version of Open-Shell.<br>
<span style="font-weight: bold;"></span><br>
</body></html>

View File

@@ -1,62 +0,0 @@
; DON'T TRANSLATE =============================================================
; disabled
LogLevel.supportedOn = never
ShowFreeSpace2.supportedOn = never
ShowInfoTip2.supportedOn = never
; os-specific
ReplaceFileUI.supportedOn = win7
ReplaceFolderUI.supportedOn = win7
OverwriteAlertLevel.supportedOn = win7
EnableMore.supportedOn = win7
MoreProgressDelay.supportedOn = win7
FileExplorer.supportedOn = win7
ShowUpButton.supportedOn = win7
UpIconNormal.supportedOn = win7
UpIconPressed.supportedOn = win7
UpIconHot.supportedOn = win7
UpIconDisabled.supportedOn = win7
UpIconSize.supportedOn = win7
FixFolderScroll.supportedOn = win7
ForceRefreshWin7.supportedOn = win7
ShowCaption.supportedOn = win7
ShowIcon.supportedOn = win7
ShowStatusBar.supportedOn = win881
ShowZone.supportedOn = win881
; TRANSLATE ===================================================================
Title.text = Open-Shell settings
State.text = State:
State1.text = Locked to this value
State2.text = Locked to default
State3.text = Unlocked
State1Help.text = If you set the state to 'Locked to this value', the setting will be locked to the specified value for all users.
State2Help.text = If you set the state to 'Locked to default', the setting will be locked to the default value for all users. The specified value is ignored.
State3Help.text = If you set the state to 'Unlocked', the default value for the setting will be changed to the specified value. Individual users can override the setting.
ClassicExplorerCat.text = Classic Explorer
ClassicExplorerCatHelp.text = Classic Explorer group policy settings
SUPPORTED_CS404.text = Requires Open-Shell 4.0.4 or later.
SUPPORTED_CS404_WIN7.text = Requires Windows 7.
SUPPORTED_CS404_WIN881.text = Requires Windows 8 or Windows 8.1.
AddressAltD.nameOverride = Additional shortcut for the address bar
AddressAltD.tipOverride = Enter a letter 'A' to 'Z' to be a shortcut for the address bar in combination with the Alt key
EnableSettings.nameOverride = Enable settings
EnableSettings.tipOverride = Enables the users to edit their own settings
ProcessWhiteList.nameOverride = Process white list
ProcessWhiteList.tipOverride = List of processes that can load Classic Explorer. Use only the file name of the process (like "notepad.exe"), separate multiple names with a comma or semicolon.
ProcessBlackList.nameOverride = Process black list
ProcessBlackList.tipOverride = List of processes that will not load Classic Explorer. Use only the file name of the process (like "notepad.exe"), separate multiple names with a comma or semicolon.
ToolbarItems.nameOverride = Toolbar buttons
ToolbarItems.tipOverride = Select the buttons to be shown in the toolbar.\nThe best way to get the right string is to configure the buttons in the Classic Explorer settings dialog and then look up the value named ToolbarItems in HKCU\Software\OpenShell\ClassicExplorer\Settings
NoInitialToolbar.nameOverride = No initial showing of the toolbar
NoInitialToolbar.tipOverride = When this is checked, the Explorer toolbar will not be automatically displayed
; os-specific
FileExplorer.nameOverride = Enable dialogs only in Explorer (improves performance)

View File

@@ -1,100 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Classic IE</title>
<style type="text/css">
h1 {
font-family: "Times New Roman",Times,serif;
color: #0070c0;
}
p {
font-family: Arial,Helvetica,sans-serif;
}
body {
font-family: Arial,Helvetica,sans-serif;
}
</style></head><body>
<h1><a target="_blank" href="http://www.classicshell.net/"><img src="images/OpenShell.png" style="border: 0px solid ; width: 64px; height: 64px;" alt="Open-Shell website" title="Open-Shell website"></a>&nbsp;
Classic IE</h1><span style="font-style: italic; color: rgb(0, 112, 192); font-weight: bold;"></span><span style="color: rgb(79, 129, 189); font-weight: bold;"><br>
Classic IE</span>
is a
small plugin for Internet Explorer that:<br>
<ul>
<li>Adds a caption to the title
bar so you can see the full title of the page</li>
<li>Shows the security zone in the status bar</li>
<li>Shows the loading progress in the status bar</li>
</ul>
<br>
See the full page title even when it doesn't fit in the tab:<br>
<img style="width: 748px; height: 190px;" alt="" src="images/ie9_caption.png"><br>
<br>See the progress and the security zone:<br>
<img style="width: 429px; height: 56px;" alt="" src="images/ie9_status.png"><br>
<br>
<h1><a name="install"></a>Installation</h1>
When you run Internet Explorer for the first time after installing
Classic IE it may prompt you that a new add-on called ClassicIEBHO is
installed and if you want to enable it. Click on the Enable button. If
you don't get a prompt, go to <span style="font-weight: bold;">Tools -&gt; Manage add-ons</span> and make sure ClassicIEBHO is enabled. After enabling the add-on you have to restart Internet Explorer to activate the plugin.<br>
<br>
<h1><a name="settings"></a>Settings</h1>
You can access the settings from <span style="font-weight: bold;">Tools -&gt; Classic IE Settings</span>
or from the start menu. The settings control the color and the font of
the caption, and what information to display on the status bar.<br>
<img style="width: 683px; height: 438px;" alt="" src="images/ie9_settings.png"><br>
<br>You can choose from seeing only the basic settings, or all
available settings. Hover over each setting to see a description of
what it's for. Type in the search box to find a setting by name.<br>
Every setting has a default value. The default value can be constant,
or it may depend on the current system settings. Once you edit a
setting it becomes "modified" and is shown in bold. To revert to the
default value, right-click on the setting.<br>
<br>
You can save the settings to an XML file, and later load them back.
Press the <span style="font-weight: bold;">Backup</span> button to access these functions. From there you can
also reset all settings to their default value.<br>
<br>
Press OK to store your settings. You need to restart Internet Explorer to apply the new settings.<br>
<br>
<h1><a name="admin"></a>Administrative Settings</h1>
The settings are
per user and are stored in the registry. By default every user can edit
all of their settings. An administrator can lock specific settings, so
no user can edit them. This is achieved by adding the setting to the <span style="font-weight: bold;">HKEY_LOCAL_MACHINE\SOFTWARE\OpenShell\ClassicIE</span> registry key.<br>
<br>
You may also wish to not lock the setting but only override its initial
value. Then add "_Default" to the name of the registry value.<br>
<br>
The easiest way to know the registry name of a setting and its value is to modify it, and then look it up in <span style="font-weight: bold;">HKEY_CURRENT_USER\Software\OpenShell\ClassicIE\Settings</span>.<br>
Sometimes you may want to lock a setting to its default value, but you
don't know what the default value is. Then create a DWORD value and set
it to 0xDEFA.<br>
<br>
There is also a global setting <span style="font-weight: bold;">EnableSettings</span>. Set it to 0 in the
registry to prevent the users from even opening the Settings dialog:<br>
<img style="width: 656px; height: 292px;" alt="" src="images/settings_disable_ie9.png"><br>
<br>
Editing the settings through group policies is also supported. Extract the file <b>PolicyDefinitions.zip</b> found in the installation folder and read the document <b>PolicyDefinitions.rtf</b> for more details.<br>
<br>
</body></html>

View File

@@ -1,26 +0,0 @@
; DON'T TRANSLATE =============================================================
LogLevel.supportedOn = never
; TRANSLATE ===================================================================
Title.text = Open-Shell settings
State.text = State:
State1.text = Locked to this value
State2.text = Locked to default
State3.text = Unlocked
State1Help.text = If you set the state to 'Locked to this value', the setting will be locked to the specified value for all users.
State2Help.text = If you set the state to 'Locked to default', the setting will be locked to the default value for all users. The specified value is ignored.
State3Help.text = If you set the state to 'Unlocked', the default value for the setting will be changed to the specified value. Individual users can override the setting.
ClassicIECat.text = Classic IE
ClassicIECatHelp.text = Classic IE group policy settings
SUPPORTED_CS404.text = Requires Open-Shell 4.0.4 or later.
SUPPORTED_IE9.text = Requires Internet Explorer 9 or later.
EnableSettings.nameOverride = Enable settings
EnableSettings.tipOverride = Enables the users to edit their own settings
CaptionFont.tipAddition = .\n\nThe format is <font name>, <normal | bold | italic | bold_italic>, <size>. For example "Segoe UI, normal, 9"

View File

@@ -1,62 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>License Agreement</title>
<style type="text/css">
h1 {
color: #0070c0;
font-family: "Times New Roman",Times,serif;
}
body {
font-family: Arial,Helvetica,sans-serif;
}
</style></head><body>
<h1><a target="_blank" href="http://www.classicshell.net/"><img src="images/OpenShell.png" style="border: 0px solid ; width: 64px; height: 64px;" alt="Open-Shell website" title="Open-Shell website"></a>&nbsp; License Agreement<br>
</h1><br>
<span style="font-weight: bold; color: rgb(79, 129, 189);">
Classic Shell © 2009-2017, Ivo Beltchev <a target="_blank" href="http://www.classicshell.net/"></span>http://www.classicshell.net/</a><br>
<span style="font-weight: bold; color: rgb(79, 129, 189);">
Open-Shell © 2017-2018, The Open-Shell Team <a target="_blank" href="https://github.com/open-shell"></span>https://github.com/open-shell</a><br>
<br>
<span style="font-weight: bold;">BY USING THIS SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.</span><br>
<br>
If you comply with these license terms, you have the rights below.<br>
<br>
<ol>
<li>
<p><span style="font-weight: bold;">SCOPE OF LICENSE.</span> This agreement only gives you some rights to use the software. The author reserves all other rights.</p>
</li>
<li>
<p><span style="font-weight: bold;">INSTALLATION AND USE RIGHTS.</span> This software is free for both personal and commercial use. You may install and use it on your computers free of charge.</p>
</li>
<li>
<p><span style="font-weight: bold;">REDISTRIBUTION RIGHTS.</span> You may redistribute the software as long as you do it free of charge and you don&#8217;t misrepresent the origin of the software.</p>
</li>
<li>
<p><span style="font-weight: bold;">TRADEMARKS.</span> The Open-Shell name and logo are trademarks of the author. Using them to to identify other products or services is not permitted.</p>
</li>
<li>
<p><span style="font-weight: bold;">DISCLAIMER OF WARRANTY.</span>
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.</p>
</li>
<li>
<p><span style="font-weight: bold;">IN OTHER WORDS:</span>
Basically you can use this software freely for any purpose but don&#8217;t be
surprised if it doesn&#8217;t work as you expect. You can&#8217;t hold the author
responsible for any damages that come to you from using the software.
You can&#8217;t profit from selling this software. You got it for free after
all.</p>
</li>
</ol>
</body></html>

View File

@@ -1,39 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Open-Shell</title>
<style type="text/css">
h1 {
color: #0070c0;
font-family: "Times New Roman",Times,serif;
}
body {
font-family: Arial,Helvetica,sans-serif;
}
</style></head><body>
<h1><a target="_blank" href="http://www.classicshell.net/"><img src="images/OpenShell.png" style="border: 0px solid ; width: 64px; height: 64px;" alt="Open-Shell website" title="Open-Shell website"></a>&nbsp; Links</h1><span style="font-style: italic; color: rgb(0, 112, 192); font-weight: bold;"></span><br>The latest version can be found on the Open-Shell website:<br>
<a target="_blank" href="http://www.classicshell.net/">http://www.classicshell.net/</a><br>
<br>
View the project history here:<br>
<span style="font-weight: bold;">History: </span><a target="_blank" href="http://www.classicshell.net/history/">http://www.classicshell.net/history/</a><br>
<br>
<br>
<h1>Get Help</h1>
For answers to frequently asked questions look here:<br>
<span style="font-weight: bold;">FAQ: </span><a target="_blank" href="http://www.classicshell.net/faq/" target="_blank">http://www.classicshell.net/faq/</a><br>
<br>
If you don't find your answer in the FAQ, try the discussion forums:<br>
<span style="font-weight: bold;">Discussion Forums: </span><a target="_blank" href="http://www.classicshell.net/forum/viewforum.php?f=6" target="_blank">http://www.classicshell.net/forum/viewforum.php?f=6</a><br>
<br>
<br>
<h1>Report Problems</h1>
Report bugs and feature requests in the development forums:<br>
<span style="font-weight: bold;">Development Forums: </span><a target="_blank" href="http://www.classicshell.net/forum/viewforum.php?f=11" target="_blank">http://www.classicshell.net/forum/viewforum.php?f=11</a><br>
</body></html>

View File

@@ -1,108 +0,0 @@
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fprq2\fcharset0 Cambria;}{\f1\fswiss\fprq2\fcharset0 Arial;}{\f2\fnil\fcharset2 Symbol;}}
{\colortbl ;\red0\green0\blue255;}
{\*\listtable
{\list\listhybrid
{\listlevel\levelnfc23\leveljc0\levelstartat1{\leveltext\'01\'B7;}{\levelnumbers;}\f2\jclisttab\tx0}
{\listlevel\levelnfc23\leveljc0\levelstartat1{\leveltext\'01\'B7;}{\levelnumbers;}\f2\jclisttab\tx0}\listid1 }}
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}}
{\*\generator Riched20 10.0.17134}{\*\mmathPr\mnaryLim0\mdispDef1\mwrapIndent1440 }\viewkind4\uc1
\pard\keepn\widctlpar\s1\sb240\sa60\sl276\slmult1\kerning32\b\f0\fs32 Localization of Open-Shell\par
\pard\nowidctlpar\kerning0\b0\f1\fs20\par
This file explains the localization system used by Open-Shell and how to translate Open-Shell in new languages.\par
\par
\pard\keepn\widctlpar\s2\sb240\sa60\sl276\slmult1\b\i\f0\fs28 1. What can be localized\par
\pard\nowidctlpar\b0\i0\f1\fs20\par
Open-Shell has 2 major systems for providing localized text.\par
\par
The first one is the L10N.ini files. There are 3 files \endash ExplorerL10N.ini, StartMenuL10N.ini and StartMenuHelperL10N.ini. They contain translations for the text in Explorer and the start menu that users will encounter during normal use. These files contain translations for all of the 35 supported languages. Each language is separated in its own section. You will generally not need to edit these files unless you find a typo. If you do, please send the correction to {{\field{\*\fldinst{HYPERLINK "mailto:classicshell@ibeltchev.com" }}{\fldrslt{\ul\cf1\cf1\ul classicshell@ibeltchev.com}}}}\f1\fs20 , so I can fix the typo in the next release.\par
\par
The second system is for localizing the settings UI and the system messages that Open-Shell displays. The translations are packaged into a resource DLL with the name of the language \endash en-US.dll, ja-JP.dll, etc. The DLL can contain:\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720 A string table with replacement strings\par
{\pntext\f2\'B7\tab}Dialog resources for the Settings UI\par
{\pntext\f2\'B7\tab}Overrides for text lines in the L10N.ini files\par
\pard\nowidctlpar\par
The same DLL contains resources for all of the Open-Shell components \endash Classic Explorer, Open-Shell Menu, etc. Generally resources from 2000 to 3000 belong to Classic Explorer, from 3000 to 4000 belong to Open-Shell Menu, from 5000 to 6000 belong to Classic IE, 6000 to 7000 belong to the updater component and from 4000 to 5000 are shared by all components.\par
\par
\pard\keepn\widctlpar\s2\sb240\sa60\sl276\slmult1\b\i\f0\fs28 2. What else can be localized (if you really want to)\par
\pard\nowidctlpar\b0\i0\f1\fs20\par
Open-Shell is designed to mainly support localizations for the UI. Localizations for other areas, like the installer and the documentation will require more work.\par
\par
To translate the installer you need to translate the OpenShellText-en-US.wxl file. It contain the text for the installer. One benefit of translating the installer is that you can localize the names of the shortcuts in the Start menu. You also need to translate the OpenShellReadme.rtf file and OpenShellEULA.rtf if you want them to display in your language.\par
\par
To translate the help file you will need to translate the HTML files included in OpenShellLoc.zip. If you install the tool HTML Help Workshop from Microsoft, you will be able to also compile the CHM file and preview it yourself. Use the OpenShell.hhp help project file for that.\par
\par
To translate the group policies you will need to translate the files ClassicExplorerADMX.txt, ClassicIEADMX.txt, OpenShellADMX.txt and MenuADMX.txt. You may also translate the PolicyDefinitions.rtf file.\par
\par
When you are done, send all translations to me and I will prepare an installer for your language. \par
\par
\par
\pard\keepn\widctlpar\s2\sb240\sa60\sl276\slmult1\b\i\f0\fs28 3. The DLL structure in detail\par
\pard\nowidctlpar\b0\i0\f1\fs20\par
Look at the provided \b en-US.dll\b0 file. It contains all English resources that can be translated.\par
\b\i Note:\b0 Open-Shell doesn\rquote t need the en-US.dll file. The English text is already built-in. The purpose of the en-US.dll file is to serve as an example and starting point for other languages.\par
\i0\par
The localization DLL contains the following resources:\par
\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720 A version resource. It must match the version of Open-Shell it is intended to be used with. The reason is that the text often changes between versions, so translations from one version will not work with the next. You may also use the comments section to list your name as the author.\par
\pard\nowidctlpar\li720\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720 A string table. Provides translations for the UI text in Open-Shell. Use the text from en-US.dll as a source. The string table doesn\rquote t need to include all strings. If a string is missing, it will stay in English.\line\par
{\pntext\f2\'B7\tab}A set of dialog resources. These are the dialog boxes that the Settings UI needs. You can replace the text in the dialogs with your own. You can also resize some of the dialog elements to make the text fit. Like with the strings, if a dialog is missing from the DLL, the English version will be used.\line\par
{\pntext\f2\'B7\tab}A L10N resource (its resource ID must be 1). This is a UTF-16 text file that contains replacement strings for the ini files. For example the ini files do not have the text \ldblquote Settings for Open-Shell Menu\rdblquote translated in all languages (since I don\rquote t know how to say it in all 35 languages). So the DLL can provide the translations for the current language. It is possible to replace even text that is already translated \endash for example if you want to fix a typo in the ini file, or to provide a better version of some text line.\line\par
\pard\widctlpar\sa200\sl276\slmult1 You can edit a DLL using a resource editor like Visual Studio, Res Hacker, and many others.\par
\pard\keepn\widctlpar\s2\sb240\sa60\sl276\slmult1\b\i\f0\fs28 4. What if I don\rquote t know how to edit DLLs?\par
\pard\nowidctlpar\b0\i0\f1\fs20\par
Look at the provided \b en-US.csv\b0 file. It is a tab-separated file in UTF-16 format. You can open it in Excel or any compatible editor. The file contains 4 columns:\par
\pard
{\listtext\f1\u10625?\tab}\ls1\nowidctlpar\fi-360\li720\b ID\b0 \endash this is the identifier of the text line. There are 3 types of IDs:\par
\pard
{\listtext\f1\u10625?\tab}\ls1\ilvl1\nowidctlpar\fi-360\li1440 A number, like 2001, 4030, etc. These correspond to the strings in the string table\par
{\listtext\f1 1\tab}A pair of numbers, like 3002/1025. These correspond to strings found in the dialog boxes. The first number is the ID of the dialog, and the second is the ID of the control in that dialog\par
{\listtext\f1 2\tab}Text, like \ldblquote Menu.SettingsTip\rdblquote . These correspond to the lines of the L10N resource\par
\pard\nowidctlpar\li720\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\b English\b0 \endash this is the original English text\par
\pard\nowidctlpar\li720\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\b Translation\b0 \endash this column is empty. That\rquote s where you will have to enter the translations for your language\line\par
{\pntext\f2\'B7\tab}\b Comment\b0 \endash some lines contain hints for the meaning of the translation, or instructions for providing better translation. If you are still unclear about something, ask me. I will provide more comments in future versions based on which text lines people find confusing\par
\pard\nowidctlpar\par
\par
Once you are done, send the CSV file to {{\field{\*\fldinst{HYPERLINK "mailto:classicshell@ibeltchev.com" }}{\fldrslt{\ul\cf1\cf1\ul classicshell@ibeltchev.com}}}}\f1\fs20 and I will convert that text into a DLL and upload it to the Open-Shell website.\par
\par
\pard\keepn\widctlpar\s2\sb240\sa60\sl276\slmult1\b\i\f0\fs28 5. Special characters\par
\pard\nowidctlpar\b0\i0\f1\fs20\par
Some text lines in the DLL or the CSV contain special characters. They are:\par
\b\\t\b0 \endash this is the Tab character. Do not enter an actual tab in the text, because the CSVs don\rquote t handle it well\par
\b\\r\b0 \endash this is a carriage return character\par
\b\\n\b0 \endash this is a new line character\par
\b\\\\\b0 - this is the backslash character. You must use \\\\ instead of \\, because a single \\ can be mistaken for a special character\par
\b %d\b0 \endash this is a placeholder for a number. The actual number will be provided at run-time\par
\b %s\b0 \endash this is a placeholder for a string. The actual string will be provided at run-time\par
\par
In general, try to keep the special characters as they are.\par
\par
}

View File

@@ -1,49 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Open-Shell</title>
<style type="text/css">
h1 {
color: #0070c0;
font-family: "Times New Roman",Times,serif;
}
body {
font-family: Arial,Helvetica,sans-serif;
}
</style></head><body>
<h1><a target="_blank" href="http://www.classicshell.net/"><img src="images/OpenShell.png" style="border: 0px solid ; width: 64px; height: 64px;" alt="Open-Shell website" title="Open-Shell website"></a>&nbsp; Open-Shell</h1>
<span style="font-style: italic; color: rgb(0, 112, 192); font-weight: bold;">Version 4.3.1 &#8211; general release</span><br><br>
<h1>What is Open-Shell?</h1>
<strong style="color: rgb(79, 129, 189);">Open-Shell&#8482;</strong> is a collection of usability enhancement for Windows. It
has a customizable Start menu and Start button, it adds a
toolbar for Windows Explorer and supports a variety of smaller features.<br>
<br>
<br>
<h1>System Requirements</h1>
Open-Shell works on Windows 7, Windows 8, Windows 8.1, Windows Server 2008 R2,
Windows Server 2012 and Windows Server 2012 R2. Both 32 and 64-bit versions are
supported (the same installer works for both). Some skins for the start menu
require Aero theme to be enabled. Others require at least Basic theme.<br>
<br>
<br>
<h1>Components</h1><br>
Open-Shell has three major components:<ul>
<li><a href="Menu.html">Open-Shell Menu</a></li>
<li><a href="ClassicExplorer.html">Classic Explorer</a></li>
<li><a href="ClassicIE.html">Classic IE</a></li>
</ul>
<br>
<h1>Uninstallation</h1>
You can uninstall Open-Shell from <span style="font-weight: bold;">Control Panel -&gt; Programs and Features</span>. Another way is&nbsp; to run the setup again and chose "Remove".<br>
A logoff may be required to complete the process.<br>
<br>
</body></html>

View File

@@ -1,349 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>Open-Shell Menu</title>
<style type="text/css">
h1 {
font-family: "Times New Roman",Times,serif;
color: #0070c0;
}
p {
font-family: Arial,Helvetica,sans-serif;
}
body {
font-family: Arial,Helvetica,sans-serif;
}
</style></head><body><span style="font-weight: bold;"></span><span style="font-weight: bold;"></span>
<h1><a target="_blank" href="http://www.classicshell.net/"><img src="images/OpenShell.png" style="border: 0px solid ; width: 64px; height: 64px;" alt="Open-Shell website" title="Open-Shell website"></a>&nbsp;
Open-Shell Menu</h1><span style="font-style: italic; color: rgb(0, 112, 192); font-weight: bold;"></span><span style="color: rgb(79, 129, 189); font-weight: bold;"><br>
Open-Shell Menu</span>
is a flexible start menu that can mimic the menu behavior of Windows
2000, XP and Windows 7. It has a variety of advanced features:
<ul>
<li>Choose between &#8220;Classic&#8221; and &#8220;Windows 7&#8221; styles<br>
</li>
<li>Drag and drop to let you organize your applications</li>
<li>Options to show Favorites, expand Control Panel, etc</li>
<li>Shows recently used documents. The number of documents to display
is customizable</li>
<li>Translated in 35 languages, including Right-to-left support for
Arabic and Hebrew</li>
<li>Does not disable the original start menu in Windows. You can
access it by Shift+Click on the start button</li>
<li>Right-click on an item in the menu to delete, rename, sort, or
perform other tasks</li>
<li>The search box helps you find your programs and files without getting in the way of your keyboard shortcuts</li>
<li>Supports jumplists for easy access to recent documents and common tasks</li>
<li>Available for 32 and 64-bit operating systems</li>
<li>Has support for skins, including additional 3rd party skins. Make your own!</li>
<li>Fully customizable in both looks and functionality</li>
<li>Support for Microsoft&#8217;s Active Accessibility</li>
<li>Converts the &#8220;All Programs&#8221; button in the Windows menu into a cascading menu</li>
<li>Implements a customizable start button<br>
</li>
<li>Can show, search and launch Windows Store apps (Windows 8)</li>
<li>And last but not least &#8211; it's FREE!</li>
</ul><br>
<h1><a name="styles"></a> Styles</h1>
The start menu offers 3 styles to choose from.<br>
<h3>1) Single-column classic style</h3>
<img src="images/style1.png" style="width: 640px; height: 550px;" alt=""><br>
This style is similar to the menu found in Windows 2000. It has one
column in the main menu with vertical text on the side. you can
customize the order of items, icons and text.<br>
Programs, jumplists and search results show as cascading sub-menus.<br>
<br>
<h3>2) Two-column classic style</h3>
<img src="images/style2.png" style="width: 640px; height: 550px;" alt=""><br>
This style is similar to the Windows XP menu. There are two columns
where you can arrange your menu items. Customize the order, icons and
text.<br>
Programs, jumplists and search results show as cascading sub-menus.<br>
<br>
<h3>3) Windows 7 style<br>
</h3>
<img src="images/style3.png" style="width: 640px; height: 550px;" alt=""><br>
This style is similar to the Windows Vista and Windows 7 menu. The
items in the first column are pre-defined to pinned and recent
programs, all programs list and search box. The items in the second
column are fully customizable.<br>
The jumplists and search results show inside the main menu. The
programs can be inside the main menu or open as a cascading sub-menu.<br>
This style offers less customizing options than the classic styles, but
has look and feel more familiar to people used to Windows 7.<br>
<br>
<br>
<h1><a name="operation"></a> Operation</h1>
If you have used the start menu in older versions of Windows you&#8217;ll
feel right at home:<br>
<p>
Press the Windows key or click on the orb in the corner of the
screen to open the start menu.</p>
<p>
Hold down Shift while clicking on the orb to access the operating
system's own
start menu.
</p>
<p>
Click on an item to execute it.
</p>
<p>
Drag a program to change the order of the programs in a menu, or to
move it to another folder.
</p>
<p>
Right-click on an item to rename it, delete it, explore it, sort the
menu, or perform other tasks.</p>
<p>
Right-click on the orb to edit the settings for the start menu, to view this help file, or to
stop the start menu.<br>
</p>
<p><br>
</p>
<h1><a name="settings"></a>
Settings</h1>Right-click on the start button to access the settings:<br>
<img src="images/settings1.png" style="width: 688px; height: 472px;" alt=""><br>
<br>
You can choose from seeing only the basic settings, or all available
settings. Hover over each setting to see a description of what it's for. Type in the search box to find a setting by name.<br>
Every setting has a default value. The default value can be constant,
or it may depend on the current system settings. Once you edit a
setting it becomes "modified" and is shown in bold. To revert to the
default value, right-click on the setting.<br>
<br>
You can save the settings to an XML file, and later load them back.
Press the Backup button to access these functions. From there you can
also reset all settings to their default value.<br>
<br>
Most settings will be changed immediately as you edit them. For example
you can edit the start menu, then while the Settings dialog is open,
access the start menu to see the changes. Small number of settings will
require you to exit the start menu before you can see the change.<br>
<br>
<span style="font-weight: bold;">Note:</span> All Settings windows are resizable. Resize them and place them where you want them to be. They will remember the new position.<br>
<br>
Click on the <span style="font-weight: bold;">Customize Start Menu</span> tab to customize the menu items. Depending on the style you will see different UI.<br>
<br>
For classic styles you can customize both columns of the start menu and
create sub-menus. The left column shows the current items in the menu
and the right column shows the available menu items. Drag from the
right to the left to add items to the menu.<br>
<img src="images/settings3.png" style="width: 688px; height: 472px;" alt=""><br>
<br>
For the Windows 7 style you can only edit the items for the second column and there are no sub-menus.<br>
<img src="images/settings2.png" style="width: 688px; height: 472px;" alt=""><br>
<br><br>
Double-click on the icon to edit the item properties:<br>
<img src="images/settings4.png" style="width: 452px; height: 482px;" alt=""><br>
Here you can select a command for the item, its text, icon and other attributes. Press the <span style="font-weight: bold;">Restore Defaults</span> button to get the default text and icon for the chosen command.<br>
<br>
The command can be:<br>
<ul>
<li><span style="font-weight: bold;">one of the predefined commands</span> - from the dropdown</li><li><span style="font-weight: bold;">custom executable string</span>
- this can be a name of a program and its arguments, or even a URL
(like http://www.google.com). Environment variables like %SystemRoot% are supported</li><li><span style="font-weight: bold;">left blank</span> - then if the link attribute is used, it will act as a command<br>
</li>
</ul>
The link can be a path to a file or a folder. If it is a file, that
file will be executed. If it is a folder, that folder will be opened as
a sub-menu. Some menu items (like Programs and Favorites) have an implicit
link attribute, so for them the Link box will be disabled.<br>
<br>
The icon can be:<br style="font-weight: bold;">
<ul>
<li><span style="font-weight: bold;">left blank</span> - then if the link attribute points to a file or a folder, the icon of that file or folder will be used<br>
<span style="font-weight: bold;"></span></li><li><span style="font-weight: bold;">resource file,icon ID</span> - for example <span style="font-weight: bold;">%windir%\notepad.exe,2</span>. Do not leave space between the file name and the comma. <span style="font-weight: bold;">Make sure you are using the icon's resource ID, and not the icon's index.</span> For best results use the <span style="font-weight: bold;">[...]</span> button next to the icon box<br>
</li><li><span style="font-weight: bold;">,icon ID</span> - same as above, but the resource file is the <span style="font-weight: bold;">MenuDLL.dll</span> itself. This is useful when referring to the start menu's own icons<br>
</li><li><span style="font-weight: bold;">icon file</span> -&nbsp; for example <span style="font-weight: bold;">C:\Program Files\Mozilla Thunderbird\Email.ico</span></li><li><span style="font-weight: bold;">none</span> - this will use a blank icon</li>
</ul>
If the label or the tip attribute start with <span style="font-weight: bold;">$</span> (dollar sign), then the system will treat it as a name of a string in the <span style="font-weight: bold;">StartMenuL10N.ini</span>
file. The actual text will depend on the current language setting. This
is useful when creating a menu that can be used by multiple languages.<br>
<br>
If you check "Insert Sub-items as Buttons", instead of showing the menu
item itself, the start menu will show the sub-items as a row of
buttons. By default the buttons are centered. You can align them to the
left by adding a separator as the last item, or align them to the right
by adding a separator as the first item. One possible use is to replace
the shutdown menu item with
separate buttons for shutdown, restart, log off, etc.<br>
<br>
<h1><a name="admin"></a>Administrative Settings</h1>
The settings are
per user and are stored in the registry. By default every user can edit
all of their settings. An administrator can lock specific settings, so
no user can edit them:<br>
<img src="images/settings5.png" style="width: 688px; height: 472px;" alt=""><br>
In this example the setting "Enable right-click menu" is locked to always
be unchecked and can't be changed by any user. This is achieved
by adding the setting to the <span style="font-weight: bold;">HKEY_LOCAL_MACHINE\SOFTWARE\OpenShell\Menu</span> registry key. Create a DWORD value called "EnableContextMenu" and set it to 0.<br>
<br>
In some cases you may not want to lock the value for all users, but
simply modify the initial value of the setting. In such case add
"_Default" to the name of the value. For example if you want to context
menu to be disabled by default but still allow the users to enable it
if they wish, create a DWORD value named "EnableContextMenu_Default"
and set it to 0.<br>
<br>
The easiest way to know the registry name of a setting and its value is to modify it, and then look it up in <span style="font-weight: bold;">HKEY_CURRENT_USER\Software\OpenShell\StartMenu\Settings</span>.<br>
Sometimes you may want to lock a setting to its default value, but you
don't know what the default value is. Then create a DWORD value and set
it to 0xDEFA.<br>
<br>
There is also a global setting "EnableSettings". Set it to 0 in the
registry to prevent the users from even opening the Settings dialog:<br>
<img style="width: 656px; height: 292px;" alt="" src="images/settings_disable_sm.png"><br>
<br>
The start menu also checks most of the group policies set by the administrator. Run <strong style="color: rgb(0, 112, 192);">gpedit.msc</strong> and go to <strong style="color: rgb(0, 112, 192);">User Configuration -&gt; Administrative Templates -&gt; Start Menu and Taskbar</strong>. From there you can disable Run, Shutdown, Help, and other features. <span style="font-style: italic;">(Not available on Home versions of Windows)</span>.<br>
<br>
Editing the settings through group policies is also supported. Extract the file <b>PolicyDefinitions.zip</b> found in the installation folder and read the document <b>PolicyDefinitions.rtf</b> for more details.<br>
<br>
<br>
<h1><a name="skins"></a>More About Skins</h1>
You can pick from the many pre-installed skins:<br>
<br>
<img src="images/skins.gif" style="width: 250px; height: 470px;" alt="Skins for Open-Shell Menu" title="Skins for Open-Shell Menu"><br>
<br>Or you can download and install additional 3rd party skins (from
the main website or from another place). After you download a new skin
you
must copy the <span style="font-weight: bold;">.skin</span> file to the Skins directory &#8211; usually <span style="font-weight: bold; color: rgb(79, 129, 189);">C:\Program
Files\Open-Shell\Skins</span>. After that it will be available in the settings.<br>
<br>
<strong>Note:</strong> Some skins may be specifically designed for
Classic, Basic, or Aero mode. For example an Aero skin may require
glass support any will look weird if the Classic or Basic theme is
selected. Some Aero skins may also require specific glass color to be
selected.<br>
<br>
You can create your own skin. You will need an image editor that
supports alpha channel (like Gimp or Photoshop) and a tool to edit
resource files (like Resource Hacker or Visual Studio). And of course
some talent for graphical design :). Read the <a target="_blank" href="http://www.classicshell.net/tutorials/skintutorial.html">Skinning Tutorial</a> before you begin.<br>
<br>
<br><br>
<h1><a name="search"></a>Search</h1><img src="images/search1.png" style="width: 403px; height: 452px;" alt=""><br>
<br>
The search box lets you search the contents of the start menu, the
programs in the PATH environment variable and the indexed files. You can have the search box
appear as a normal menu item and then you can get to it using the
up/down arrow keys. You can choose to have the search box selected by
default when you open the start menu. Or you can choose to activate the
search box only with the Tab key, so until you press Tab you can use
the keyboard for navigation as if the search box is not there.<br>
<br>
The search results show in the main menu if you are using the Windows 7 style or in a sub-menu for the classic styles.<br>
Click on each category to expand it and see more results. Click on the icon at the end to view all results in Explorer.<br>
<br>
The classic styles allow you to register additional "search providers", which you can use to
search for the text from the search box. You run the search program
either by selecting it from the menu, or by
pressing Alt+key. In this example use Alt+A for Agent Ransack.<br>
<img src="images/search2.png" style="width: 412px; height: 345px;" alt=""><br>
<br>
This is done by adding sub-items of the SearchBoxItem in the <span style="font-weight: bold;">Customize Start Menu</span> tab:<br>
<img src="images/search3.png" style="width: 347px; height: 197px;" alt=""><br>
<br>
Open each of the sub-items and enter a command to start the search program. If you use <span style="font-weight: bold;">%1</span> in the command, it will be replaced by the contents of the search box. If you use <span style="font-weight: bold;">%2</span>
it will be replaced by the url-style encoded search text. Enter a
label, tip, and icon to complete your menu entry. In the label text you
can use <span style="font-weight: bold;">&amp;</span> to mark the accelerator character (for example <span style="font-weight: bold;">&amp;Agent Ransack</span>).<br>
<br>
Here are a few possible commands:<br>
Search with Agent Ransack: <span style="font-weight: bold;">"C:\Program Files\Agent Ransack\AgentRansack.exe" -r -f "%1"</span><br>
Search with Everything: <span style="font-weight: bold;">"C:\Program Files\Everything\Everything.exe" -search "%1"</span><br>
Search with Google: <span style="font-weight: bold;">http://www.google.com/#q=%2</span><br>
Search with Bing: <span style="font-weight: bold;">http://www.bing.com/search?q=%2</span><br>
<br>
<br>
<h1><a name="button"></a>Custom Start Button<br>
</h1>Open-Shell can add its own start button to the taskbar. It can
even replace the default start button in Windows 7. You can choose from
an Aero-style orb, a rectangular classic button, or
you can make your own. For a custom start button you need an image that
contain the 3 states of the button - normal, hot and pressed:<br>
<img src="images%5Cbutton_images.png" style="width: 64px; height: 192px;" alt="Start button images" title="Start button images"><br>
The image must be a 32-bit PNG or BMP. By default the width of the
image determines the size of the button. You can override that by
entering a custom width.<br>
Read the <a href="http://www.classicshell.net/tutorials/buttontutorial.html">Button Tutorial</a> for more information about creating custom buttons.<br>
You can find many custom start button images online. Here are few examples:<br>
<a href="http://www.classicshell.net/forum/viewforum.php?f=18">http://www.classicshell.net/forum/viewforum.php?f=18</a><br>
<a target="_blank" href="http://www.sevenforums.com/themes-styles/34951-custom-start-menu-button-collection.html">http://www.sevenforums.com/themes-styles/34951-custom-start-menu-button-collection.html<br>
</a><a target="_blank" href="http://www.sevenforums.com/customization/78291-big-group-custom-start-orbs.html">http://www.sevenforums.com/customization/78291-big-group-custom-start-orbs.html</a><br>
<a target="_blank" href="http://tutoriales13.deviantart.com/art/Orbs-153450418">http://tutoriales13.deviantart.com/art/Orbs-153450418</a><br>
<br>
<br>
<h1><a name="localization"></a>Localization</h1>
The user interface (except the Settings dialog box) is localized in 35
languages.<br>
The Settings dialog box is translated in a smaller number of languages.
The default installation contains only English. More languages can be
downloaded from the <a href="http://www.classicshell.net/translations/">translations page</a>. Make sure you download the translation package for the exact version of Open-Shell.<br>
<br>
<br><h1><a name="command_line"></a>Command Line</h1>
The <span style="font-weight: bold; color: rgb(0, 112, 192);">StartMenu.exe</span> supports 5 command line parameters: <span style="font-weight: bold; color: rgb(0, 112, 192);">-open</span>, <span style="font-weight: bold; color: rgb(0, 112, 192);">-toggle</span>, <span style="font-weight: bold; color: rgb(0, 112, 192);">-togglenew</span>, <span style="font-weight: bold; color: rgb(0, 112, 192);">-exit </span>and <span style="font-weight: bold; color: rgb(0, 112, 192);">-settings</span>.<br>
<br>
The first two do what the name suggests. One opens the classic start menu, the other
toggles it. You can use the parameters to create a shortcut in your
QuickLaunch bar that opens the start menu. Or to set a hotkey in
programs such as <a target="_blank" href="http://www.softpedia.com/get/System/OS-Enhancements/WinKey.shtml">WinKey</a>.<br>
<br>
The third one "-togglenew" toggles the default Windows start menu (or start screen). It is useful if
you want to create a shortcut or a hotkey to open the default menu and use the Win
key for the classic menu.<br>
<br>
Use "-exit" to exit the start menu. This command will only work if the start menu is not currently busy.<br>
<br>
Use "-settings" to open the start menu settings. This is useful for creating a shortcut for editing the settings.<br>
<br>
<br>
<h1><a name="accessibility"></a>Accessibility</h1>The start menu supports screen readers like JAWS,
or Microsoft's Narrator. If the accessibility support causes problems it can be disabled from the <span style="font-weight: bold;">General Behavior</span> tab of the Settings.<br>
<br>
</body></html>

View File

@@ -1,192 +0,0 @@
; DON'T TRANSLATE =============================================================
; disabled
CrashDump.supportedOn = never
LogLevel.supportedOn = never
OldProgramsAge.supportedOn = never
DefaultMenuStyle.supportedOn = never
MenuItems.supportedOn = never
Skin1.supportedOn = never
SkinOptions1.supportedOn = never
SkinVariation1.supportedOn = never
Skin2.supportedOn = never
SkinVariation2.supportedOn = never
SkinOptions2.supportedOn = never
SkipMetroCount.supportedOn = never
CompatibilityFixes.supportedOn = never
; skins
SkinC1.supportedOn = classic1
SkinVariationC1.supportedOn = classic1
SkinOptionsC1.supportedOn = classic1
MenuItems1.supportedOn = classic1
SkinC2.supportedOn = classic2
SkinVariationC2.supportedOn = classic2
SkinOptionsC2.supportedOn = classic2
MenuItems2.supportedOn = classic2
SkinW7.supportedOn = win7_style
SkinVariationW7.supportedOn = win7_style
SkinOptionsW7.supportedOn = win7_style
MenuItems7.supportedOn = win7_style
; style-specific
Computer.supportedOn = classic
Favorites.supportedOn = classic
Documents.supportedOn = classic
UserFiles.supportedOn = classic
UserDocuments.supportedOn = classic
UserPictures.supportedOn = classic
ControlPanel.supportedOn = classic
Network.supportedOn = classic
Printers.supportedOn = classic
Shutdown.supportedOn = classic
LogOff.supportedOn = classic
Undock.supportedOn = classic
Search.supportedOn = classic
Help.supportedOn = classic
Run.supportedOn = classic
SearchFilesCommand.supportedOn = classic
SearchResults.supportedOn = classic
SearchResultsMax.supportedOn = classic
MaxMainMenuWidth.supportedOn = classic
MainMenuAnimation.supportedOn = classic
MainMenuAnimationSpeed.supportedOn = classic
MainMenuScrollSpeed.supportedOn = classic
MenuCaption.supportedOn = classic
MenuUsername.supportedOn = classic
ShutdownCommand.supportedOn = win7_style
MinMainHeight.supportedOn = win7_style
ProgramsStyle.supportedOn = win7_style
FoldersFirst.supportedOn = win7_style
OpenPrograms.supportedOn = win7_style
ProgramsMenuDelay.supportedOn = win7_style
ShutdownW7.supportedOn = win7_style
ProgramsWidth.supportedOn = win7_style
JumplistWidth.supportedOn = win7_style
; windows 7
CascadeAll.supportedOn = win7
AllProgramsDelay.supportedOn = win7
InitiallySelect.supportedOn = win7
HideUserPic.supportedOn = win7
SkinA.supportedOn = win7
SkinVariationA.supportedOn = win7
SkinOptionsA.supportedOn = win7
; metro settings
AllTaskbars.supportedOn = win881
AllProgramsMetro.supportedOn = win881
HideProgramsMetro.supportedOn = win881
RecentMetroApps.supportedOn = win881
StartScreenShortcut.supportedOn = win881
SearchMetroApps.supportedOn = win881
DisableHotCorner.supportedOn = win881
OpenMouseMonitor.supportedOn = win881
SkipMetro.supportedOn = win8
; TRANSLATE ===================================================================
Title.text = Open-Shell settings
State.text = State:
State1.text = Locked to this value
State2.text = Locked to default
State3.text = Unlocked
State1Help.text = If you set the state to 'Locked to this value', the setting will be locked to the specified value for all users.
State2Help.text = If you set the state to 'Locked to default', the setting will be locked to the default value for all users. The specified value is ignored.
State3Help.text = If you set the state to 'Unlocked', the default value for the setting will be changed to the specified value. Individual users can override the setting.
MenuCat.text = Open-Shell Menu
MenuCatHelp.text = Open-Shell Menu group policy settings
SUPPORTED_CS404.text = Requires Open-Shell 4.0.4 or later.
SUPPORTED_CS404_WIN7.text = Requires Windows 7.
SUPPORTED_CS404_WIN78.text = Requires Windows 7 or Windows 8.
SUPPORTED_CS404_WIN781.text = Requires Windows 7 or Windows 8.1.
SUPPORTED_CS404_WIN8.text = Requires Windows 8.
SUPPORTED_CS404_WIN881.text = Requires Windows 8 or Windows 8.1.
SUPPORTED_CS404_WIN81.text = Requires Windows 8.1.
SUPPORTED_CS404_CLASSIC1_STYLE.text = Requires Classic menu style with one column.
SUPPORTED_CS404_CLASSIC2_STYLE.text = Requires Classic menu style with two columns.
SUPPORTED_CS404_CLASSIC_STYLE.text = Requires Classic menu style.
SUPPORTED_CS404_WIN7_STYLE.text = Requires Windows 7 menu style.
EnableSettings.nameOverride = Enable settings
EnableSettings.tipOverride = Enables the users to edit their own settings
MenuStyle.nameOverride = Menu style
MenuStyle.tipOverride = Select the style for the start menu.\nThe style determines the overall look and functionality of the menu.
MenuStyle_Classic1.nameOverride = Classic with one column
MenuStyle_Classic2.nameOverride = Classic with two columns
MenuStyle_Win7.nameOverride = Windows 7
MouseClick.nameOverride = Left Click opens
ShiftClick.nameOverride = Shift+Click opens
WinKey.nameOverride = Windows Key opens
ShiftWin.nameOverride = Shift+Win opens
MiddleClick.nameOverride = Middle Click opens
Hover.nameOverride = Hover opens
; skins
SkinC1.nameOverride = Skin for classic menu with one column
SkinC1.tipOverride = Select the skin to be used by the classic style with one column
SkinVariationC1.nameOverride = Skin variation for classic menu with one column
SkinVariationC1.tipOverride = Select the skin variation to be used by the classic style with one column (for skins that support multiple variations)
SkinOptionsC1.nameOverride = Skin options for classic menu with one column
SkinOptionsC1.tipOverride = Select the skin options to be used by the classic style with one column.\nThe options are a list of hex numbers. The best way to get them is to adjust the options in the Open-Shell Menu settings dialog and then look up the value named SkinOptionsC1 in HKCU\Software\OpenShell\StartMenu\Settings
MenuItems1.nameOverride = Menu items for classic menu with one column
MenuItems1.tipOverride = Select the menu items to be used by the classic style with one column.\nThe best way to get the right string is to configure the items in the Open-Shell Menu settings dialog and then look up the value named MenuItems1 in HKCU\Software\OpenShell\StartMenu\Settings
SkinC2.nameOverride = Skin for classic menu with two columns
SkinC2.tipOverride = Select the skin to be used by the classic style with two columns
SkinVariationC2.nameOverride = Skin variation for classic menu with two columns
SkinVariationC2.tipOverride = Select the skin variation to be used by the classic style with two columns (for skins that support multiple variations)
SkinOptionsC2.nameOverride = Skin options for classic menu with two columns
SkinOptionsC2.tipOverride = Select the skin options to be used by the classic style with two columns.\nThe options are a list of hex numbers. The best way to get them is to adjust the options in the Open-Shell Menu settings dialog and then look up the value named SkinOptionsC2 in HKCU\Software\OpenShell\StartMenu\Settings
MenuItems2.nameOverride = Menu items for classic menu with two columns
MenuItems2.tipOverride = Select the menu items to be used by the classic style with two columns.\nThe best way to get the right string is to configure the items in the Open-Shell Menu settings dialog and then look up the value named MenuItems2 in HKCU\Software\OpenShell\StartMenu\Settings
SkinW7.nameOverride = Skin for the Windows 7 style
SkinW7.tipOverride = Select the skin to be used by the Windows 7 style
SkinVariationW7.nameOverride = Skin variation for the Windows 7 style
SkinVariationW7.tipOverride = Select the skin variation to be used by the Windows 7 style (for skins that support multiple variations)
SkinOptionsW7.nameOverride = Skin options for the Windows 7 style
SkinOptionsW7.tipOverride = Select the skin options to be used by the Windows 7 style.\nThe options are a list of hex numbers. The best way to get them is to adjust the options in the Open-Shell Menu settings dialog and then look up the value named SkinOptionsW7 in HKCU\Software\OpenShell\StartMenu\Settings
MenuItems7.nameOverride = Menu items for the Windows 7 style
MenuItems7.tipOverride = Select the menu items to be used by the Windows 7 style.\nThe best way to get the right string is to configure the items in the Open-Shell Menu settings dialog and then look up the value named MenuItems7 in HKCU\Software\OpenShell\StartMenu\Settings
; windows 7
SkinA.nameOverride = Skin for the All Programs sub-menu for the Windows 7 start menu
SkinA.tipOverride = Select the skin to be used by the All Programs sub-menu for the Windows 7 start menu
SkinVariationA.nameOverride = Skin variation for the All Programs sub-menu for the Windows 7 start menu
SkinVariationA.tipOverride = Select the skin variation to be used by the All Programs sub-menu for the Windows 7 start menu (for skins that support multiple variations)
SkinOptionsA.nameOverride = Skin options for the All Programs sub-menu for the Windows 7 start menu
SkinOptionsA.tipOverride = Select the skin options to be used by the All Programs sub-menu for the Windows 7 start menu.\nThe options are a list of hex numbers. The best way to get them is to adjust the options in the Open-Shell Menu settings dialog and then look up the value named SkinOptionsA in HKCU\Software\OpenShell\StartMenu\Settings
; metro settings
SkipMetro.tipAddition = This setting doesn't work for Windows 8.1. You need to use the built-in Windows setting for booting to Desktop
; hidden
FolderStartMenu.nameOverride = Start Menu folder
FolderStartMenu.tipOverride = Enter an override for the per-user start menu folder (also overrides the per-user Programs folder).\nThe path can contain environment variables.\nNote: This setting is not editable from the Settings dialog
FolderPrograms.nameOverride = Programs folder
FolderPrograms.tipOverride = Enter an override for the per-user Programs folder.\nThe path can contain environment variables.\nNote: This setting is not editable from the Settings dialog
FolderCommonStartMenu.nameOverride = Common Start Menu folder
FolderCommonStartMenu.tipOverride = Enter an override for the common start menu folder (also overrides the common Programs folder).\nThe path can contain environment variables.\nNote: This setting is not editable from the Settings dialog
FolderCommonPrograms.nameOverride = Common Programs folder
FolderCommonPrograms.tipOverride = Enter an override for the common Programs folder.\nThe path can contain environment variables.\nNote: This setting is not editable from the Settings dialog
AutoStartDelay.nameOverride = Auto-start delay
AutoStartDelay.tipOverride = Enter a delay in ms when launching the start menu automatically during login (does not apply when starting the menu manually by running StartMenu.exe).\nNote: This setting is not editable from the Settings dialog
; other
StartButtonIcon.tipAddition = The value can be a path to an ICO file or a path to an EXE/DLL and an the ID of the icon
StartButtonPath.tipAddition = The value is a full path to the BMP or PNG file
SoundMain.tipAddition = The value can be a name of a system event or a path to a WAV file
SoundPopup.tipAddition = The value can be a name of a system event or a path to a WAV file
SoundCommand.tipAddition = The value can be a name of a system event or a path to a WAV file
SoundDrop.tipAddition = The value can be a name of a system event or a path to a WAV file
ExpandFolderLinks.tipAddition = Only works for symbolic links (like junctions) and not for plain shortcuts
StartHoverDelay.nameOverride = Hover delay (for Start button)
AllProgramsDelay.nameOverride = Hover delay (for All Programs in Windows 7)
CSMHotkey.tipAddition = .\n\nThe base value is the main key's virtual code. Add 256 for Shift, 512 for Control and 1024 for Alt.\nThe best way to get the value is to select the hotkey in the Open-Shell Menu settings dialog and then look up the value named CSMHotkey in HKCU\Software\OpenShell\StartMenu\Settings
WSMHotkey.tipAddition = .\n\nThe base value is the main key's virtual code. Add 256 for Shift, 512 for Control and 1024 for Alt.\nThe best way to get the value is to select the hotkey in the Open-Shell Menu settings dialog and then look up the value named WSMHotkey in HKCU\Software\OpenShell\StartMenu\Settings

View File

@@ -1,16 +0,0 @@
[OPTIONS]
Compatibility=1.1 or later
Compiled file=OpenShell.chm
Contents file=OpenShellTOC.hhc
Default topic=Main.html
Display compile progress=Yes
Language=0x409 English (United States)
[FILES]
ClassicExplorer.html
Menu.html
ClassicIE.html
[INFOTYPES]

View File

@@ -1,19 +0,0 @@
; TRANSLATE ===================================================================
Title.text = Open-Shell settings
State.text = State:
State1.text = Locked to this value
State2.text = Locked to default
State3.text = Unlocked
State1Help.text = If you set the state to 'Locked to this value', the setting will be locked to the specified value for all users.
State2Help.text = If you set the state to 'Locked to default', the setting will be locked to the default value for all users. The specified value is ignored.
State3Help.text = If you set the state to 'Unlocked', the default value for the setting will be changed to the specified value. Individual users can override the setting.
OpenShellCat.text = Open-Shell
OpenShellCatHelp.text = Open-Shell group policy settings
SUPPORTED_CS404.text = Requires Open-Shell 4.0.4 or later.
Language.nameOverride = Language for Open-Shell components
Language.tipOverride = Select the language to be used by Open-Shell (for example en-US or de-DE). The language will affect the text in the start menu, toolbars, etc. If the appropriate language DLL is installed, the settings UI may also be translated
Update.nameOverride = Enable automatic checks for new versions
Update.tipOverride = When this is checked, Open-Shell will check for new releases every week. You will be notified if there is a new version of the Open-Shell software or a new update for your current language

View File

@@ -1,106 +0,0 @@
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fprq2\fcharset0 Cambria;}{\f1\fswiss\fprq2\fcharset0 Calibri;}{\f2\fnil\fcharset2 Symbol;}}
{\colortbl ;\red23\green54\blue93;\red79\green129\blue189;\red0\green112\blue192;\red0\green0\blue255;\red54\green95\blue145;}
{\stylesheet{ Normal;}{\s1 heading 1;}}
{\*\generator Riched20 10.0.17134}{\*\mmathPr\mnaryLim0\mdispDef1\mwrapIndent1440 }\viewkind4\uc1
\pard\brdrb\brdrs\brdrw20\brsp80 \widctlpar\sa300\qc\cf1\expndtw5\kerning28\f0\fs52 Open-Shell\par
\pard\widctlpar\cf0\expndtw0\b0\i0\f1\fs22\par
Thank you for installing \cf3\b Open-Shell\'99\cf0\b0 . It adds some missing features to Windows 7, Windows 8, Windows 8.1 and Windows 10 - like a classic start menu, start button, a toolbar for Windows Explorer and others.\par
\par
The latest version can be found on the Open-Shell website:\par
{{\field{\*\fldinst{HYPERLINK http://www.classicshell.net/ }}{\fldrslt{http://www.classicshell.net/\ul0\cf0}}}}\f1\fs22\par
\par
For answers to frequently asked questions look here:\par
{{\field{\*\fldinst{HYPERLINK http://www.classicshell.net/faq/ }}{\fldrslt{http://www.classicshell.net/faq/\ul0\cf0}}}}\f1\fs22\par
\par
Or use the discussion forums to get help:\par
{{\field{\*\fldinst{HYPERLINK http://www.classicshell.net/forum/viewforum.php?f=6 }}{\fldrslt{http://www.classicshell.net/forum/viewforum.php?f=6\ul0\cf0}}}}\f1\fs22\par
\par
Report problems in the Open-Shell development forums:\par
{{\field{\*\fldinst{HYPERLINK http://www.classicshell.net/forum/viewforum.php?f=11 }}{\fldrslt{http://www.classicshell.net/forum/viewforum.php?f=11\ul0\cf0}}}}\f1\fs22\par
\par
\pard\keep\keepn\widctlpar\s1\sb480\sl276\slmult1\cf5\b\f0\fs28 Open-Shell Menu\par
\pard\widctlpar\cf0\b0\f1\fs22\par
\cf3\b Open-Shell Menu\cf0 \b0 is a flexible start menu that can mimic the menu behavior of Windows 2000, XP and Windows 7. It has a variety of advanced features:\par
\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\widctlpar\fi-360\li720 Choose between \ldblquote Classic\rdblquote and \ldblquote Windows 7\rdblquote styles\par
{\pntext\f2\'B7\tab}Drag and drop to let you organize your applications\par
{\pntext\f2\'B7\tab}Options to show Favorites, expand Control Panel, etc\par
{\pntext\f2\'B7\tab}Shows recently used documents. The number of documents to display is customizable\par
{\pntext\f2\'B7\tab}Translated in 35 languages, including Right-to-left support for Arabic and Hebrew\par
{\pntext\f2\'B7\tab}Does not disable the original start menu in Windows. You can access it by Shift+Click on the start button\par
{\pntext\f2\'B7\tab}Right-click on an item in the menu to delete, rename, sort, or perform other tasks\par
{\pntext\f2\'B7\tab}The search box helps you find your programs and files without getting in the way of your keyboard shortcuts\par
{\pntext\f2\'B7\tab}Supports jumplists for easy access to recent documents and common tasks\par
{\pntext\f2\'B7\tab}Available for 32 and 64-bit operating systems\par
{\pntext\f2\'B7\tab}Has support for skins, including additional 3rd party skins. Make your own!\par
{\pntext\f2\'B7\tab}Fully customizable in both looks and functionality\par
{\pntext\f2\'B7\tab}Support for Microsoft\rquote s Active Accessibility\par
{\pntext\f2\'B7\tab}Converts the \ldblquote All Programs\rdblquote button in the Windows menu into a cascading menu\par
{\pntext\f2\'B7\tab}Implements a customizable start button\par
{\pntext\f2\'B7\tab}Can show, search and launch Windows Store apps (Windows 8)\par
\pard\keep\keepn\widctlpar\s1\sb480\sl276\slmult1\cf5\b\f0\fs28 Classic Explorer\par
\pard\widctlpar\cf0\b0\f1\fs22\par
\cf3\b Classic Explorer\cf0 \b0 is a plugin for Windows Explorer that:\par
\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\widctlpar\fi-360\li720 Adds a toolbar to Explorer for some common operations (Go to parent folder, Cut, Copy, Paste, Delete, Properties, Email). The toolbar is fully customizable\par
{\pntext\f2\'B7\tab}Replaces the copy UI in Windows 7 with the more user-friendly \ldblquote classic\rdblquote version similar to Windows XP\par
{\pntext\f2\'B7\tab}Handles Alt+Enter in the folder panel of Windows Explorer and shows the properties of the selected folder\par
{\pntext\f2\'B7\tab}Has options for customizing the folder panel to look more like the Windows XP version or to not fade the expand buttons\par
{\pntext\f2\'B7\tab}Can show the free disk space and the total size of the selected files in the status bar\par
{\pntext\f2\'B7\tab}Can disable the breadcrumbs in the address bar\par
{\pntext\f2\'B7\tab}Fixes a long list of features that are broken in Windows 7 \endash missing icon overlay for shared folders, the jumping folders in the navigation pane, missing sorting headers in list view, and more\par
\pard\keep\keepn\widctlpar\s1\sb480\sl276\slmult1\cf5\b\f0\fs28 Classic IE\par
\pard\widctlpar\cf0\b0\f1\fs22\par
\cf3\b Classic IE is a plugin for Internet Explorer 9 and later versions that:\par
\cf0\b0\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\widctlpar\fi-360\li720 Adds a caption to the title bar so you can see the full title of the page\par
{\pntext\f2\'B7\tab}Shows the security zone in the status bar\par
{\pntext\f2\'B7\tab}Shows the loading progress in the status bar\par
\pard\keep\keepn\widctlpar\s1\sb480\sl276\slmult1\cf5\b\f0\fs28 Installation instructions\par
\pard\widctlpar\cf0\b0\f1\fs22\par
The toolbar for Windows Explorer may not show up automatically after installation. You have to do a few things before you can use it.\par
\par
\cf3\b Windows 7:\cf0\b0 Press Alt+V to open the View menu. Open the \ldblquote Toolbars\rdblquote sub-menu and select \ldblquote Classic Exlporer Bar\rdblquote . Keep in mind that the menu will always be displayed as long as the toolbar is visible.\par
\par
\cf3\b Windows 8:\cf0\b0 Press Alt+V to open the View ribbon. Click on the down arrow in the \ldblquote Options\rdblquote section. Select \ldblquote Classic Explorer Bar\rdblquote\par
\par
If these steps don\rquote t work, it may be possible that the Explorer extensions have been disabled. Check the following, then try to show the toolbar again:\par
\pard
{\pntext\f1 1)\tab}{\*\pn\pnlvlbody\pnf1\pnindent0\pnstart1\pndec{\pntxta)}}
\widctlpar\fi-360\li720 Open Internet Explorer and go to Tools -> Manage add-ons. Locate the add-ons \ldblquote Classic Explorer Bar\rdblquote and \ldblquote ExplorerBHO Class\rdblquote and make sure they are enabled.\par
{\pntext\f1 2)\tab}Maybe the browser extensions are disabled on your system. This is usually the default for Windows Server. Open the "Internet Options", go to the "Advanced" tab, and check the option "Enable third-party browser extensions".\par
\pard\widctlpar\par
On Windows 7 you have to turn on the status bar from the View menu if you want to see the file sizes.\par
On Windows 8 the Classic Explorer status bar is different from the one in Explorer. You can show/hide the first one from the Classic Explorer settings dialog and show/hide the second one from Explorer\rquote s folder options dialog.\par
\par
The caption in Internet Explorer may not show up automatically after installation. You may get a prompt to enable the ClassicIEBHO plugin. If you get the prompt, select \ldblquote Enable\rdblquote . If you don\rquote t get a prompt, go to Tools -> Manage add-ons and make sure the add-on \ldblquote ClassicIEBHO\rdblquote is enabled. After that restart Internet Explorer.\par
\pard\keep\keepn\widctlpar\s1\sb480\sl276\slmult1\cf5\b\f0\fs28 Uninstallation\par
\pard\widctlpar\cf0\b0\f1\fs22\par
To uninstall \cf3\b Open-Shell\cf0\b0 follow these steps:\par
\pard
{\pntext\f1 1)\tab}{\*\pn\pnlvlbody\pnf1\pnindent0\pnstart1\pndec{\pntxta)}}
\widctlpar\fi-360\li720 Open \b Control Panel -> Programs and Features\b0 and double-click on \b Open-Shell\b0 . Then follow the instructions. You may have to restart Windows to complete the process.\par
{\pntext\f1 2)\tab}If you installed any additional skins for the start menu you will have to delete them manually\par
\pard\widctlpar\par
\pard\widctlpar\sa200\sl276\slmult1\par
}

View File

@@ -1,138 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
<!-- Sitemap 1.0 -->
</HEAD><BODY>
<OBJECT type="text/site properties">
<param name="ImageType" value="Folder">
</OBJECT>
<UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Open-Shell">
<param name="Local" value="Main.html">
<param name="ImageNumber" value="11">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Open-Shell Menu">
<param name="Local" value="Menu.html">
<param name="ImageNumber" value="1">
</OBJECT>
<UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Styles">
<param name="Local" value="Menu.html#styles">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Operation">
<param name="Local" value="Menu.html#operation">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Settings">
<param name="Local" value="Menu.html#settings">
<param name="URL" value="Menu.html#settings">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Administrative Settings">
<param name="Local" value="Menu.html#admin">
<param name="URL" value="Menu.html#admin">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="More About Skins">
<param name="Local" value="Menu.html#skins">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Search">
<param name="Local" value="Menu.html#search">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Custom Start Button">
<param name="Local" value="Menu.html#button">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Localization">
<param name="Local" value="Menu.html#localization">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Command Line">
<param name="Local" value="Menu.html#command_line">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Accessibility">
<param name="Local" value="Menu.html#accessibility">
</OBJECT>
</UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Classic Explorer">
<param name="Local" value="ClassicExplorer.html">
<param name="ImageNumber" value="1">
</OBJECT>
<UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="New Copy UI">
<param name="Local" value="ClassicExplorer.html#copy">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Alt+Enter in the folder panel">
<param name="Local" value="ClassicExplorer.html#alt_enter">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Toolbar for Windows Explorer">
<param name="Local" value="ClassicExplorer.html#toolbar">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Status bar">
<param name="Local" value="ClassicExplorer.html#statusbar">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Settings">
<param name="Local" value="ClassicExplorer.html#settings">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Examples for Custom Commands">
<param name="Local" value="ClassicExplorer.html#examples">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Administrative Settings">
<param name="Local" value="ClassicExplorer.html#admin">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Dependencies on Windows settings">
<param name="Local" value="ClassicExplorer.html#dependencies">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Localization">
<param name="Local" value="ClassicExplorer.html#localization">
</OBJECT>
</UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Classic IE">
<param name="Local" value="ClassicIE.html">
<param name="ImageNumber" value="1">
</OBJECT>
<UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Installation">
<param name="Local" value="ClassicIE.html#install">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Settings">
<param name="Local" value="ClassicIE.html#settings">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Administrative Settings">
<param name="Local" value="ClassicIE.html#admin">
</OBJECT>
</UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="License Agreement">
<param name="Local" value="License.html">
<param name="ImageNumber" value="11">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Useful Links">
<param name="Local" value="Links.html">
<param name="ImageNumber" value="13">
</OBJECT>
</UL>
</BODY></HTML>

View File

@@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="en-US" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="Error32bit" Overridable="yes">This installer is only for 32-bit version of Windows. For 64-bit Windows you need to run Setup64.</String>
<String Id="ErrorWin7" Overridable="yes">Open-Shell requires Windows 7 or above.</String>
<String Id="ErrorNewVersion" Overridable="yes">A newer version of [ProductName] is already installed. The setup will now exit.</String>
<String Id="ExplorerTitle" Overridable="yes">Classic Explorer</String>
<String Id="ExplorerDesc" Overridable="yes">Classic Explorer adds a toolbar to Windows Explorer, replaces the copy UI and fixes some usability problems</String>
<String Id="StartMenuTitle" Overridable="yes">Open-Shell Menu</String>
<String Id="StartMenuDesc" Overridable="yes">Open-Shell Menu is a highly customizable replacement for the Windows start menu</String>
<String Id="IETitle" Overridable="yes">Classic IE</String>
<String Id="IEDesc" Overridable="yes">Classic IE lets you customize the title bar and the status bar of Internet Explorer</String>
<String Id="UpdateTitle" Overridable="yes">Open-Shell Update</String>
<String Id="UpdateDesc" Overridable="yes">Open-Shell Update checks periodically for new versions</String>
<String Id="HelpDesc" Overridable="yes">View the Open-Shell documentation</String>
<String Id="ReadmeDesc" Overridable="yes">View the Open-Shell introduction</String>
<String Id="ExplorerSettingsDesc" Overridable="yes">Edit the settings of Classic Explorer</String>
<String Id="StartSettingsDesc" Overridable="yes">Edit the settings of the classic start menu</String>
<String Id="IESettingsDesc" Overridable="yes">Edit the settings of the Internet Explorer title bar and status bar</String>
<String Id="UpdateSettingsDesc" Overridable="yes">Edit the settings for Open-Shell's new version check</String>
<String Id="StartMenuFolder" Overridable="yes">Create a start menu folder</String>
<String Id="WebLink" Overridable="yes">Open-Shell website</String>
<String Id="DonateLink" Overridable="yes">Donate to Open-Shell</String>
<String Id="FacebookLink" Overridable="yes">Visit us on Facebook</String>
<String Id="ViewReadme" Overridable="yes">View Readme file</String>
<String Id="HelpItem" Overridable="yes">Open-Shell Help</String>
<String Id="ReadmeItem" Overridable="yes">Open-Shell Readme</String>
<String Id="UpdateItem" Overridable="yes">Open-Shell Update</String>
<String Id="ExplorerItem" Overridable="yes">Classic Explorer Settings</String>
<String Id="StartMenuItem" Overridable="yes">Open-Shell Menu Settings</String>
<String Id="IEItem" Overridable="yes">Classic IE Settings</String>
<String Id="StartScreenDesc" Overridable="yes">Open the Start screen</String>
<String Id="OpenShellDesc" Overridable="yes">Open-Shell is a collection of usability enhancements for Windows</String>
</WixLocalization>

Binary file not shown.
Can't render this file because it contains an unexpected character in line 45 and column 45.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,33 +1,43 @@
## Open-Shell ![Open-Shell](/Src/Setup/OpenShell.ico)
<a href="#"><img src=/Src/Setup/OpenShell.ico width="80" align="left"/></a>
# Open-Shell
A collection of utilities bringing back classic features to Windows.
*Originally* **[Classic Shell](http://www.classicshell.net)** *by [Ivo Beltchev](https://sourceforge.net/u/ibeltchev/profile/)*
[![GitHub Release](https://img.shields.io/github/release/Open-Shell/Open-Shell-Menu.svg)](https://github.com/Open-Shell/Open-Shell-Menu/releases) [![GitHub Pre-Release](https://img.shields.io/github/release/Open-Shell/Open-Shell-Menu/all.svg)](https://github.com/Open-Shell/Open-Shell-Menu/releases) [![Build status](https://ci.appveyor.com/api/projects/status/2wj5x5qoypfjj0tr/branch/master?svg=true)](https://ci.appveyor.com/project/passionate-coder/open-shell-menu/branch/master) [![GitQ](https://gitq.com/badge.svg)](https://gitq.com/passionate-coder/Classic-Start) [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/open-shell/Lobby) [![Discord](https://img.shields.io/discord/757701054782636082?color=%4E5D94&label=Discord&logo=discord&logoColor=white)](https://discord.gg/7H6arr5)
[![GitHub Release](https://img.shields.io/github/release/Open-Shell/Open-Shell-Menu.svg?style=flat-square)](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest)&nbsp;&nbsp;[![GitHub Pre-Release](https://img.shields.io/github/release/Open-Shell/Open-Shell-Menu/all.svg?style=flat-square)](https://github.com/Open-Shell/Open-Shell-Menu/releases)&nbsp;&nbsp;[![Build status](https://img.shields.io/appveyor/build/passionate-coder/Open-Shell-Menu?logo=appveyor&style=flat-square)](https://ci.appveyor.com/project/passionate-coder/open-shell-menu/branch/master)&nbsp;&nbsp;[![GitQ](https://img.shields.io/badge/gitq-discussions-1577fa?style=flat-square)](https://gitq.com/passionate-coder/Classic-Start)&nbsp;&nbsp;[![Gitter chat](https://img.shields.io/gitter/room/badges/shields.svg?color=lightseagreen&logo=gitter&style=flat-square)](https://gitter.im/open-shell/Lobby)&nbsp;&nbsp;[![Discord](https://img.shields.io/discord/757701054782636082?color=mediumslateblue&label=Discord&logo=discord&logoColor=white&style=flat-square)](https://discord.gg/7H6arr5)
[Home Page](https://open-shell.github.io/Open-Shell-Menu)
[Discussion room](https://gitter.im/Open-Shell)
[Latest nightly build](https://ci.appveyor.com/project/passionate-coder/open-shell-menu/branch/master/artifacts)
[Open-Shell Homepage](https://open-shell.github.io/Open-Shell-Menu)
### Features
- Classic style Start Menu for Windows 7, 8, 8.1, 10
- Classic style Start menu for Windows 7, 8, 8.1, 10, and 11
- Toolbar for Windows Explorer
- Explorer status bar with file size and disk space
- Classic copy UI (Windows 7 only)
- Show file size in Explorer status bar
- Title bar and status bar for Internet Explorer
### Download
If you just want to use it or looking for setup file, click here to download:
You can find the latest stable version here:
[![GitHub All Releases](https://img.shields.io/github/downloads/Open-Shell/Open-Shell-Menu/total?style=for-the-badge)](https://github.com/Open-Shell/Open-Shell-Menu/releases)
[![GitHub All Releases](https://img.shields.io/github/downloads/Open-Shell/Open-Shell-Menu/total?style=for-the-badge&color=4bc2ee&logo=github)](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest)
> [!IMPORTANT]
> #### Windows for ARM compatibility
> Open-Shell is compatible with Windows for ARM since version [4.4.196](https://github.com/Open-Shell/Open-Shell-Menu/releases/tag/v4.4.196).
>
> If you install older one on a Windows for ARM installation (ex. using Parallels Desktop on an Apple Silicon Mac), you will no longer be able to log into your account the next time you reboot. Please refrain from installing Open-Shell on Windows for ARM.
### Temporary Translation/Language Solution
1. Download [language DLL](https://coddec.github.io/Classic-Shell/www.classicshell.net/translations/index.html)
2. Place it either in the Open-Shell's __install folder__ or in the `%ALLUSERSPROFILE%\OpenShell\Languages` folder
---
----
*For archival reasons, we have a mirror of `www.classicshell.net` [here](https://coddec.github.io/Classic-Shell/www.classicshell.net/).*
[How To Skin a Start Menu](https://coddec.github.io/Classic-Shell/www.classicshell.net/tutorials/skintutorial.html)
[Classic Shell - Custom Start Buttons](https://coddec.github.io/Classic-Shell/www.classicshell.net/tutorials/buttontutorial.html)
[Report a bug/issue or submit a feature request](https://github.com/Open-Shell/Open-Shell-Menu/issues)
[Classic Shell: Custom Start Buttons](https://coddec.github.io/Classic-Shell/www.classicshell.net/tutorials/buttontutorial.html)
[Questions? Ask on the Discussions section](https://github.com/Open-Shell/Open-Shell-Menu/discussions) or on [Discord](https://discord.gg/7H6arr5)
[Submit a bug report/feature request](https://github.com/Open-Shell/Open-Shell-Menu/issues)

View File

@@ -5,12 +5,12 @@ for other languages.
The final files (installers, archives) are saved to the Setup\Final folder.
You need the following tools:
Visual Studio 2019 (Community Edition is enough)
Visual Studio 2022 (Community Edition is enough)
- Desktop development with C++ workload
- Windows 10 SDK (10.0.19041.0) for Desktop C++
- Windows 11 SDK (10.0.22621.0) for Desktop C++
- Visual C++ ATL support
HTML Help Workshop
WiX 3.7
WiX 3.14
7-Zip
It is possible to convert the projects to newer versions of Visual Studio and newer SDKs.
Newer versions of WiX will probably work fine.

View File

@@ -7,7 +7,7 @@
#pragma once
#include "resource.h" // main symbols
#include "ClassicExplorer_i.h"
#include "ClassicExplorer_h.h"
#include <vector>
// CClassicCopyExt

View File

@@ -6,7 +6,7 @@
#include "stdafx.h"
#include "resource.h"
#include "ClassicExplorer_i.h"
#include "ClassicExplorer_h.h"
#include "dllmain.h"
// Used to determine whether the DLL can be unloaded by OLE

View File

@@ -1,6 +1,14 @@
<?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="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
@@ -9,6 +17,14 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@@ -17,6 +33,14 @@
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64EC">
<Configuration>Setup</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration>
<Platform>Win32</Platform>
@@ -33,337 +57,54 @@
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization Condition="'$(Configuration)'!='Debug'">true</WholeProgramOptimization>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
<ImportGroup Label="PropertySheets">
<Import Project="..\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>true</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='Win32'">
<TargetName>$(ProjectName)32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>true</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='x64'">
<TargetName>$(ProjectName)64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='ARM64EC'">
<TargetName>$(ProjectName)64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'">
<OutDir>$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'">
<OutDir>$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<TargetName>$(ProjectName)64</TargetName>
<BuildAsX>true</BuildAsX>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicExplorer_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicExplorer_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicExplorer_p.c</ProxyFileName>
<ValidateAllParameters>true</ValidateAllParameters>
</Midl>
<PropertyGroup>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<PreprocessorDefinitions>_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>$(TargetName).def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'!='Setup'">
<Link>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<PerUserRedirection>true</PerUserRedirection>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicExplorer_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicExplorer_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicExplorer_p.c</ProxyFileName>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<PerUserRedirection>true</PerUserRedirection>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicExplorer_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicExplorer_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicExplorer_p.c</ProxyFileName>
<ValidateAllParameters>true</ValidateAllParameters>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<PerUserRedirection>true</PerUserRedirection>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicExplorer_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicExplorer_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicExplorer_p.c</ProxyFileName>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<PerUserRedirection>true</PerUserRedirection>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicExplorer_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicExplorer_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicExplorer_p.c</ProxyFileName>
<ValidateAllParameters>true</ValidateAllParameters>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;BUILD_SETUP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicExplorer_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicExplorer_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicExplorer_p.c</ProxyFileName>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;BUILD_SETUP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>oleacc.lib;comctl32.lib;uxtheme.lib;dwmapi.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;Netapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="ClassicCopy.cpp" />
<ClCompile Include="ClassicCopyExt.cpp" />
@@ -390,7 +131,9 @@
<None Include="ClassicExplorer64.def" />
<None Include="ExplorerBand.rgs" />
<None Include="ExplorerBHO.rgs" />
<None Include="ExplorerL10N.ini" />
<None Include="ExplorerL10N.ini">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="ShareOverlay.rgs" />
</ItemGroup>
<ItemGroup>
@@ -398,7 +141,7 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="ClassicCopyExt.h" />
<ClInclude Include="ClassicExplorer_i.h" />
<ClInclude Include="ClassicExplorer_h.h" />
<ClInclude Include="dllmain.h" />
<ClInclude Include="ExplorerBand.h" />
<ClInclude Include="ExplorerBHO.h" />

View File

@@ -114,7 +114,7 @@
<ClInclude Include="Resource.h">
<Filter>Resource Files</Filter>
</ClInclude>
<ClInclude Include="ClassicExplorer_i.h">
<ClInclude Include="ClassicExplorer_h.h">
<Filter>Generated Files</Filter>
</ClInclude>
</ItemGroup>
@@ -146,4 +146,4 @@
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
</Project>
</Project>

View File

@@ -21,128 +21,26 @@
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization Condition="'$(Configuration)'!='Debug'">true</WholeProgramOptimization>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
<ImportGroup Label="PropertySheets">
<Import Project="..\..\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>..\$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>..\$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'">
<OutDir>..\$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ItemDefinitionGroup>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;BUILD_SETUP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemGroup>

View File

@@ -64,6 +64,9 @@ LRESULT CALLBACK CExplorerBHO::SubclassTreeParentProc( HWND hWnd, UINT uMsg, WPA
// - change the tree styles to achieve different looks
LRESULT CALLBACK CExplorerBHO::SubclassTreeProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData )
{
if (GetTlsData()->bho == NULL)
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
if (uMsg==TVM_ENSUREVISIBLE && (dwRefData&1))
{
// HACK! there is a bug in Win7 Explorer and when the selected folder is expanded for the first time it sends TVM_ENSUREVISIBLE for
@@ -240,7 +243,7 @@ LRESULT CALLBACK CExplorerBHO::HookExplorer( int nCode, WPARAM wParam, LPARAM lP
if (GetClassName(parent,name,_countof(name)) && _wcsicmp(name,L"CabinetWClass")==0)
{
DWORD_PTR settings=0;
if (GetWinVersion()==WIN_VER_WIN7 && GetSettingBool(L"FixFolderScroll"))
if (GetSettingBool(L"FixFolderScroll"))
settings|=1;
SetWindowSubclass(hWnd,SubclassTreeProc,'CLSH',settings);
PostMessage(hWnd,TVM_SETEXTENDEDSTYLE,TVS_EX_FADEINOUTEXPANDOS|TVS_EX_AUTOHSCROLL|0x80000000,0);

View File

@@ -9,7 +9,7 @@
#include <vector>
#include <map>
#include "ClassicExplorer_i.h"
#include "ClassicExplorer_h.h"
#include "ComHelper.h"
#include <shdispid.h>
@@ -53,7 +53,7 @@ public:
m_ZoneWidth=0;
}
DECLARE_REGISTRY_RESOURCEID(IDR_EXPLORERBHO)
DECLARE_REGISTRY_RESOURCEID_V2_WITHOUT_MODULE(IDR_EXPLORERBHO, CExplorerBHO)
BEGIN_SINK_MAP( CExplorerBHO )
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)

View File

@@ -6,7 +6,7 @@
#pragma once
#include "resource.h"
#include "ClassicExplorer_i.h"
#include "ClassicExplorer_h.h"
#include "SettingsParser.h"
#include <vector>
@@ -178,7 +178,7 @@ class ATL_NO_VTABLE CExplorerBand :
public:
CExplorerBand( void );
DECLARE_REGISTRY_RESOURCEID(IDR_EXPLORERBAND)
DECLARE_REGISTRY_RESOURCEID_V2_WITHOUT_MODULE(IDR_EXPLORERBAND, CExplorerBand)
BEGIN_SINK_MAP( CExplorerBand )
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, OnNavigateComplete)

View File

@@ -380,7 +380,7 @@ LRESULT CEditToolbarDlg::OnBrowseLink( WORD wNotifyCode, WORD wID, HWND hWndCtl,
{
wchar_t text[_MAX_PATH];
GetDlgItemText(IDC_COMBOLINK,text,_countof(text));
if (BrowseLinkHelper(m_hWnd,text))
if (BrowseLinkHelper(m_hWnd,text,false))
{
SetDlgItemText(IDC_COMBOLINK,text);
SendMessage(WM_COMMAND,MAKEWPARAM(IDC_COMBOLINK,CBN_KILLFOCUS));
@@ -621,7 +621,7 @@ void UpdateSettings( void )
UpdateSetting(L"ShowCaption",CComVariant(0),false); HideSetting(L"ShowCaption",true);
UpdateSetting(L"ShowIcon",CComVariant(0),false); HideSetting(L"ShowIcon",true);
UpdateSetting(L"FixFolderScroll",CComVariant(0),false); HideSetting(L"FixFolderScroll",true);
UpdateSetting(L"FixFolderScroll",CComVariant(0),false);
UpdateSetting(L"ToolbarItems",CComVariant(g_DefaultToolbar2),false);
if (GetWinVersion()>=WIN_VER_WIN10)

View File

@@ -8,7 +8,7 @@
#include "resource.h" // main symbols
#include <lm.h>
#include "ClassicExplorer_i.h"
#include "ClassicExplorer_h.h"
// CShareOverlay
@@ -20,7 +20,7 @@ class ATL_NO_VTABLE CShareOverlay :
public:
CShareOverlay( void );
DECLARE_REGISTRY_RESOURCEID(IDR_SHAREOVERLAY)
DECLARE_REGISTRY_RESOURCEID_V2_WITHOUT_MODULE(IDR_SHAREOVERLAY, CShareOverlay)
DECLARE_PROTECT_FINAL_CONSTRUCT()

View File

@@ -48,11 +48,6 @@ static int g_LoadDialogs[]=
0
};
const wchar_t *GetDocRelativePath( void )
{
return DOC_PATH;
}
struct FindChild
{
const wchar_t *className;
@@ -110,7 +105,7 @@ static DWORD CALLBACK DllInitThread( void* )
GetModuleFileName(g_Instance,path,_countof(path));
*PathFindFileName(path)=0;
wchar_t fname[_MAX_PATH];
Sprintf(fname,_countof(fname),L"%s" INI_PATH L"ExplorerL10N.ini",path);
Sprintf(fname,_countof(fname),L"%sExplorerL10N.ini",path);
CString language=GetSettingString(L"Language");
ParseTranslations(fname,language);

View File

@@ -5,7 +5,7 @@
// dllmain.h : Declaration of module class.
#pragma once
#include "ClassicExplorer_i.h"
#include "ClassicExplorer_h.h"
#include <vector>
class CClassicExplorerModule : public CAtlDllModuleT< CClassicExplorerModule >

View File

@@ -10,7 +10,7 @@
#define _ATL_APARTMENT_THREADED
#define _ATL_NO_AUTOMATIC_NAMESPACE
#define _ATL_MODULES // compatibility with /permissive-
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
#include "resource.h"
@@ -26,12 +26,4 @@ using namespace ATL;
#include <shlguid.h>
#include <shlobj.h>
#ifdef BUILD_SETUP
#define INI_PATH L""
#define DOC_PATH L""
#else
#define INI_PATH L"..\\"
#define DOC_PATH L"..\\..\\Docs\\Help\\"
#endif
#include "StringUtils.h"

View File

@@ -1,6 +1,10 @@
<?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="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
@@ -9,6 +13,10 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@@ -17,6 +25,10 @@
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration>
<Platform>Win32</Platform>
@@ -33,236 +45,35 @@
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization Condition="'$(Configuration)'!='Debug'">true</WholeProgramOptimization>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\Version.props" />
<ImportGroup Label="PropertySheets">
<Import Project="..\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='Win32'">
<TargetName>$(ProjectName)_32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<LinkIncremental>true</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='x64'">
<TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)_32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<LinkIncremental>false</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'">
<OutDir>$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)_32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'">
<OutDir>$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ItemDefinitionGroup>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;BUILD_SETUP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;comctl32.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemGroup>

View File

@@ -3,7 +3,7 @@
// Confidential information of Ivo Beltchev. Not for disclosure or distribution without prior written consent from the author
#include "stdafx.h"
#include "ClassicIEDLL_i.h"
#include "ClassicIEDLL_h.h"
#include "ClassicIEBHO.h"
#include "ClassicIEDLL.h"
#include "Settings.h"

View File

@@ -4,7 +4,7 @@
#include "stdafx.h"
#include "resource.h"
#include "ClassicIEDLL_i.h"
#include "ClassicIEDLL_h.h"
#include "ClassicIEDLL.h"
#include "Settings.h"
#include "dllmain.h"

View File

@@ -135,17 +135,17 @@ BEGIN
IDS_LANGUAGE_SETTINGS "Language"
IDS_CAPTION_FONT "Caption font"
IDS_CAPTION_FONT_TIP "Select the font and text size to use for the caption"
IDS_TEXT_COLOR "Text color"
IDS_TEXT_COLOR "Text color (RRGGBB)"
IDS_TEXT_COLOR_TIP "Select the color for the caption text"
IDS_MAXTEXT_COLOR "Text color (maximized)"
IDS_MAXTEXT_COLOR "Text color (maximized) (RRGGBB)"
IDS_MAXTEXT_COLOR_TIP "Select the color for the caption text when the window is maximized"
IDS_INTEXT_COLOR "Text color (inactive)"
IDS_INTEXT_COLOR "Text color (inactive) (RRGGBB)"
IDS_INTEXT_COLOR_TIP "Select the color for the caption text when the window is inactive"
IDS_MAXINTEXT_COLOR "Text color (maximized, inactive)"
IDS_MAXINTEXT_COLOR "Text color (maximized, inactive) (RRGGBB)"
IDS_MAXINTEXT_COLOR_TIP "Select the color for the caption text when the window is maximized and inactive"
IDS_GLOW "Text glow"
IDS_GLOW_TIP "When this is checked, the text will have a glow around it"
IDS_GLOW_COLOR "Glow color"
IDS_GLOW_COLOR "Glow color (RRGGBB)"
IDS_GLOW_COLOR_TIP "Select the color for the caption glow"
END
@@ -153,7 +153,7 @@ STRINGTABLE
BEGIN
IDS_MAXGLOW "Text glow (maximized)"
IDS_MAXGLOW_TIP "When this is checked, the text in the maximized window will have a glow around it"
IDS_MAXGLOW_COLOR "Glow color (maximized)"
IDS_MAXGLOW_COLOR "Glow color (maximized) (RRGGBB)"
IDS_MAXGLOW_COLOR_TIP "Select the color for the caption glow when the window is maximized"
IDS_STATUS_SETTINGS "Status Bar"
IDS_SHOW_PROGRESS "Show progress"

View File

@@ -1,6 +1,14 @@
<?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="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
@@ -9,6 +17,14 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@@ -17,6 +33,14 @@
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64EC">
<Configuration>Setup</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration>
<Platform>Win32</Platform>
@@ -33,323 +57,51 @@
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization Condition="'$(Configuration)'!='Debug'">true</WholeProgramOptimization>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\Version.props" />
<ImportGroup Label="PropertySheets">
<Import Project="..\..\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>..\$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='Win32'">
<TargetName>$(ProjectName)_32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>..\$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<LinkIncremental>true</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='x64'">
<TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>..\$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)_32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>..\$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<LinkIncremental>false</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='ARM64EC'">
<TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'">
<OutDir>..\$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)_32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'">
<OutDir>..\$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<LinkIncremental>false</LinkIncremental>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<TargetName>$(ProjectName)_64</TargetName>
<BuildAsX>true</BuildAsX>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicIEDLL_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicIEDLL_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicIEDLL_p.c</ProxyFileName>
<ValidateAllParameters>true</ValidateAllParameters>
</Midl>
<ItemDefinitionGroup>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<PreprocessorDefinitions>_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>$(TargetName).def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'!='Setup'">
<Link>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<PerUserRedirection>true</PerUserRedirection>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicIEDLL_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicIEDLL_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicIEDLL_p.c</ProxyFileName>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<PerUserRedirection>true</PerUserRedirection>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicIEDLL_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicIEDLL_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicIEDLL_p.c</ProxyFileName>
<ValidateAllParameters>true</ValidateAllParameters>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<PerUserRedirection>true</PerUserRedirection>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicIEDLL_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicIEDLL_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicIEDLL_p.c</ProxyFileName>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<RegisterOutput>true</RegisterOutput>
<AdditionalDependencies>uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<PerUserRedirection>true</PerUserRedirection>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Setup|Win32'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicIEDLL_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicIEDLL_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicIEDLL_p.c</ProxyFileName>
<ValidateAllParameters>true</ValidateAllParameters>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;BUILD_SETUP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Setup|x64'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<HeaderFileName>ClassicIEDLL_i.h</HeaderFileName>
<DllDataFileName />
<InterfaceIdentifierFileName>ClassicIEDLL_i.c</InterfaceIdentifierFileName>
<ProxyFileName>ClassicIEDLL_p.c</ProxyFileName>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;CLASSICIEDLL_EXPORTS;BUILD_SETUP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);..\..\Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>uxtheme.lib;dwmapi.lib;comctl32.lib;msimg32.lib;winmm.lib;htmlhelp.lib;wininet.lib;wintrust.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>.\$(TargetName).def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="ClassicIEBHO.cpp" />
<ClCompile Include="ClassicIEDLL.cpp" />
@@ -375,7 +127,7 @@
<ItemGroup>
<ClInclude Include="ClassicIEBHO.h" />
<ClInclude Include="ClassicIEDLL.h" />
<ClInclude Include="ClassicIEDLL_i.h" />
<ClInclude Include="ClassicIEDLL_h.h" />
<ClInclude Include="dllmain.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="SettingsUI.h" />

View File

@@ -81,7 +81,7 @@
<ClInclude Include="targetver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ClassicIEDLL_i.h">
<ClInclude Include="ClassicIEDLL_h.h">
<Filter>Generated Files</Filter>
</ClInclude>
</ItemGroup>
@@ -98,4 +98,4 @@
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
</Project>
</Project>

View File

@@ -33,11 +33,6 @@ static int g_LoadDialogs[]=
0
};
const wchar_t *GetDocRelativePath( void )
{
return DOC_PATH;
}
static void NewVersionCallback( VersionData &data )
{
wchar_t path[_MAX_PATH];

View File

@@ -4,7 +4,7 @@
#pragma once
#include "ClassicIEDLL_i.h"
#include "ClassicIEDLL_h.h"
class CClassicIEDLLModule : public CAtlDllModuleT< CClassicIEDLLModule >
{

View File

@@ -13,7 +13,7 @@
#define ISOLATION_AWARE_ENABLED 1
#define _ATL_APARTMENT_THREADED
#define _ATL_NO_AUTOMATIC_NAMESPACE
#define _ATL_MODULES // compatibility with /permissive-
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
#include "resource.h"
@@ -24,12 +24,4 @@
using namespace ATL;
#ifdef BUILD_SETUP
#define INI_PATH L""
#define DOC_PATH L""
#else
#define INI_PATH L"..\\"
#define DOC_PATH L"..\\..\\Docs\\Help\\"
#endif
#include "StringUtils.h"

99
Src/Common.props Normal file
View File

@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<!-- Default product version to use if CS_VERSION environment variable is not defined -->
<CS_VERSION Condition="'$(CS_VERSION)'==''">4.4.1000</CS_VERSION>
</PropertyGroup>
<!-- Output paths -->
<PropertyGroup Condition="'$(Platform)'=='Win32'">
<OutDir>$(MSBuildThisFileDirectory)..\build\bin\$(Configuration)\</OutDir>
<IntDir>$(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='x64'">
<OutDir>$(MSBuildThisFileDirectory)..\build\bin\$(Configuration)64\</OutDir>
<IntDir>$(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)64\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<OutDir>$(MSBuildThisFileDirectory)..\build\bin\$(Configuration)ARM64\</OutDir>
<IntDir>$(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)ARM64\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64EC'">
<OutDir>$(MSBuildThisFileDirectory)..\build\bin\$(Configuration)ARM64EC\</OutDir>
<IntDir>$(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)ARM64EC\</IntDir>
</PropertyGroup>
<!-- Common settings for all configurations -->
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories Condition="'$(ConfigurationType)'!='StaticLibrary'">$(MSBuildThisFileDirectory)Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<GenerateStublessProxies>true</GenerateStublessProxies>
<ValidateAllParameters>true</ValidateAllParameters>
</Midl>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
</Link>
<ResourceCompile>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)Lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_PRODUCT_VERSION=$(CS_VERSION.Replace('.', ',')),0;_PRODUCT_VERSION_STR=\"$(CS_VERSION_ORIG)\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<!-- Debug settings -->
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<!-- Non-Debug settings -->
<ItemDefinitionGroup Condition="'$(Configuration)'!='Debug'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Setup'">
<ClCompile>
<PreprocessorDefinitions>BUILD_SETUP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@@ -4,7 +4,6 @@
#include <stdafx.h>
#include "resource.h"
#include "..\Setup\UpdateBin\resource.h"
#include "DownloadHelper.h"
#include "Settings.h"
#include "SettingsUIHelper.h"
@@ -14,7 +13,7 @@
#include "FNVHash.h"
#include "StringUtils.h"
#include "Translations.h"
#include "json.hpp"
#include <nlohmann/json.hpp>
#include <wininet.h>
#include <softpub.h>
@@ -195,9 +194,10 @@ static TDownloadResult DownloadFile( const wchar_t *url, std::vector<char> &buf,
{
if (pProgress && pProgress->IsCanceled())
res=DOWNLOAD_CANCEL;
const wchar_t *accept[]={L"*/*",NULL};
if (res==DOWNLOAD_OK)
{
const wchar_t* accept[] = { L"*/*",NULL };
HINTERNET hRequest=HttpOpenRequest(hConnect,L"GET",file,NULL,NULL,accept,((components.nScheme==INTERNET_SCHEME_HTTPS)?INTERNET_FLAG_SECURE:0)|(bAcceptCached?0:INTERNET_FLAG_RELOAD),0);
if (hRequest)
{
@@ -343,7 +343,7 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
VersionData data;
{
auto load = params.nightly ? data.LoadNightly() : data.Load();
auto load = data.Load(!params.nightly);
#ifdef UPDATE_LOG
LogToFile(UPDATE_LOG, L"Load result: %d", load);
@@ -370,60 +370,6 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
data.bNewVersion=(data.newVersion>curVersion);
data.bIgnoreVersion=(data.bNewVersion && data.newVersion<=remindedVersion);
}
{
wchar_t languages[100]={0};
CString language2=GetSettingString(L"Language");
if (!language2.IsEmpty())
{
Strcpy(languages,_countof(languages)-1,language2);
}
else
{
ULONG size=0;
ULONG len=_countof(languages);
GetUserPreferredUILanguages(MUI_LANGUAGE_NAME,&size,languages,&len);
}
bool bNewLanguage=false;
for (wchar_t *lang=languages;*lang;lang+=Strlen(lang)+1)
{
if (_wcsicmp(lang,L"en")==0 || _wcsnicmp(lang,L"en-",3)==0)
break; // English
DWORD dllVersion=0, dllBuild=0;
HINSTANCE resInstance=LoadTranslationDll(lang);
if (resInstance)
{
dllVersion=GetVersionEx(resInstance,&dllBuild);
FreeLibrary(resInstance);
}
DWORD newVersion=0, newBuild=0;
for (std::vector<LanguageVersionData>::const_iterator it=data.languages.begin();it!=data.languages.end();++it)
{
if (_wcsicmp(it->language,lang)==0)
{
newVersion=it->version;
newBuild=it->build;
break;
}
}
if (newVersion==0)
continue;
if (newVersion>dllVersion || (newVersion==dllVersion && newBuild>dllBuild))
{
// a new DLL for this language exists
data.bNewLanguage=true;
data.newLanguage=lang;
data.encodedLangVersion=(newVersion&0xFFFF0000)|((newVersion&0xFF)<<8)|(newBuild&0xFF);
DWORD remindedVersion;
if (regKey.QueryDWORDValue(L"RemindedLangVersion",remindedVersion)!=ERROR_SUCCESS)
remindedVersion=0;
data.bIgnoreLanguage=(data.encodedLangVersion<=remindedVersion);
}
break;
}
}
data.bValid=true;
if (params.check==CHECK_UPDATE)
@@ -432,7 +378,7 @@ static DWORD WINAPI ThreadVersionCheck( void *param )
g_bCheckingVersion=false;
return 1;
}
if ((data.bNewVersion && !data.bIgnoreVersion) || (data.bNewLanguage && !data.bIgnoreLanguage))
if (data.bNewVersion && !data.bIgnoreVersion)
params.callback(data);
g_bCheckingVersion=false;
return 0;
@@ -575,39 +521,6 @@ static CString LoadStringEx( HMODULE hModule, int stringId, int langId )
return res;
}
static BOOL CALLBACK EnumStringLanguages( HMODULE hModule, LPCTSTR lpszType, LPCTSTR lpszName, WORD wIDLanguage, LONG_PTR lParam )
{
VersionData &data=*(VersionData*)lParam;
CString url=LoadStringEx(hModule,IDS_LNG_URL,wIDLanguage);
if (url.IsEmpty()) return TRUE;
CString ver=LoadStringEx(hModule,IDS_LNG_VERSION,wIDLanguage);
if (ver.IsEmpty()) return TRUE;
CString crc=LoadStringEx(hModule,IDS_LNG_CRC,wIDLanguage);
if (crc.IsEmpty()) return TRUE;
LanguageVersionData langData;
langData.bBasic=(ver[ver.GetLength()-1]=='*');
int v1, v2, v3, v4;
if (swscanf_s(ver,L"%d.%d.%d.%d",&v1,&v2,&v3,&v4)==4)
{
wchar_t buf[100];
if (GetLocaleInfo(wIDLanguage,LOCALE_SNAME,buf,_countof(buf)))
{
langData.languageId=wIDLanguage;
langData.language=buf;
langData.version=(v1<<24)|(v2<<16)|v3;
langData.build=v4;
langData.url=url;
wchar_t *q;
langData.hash=wcstoul(crc,&q,16);
data.languages.push_back(langData);
}
}
return TRUE;
}
static bool VerifyDigitalCertificate( const wchar_t *fname, const wchar_t *signer )
{
// verify the certificate
@@ -709,38 +622,24 @@ static bool VerifyDigitalCertificate( const wchar_t *fname, const wchar_t *signe
void VersionData::Clear( void )
{
bValid=false;
newVersion=encodedLangVersion=0;
newVersion=0;
downloadUrl.Empty();
downloadSigner.Empty();
news.Empty();
updateLink.Empty();
languageLink.Empty();
altUrl.Empty();
bNewVersion=bIgnoreVersion=bNewLanguage=bIgnoreLanguage=false;
newLanguage.Empty();
for (std::vector<LanguageVersionData>::iterator it=languages.begin();it!=languages.end();++it)
if (it->bitmap)
DeleteObject(it->bitmap);
languages.clear();
updateLink="https://github.com/Open-Shell/Open-Shell-Menu/releases";
bNewVersion=bIgnoreVersion=false;
}
void VersionData::Swap( VersionData &data )
{
std::swap(bValid,data.bValid);
std::swap(newVersion,data.newVersion);
std::swap(encodedLangVersion,data.encodedLangVersion);
std::swap(downloadUrl,data.downloadUrl);
std::swap(downloadSigner,data.downloadSigner);
std::swap(news,data.news);
std::swap(updateLink,data.updateLink);
std::swap(languageLink,data.languageLink);
std::swap(altUrl,data.altUrl);
std::swap(bNewVersion,data.bNewVersion);
std::swap(bIgnoreVersion,data.bIgnoreVersion);
std::swap(bNewLanguage,data.bNewLanguage);
std::swap(bIgnoreLanguage,data.bIgnoreLanguage);
std::swap(newLanguage,data.newLanguage);
std::swap(languages,data.languages);
}
std::vector<char> DownloadUrl(const wchar_t* url)
@@ -764,20 +663,38 @@ std::vector<char> DownloadUrl(const wchar_t* url)
using namespace nlohmann;
VersionData::TLoadResult VersionData::Load()
VersionData::TLoadResult VersionData::Load(bool official)
{
Clear();
auto buf = DownloadUrl(L"https://api.github.com/repos/Open-Shell/Open-Shell-Menu/releases/latest");
std::wstring baseUrl = L"https://api.github.com/repos/Open-Shell/Open-Shell-Menu/releases";
if (official)
baseUrl += L"/latest";
auto buf = DownloadUrl(baseUrl.c_str());
if (buf.empty())
return LOAD_ERROR;
try
{
auto data = json::parse(buf.begin(), buf.end());
auto jsonData = json::parse(buf.begin(), buf.end());
auto& data = jsonData;
// skip prerelease versions
if (data["prerelease"].get<bool>())
if (official)
{
// skip prerelease versions (just in case)
if (data["prerelease"].get<bool>())
return LOAD_BAD_VERSION;
}
else
{
// we've got list of versions (release and pre-release)
// lets pick first one (that should be the latest one)
data = jsonData[0];
}
// make sure we didn't get draft release (for whatever reason)
if (data["draft"].get<bool>())
return LOAD_BAD_VERSION;
// get version from tag name
@@ -831,179 +748,6 @@ VersionData::TLoadResult VersionData::Load()
}
}
VersionData::TLoadResult VersionData::LoadNightly()
{
Clear();
auto buf = DownloadUrl(L"https://ci.appveyor.com/api/projects/passionate-coder/open-shell-menu/branch/master");
if (buf.empty())
return LOAD_ERROR;
try
{
auto data = json::parse(buf.begin(), buf.end());
auto build = data["build"];
// get version
auto version = build["version"].get<std::string>();
if (version.empty())
return LOAD_BAD_FILE;
{
int v1, v2, v3;
if (sscanf_s(version.c_str(), "%d.%d.%d", &v1, &v2, &v3) != 3)
return LOAD_BAD_FILE;
newVersion = (v1 << 24) | (v2 << 16) | v3;
if (newVersion <= GetVersionEx(g_Instance))
return LOAD_OK;
}
// artifact url
{
auto jobId = build["jobs"][0]["jobId"].get<std::string>();
if (jobId.empty())
return LOAD_BAD_FILE;
std::wstring jobUrl(L"https://ci.appveyor.com/api/buildjobs/");
jobUrl += std::wstring(jobId.begin(), jobId.end());
jobUrl += L"/artifacts";
buf = DownloadUrl(jobUrl.c_str());
if (buf.empty())
return LOAD_ERROR;
auto artifacts = json::parse(buf.begin(), buf.end());
std::string fileName;
for (const auto& artifact : artifacts)
{
auto name = artifact["fileName"].get<std::string>();
if (name.find("OpenShellSetup") == 0)
{
fileName = name;
break;
}
}
if (fileName.empty())
return LOAD_BAD_FILE;
auto artifactUrl(jobUrl);
artifactUrl += L'/';
artifactUrl += std::wstring(fileName.begin(), fileName.end());
downloadUrl = artifactUrl.c_str();
}
// changelog
news.Append(CA2T(version.c_str()));
news.Append(L"\r\n\r\n");
try
{
// use Github API to compare commit that actual version was built from (APPVEYOR_REPO_COMMIT)
// and commit that AppVeyor version was built from (commitId)
auto commitId = build["commitId"].get<std::string>();
std::wstring compareUrl(L"https://api.github.com/repos/Open-Shell/Open-Shell-Menu/compare/");
compareUrl += _T(APPVEYOR_REPO_COMMIT);
compareUrl += L"...";
compareUrl += std::wstring(commitId.begin(), commitId.end());
buf = DownloadUrl(compareUrl.c_str());
auto compare = json::parse(buf.begin(), buf.end());
// then use first lines (subjects) of commit messages as changelog
auto commits = compare["commits"];
for (const auto& commit : commits)
{
auto message = commit["commit"]["message"].get<std::string>();
auto pos = message.find('\n');
if (pos != message.npos)
message.resize(pos);
news.Append(L"- ");
news.Append(CA2T(message.c_str()));
news.Append(L"\r\n");
}
}
catch (...)
{
}
}
catch (...)
{
return LOAD_BAD_FILE;
}
return LOAD_OK;
}
VersionData::TLoadResult VersionData::Load( const wchar_t *fname, bool bLoadFlags )
{
Clear();
if (!VerifyDigitalCertificate(fname,L"Ivaylo Beltchev"))
return LOAD_BAD_FILE;
HMODULE hModule=LoadLibraryEx(fname,NULL,LOAD_LIBRARY_AS_DATAFILE|LOAD_LIBRARY_AS_IMAGE_RESOURCE);
if (!hModule) return LOAD_BAD_FILE;
if (GetVersionEx(hModule)!=GetVersionEx(g_Instance))
{
FreeLibrary(hModule);
return LOAD_BAD_VERSION;
}
wchar_t defLang[100]=L"";
{
CRegKey regKeyLng;
if (regKeyLng.Open(HKEY_LOCAL_MACHINE,L"Software\\OpenShell\\OpenShell",KEY_READ|KEY_WOW64_64KEY)==ERROR_SUCCESS)
{
ULONG size=_countof(defLang);
if (regKeyLng.QueryStringValue(L"DefaultLanguage",defLang,&size)!=ERROR_SUCCESS)
defLang[0]=0;
}
}
const int DEFAULT_LANGUAGE=0x409;
int defLangId;
if (!defLang[0] || !GetLocaleInfoEx(defLang,LOCALE_ILANGUAGE|LOCALE_RETURN_NUMBER,(LPWSTR)&defLangId,4))
defLangId=DEFAULT_LANGUAGE;
downloadUrl=LoadStringEx(hModule,IDS_INSTALL_URL,defLangId);
// these are always in en-US
downloadSigner=LoadStringEx(hModule,IDS_INSTALL_SIGNER,DEFAULT_LANGUAGE);
CString strVer=LoadStringEx(hModule,IDS_VERSION,defLangId);
if (strVer.IsEmpty())
strVer=LoadStringEx(hModule,IDS_VERSION,DEFAULT_LANGUAGE);
updateLink=LoadStringEx(hModule,IDS_UPDATE_LINK,DEFAULT_LANGUAGE);
languageLink=LoadStringEx(hModule,IDS_LANGUAGE_LINK,DEFAULT_LANGUAGE);
altUrl=LoadStringEx(hModule,IDS_ALT_URL,DEFAULT_LANGUAGE);
int v1, v2, v3;
if (!downloadUrl.IsEmpty() && swscanf_s(strVer,L"%d.%d.%d",&v1,&v2,&v3)==3)
{
newVersion=(v1<<24)|(v2<<16)|v3;
news=LoadStringEx(hModule,IDS_NEWS,defLangId);
if (news.IsEmpty())
news=LoadStringEx(hModule,IDS_NEWS,DEFAULT_LANGUAGE);
EnumResourceLanguages(hModule,RT_STRING,MAKEINTRESOURCE((IDS_LNG_URL>>4)+1),EnumStringLanguages,(LONG_PTR)this);
for (std::vector<LanguageVersionData>::iterator it=languages.begin();it!=languages.end();++it)
it->bitmap=(HBITMAP)LoadImage(hModule,MAKEINTRESOURCE(it->languageId),IMAGE_BITMAP,22,27,LR_CREATEDIBSECTION);
}
FreeLibrary(hModule);
if (newVersion && !downloadUrl.IsEmpty() && !news.IsEmpty())
return LOAD_OK;
Clear();
return LOAD_ERROR;
}
struct DownloadFileParams
{
// input
@@ -1080,82 +824,6 @@ static DWORD WINAPI ThreadDownloadFile( void *param )
return 0;
}
DWORD DownloadLanguageDll( HWND owner, TSettingsComponent component, const LanguageVersionData &data, CString &error )
{
// download file
wchar_t path[_MAX_PATH]=L"%ALLUSERSPROFILE%\\OpenShell\\Languages";
DoEnvironmentSubst(path,_countof(path));
SHCreateDirectory(NULL,path);
wchar_t fname[_MAX_PATH];
Sprintf(fname,_countof(fname),L"%s.dll",data.language);
CProgressDlg progress;
progress.Create(owner,LoadStringEx(IDS_PROGRESS_TITLE_DOWNLOAD));
DownloadFileParams params;
params.url=data.url;
params.signer=NULL;
params.hash=data.hash;
params.path=path;
params.fname=fname;
params.progress=&progress;
params.bAcceptCached=true;
params.component=component;
HANDLE hThread=CreateThread(NULL,0,ThreadDownloadFile,&params,0,NULL);
while (1)
{
DWORD wait=MsgWaitForMultipleObjects(1,&hThread,FALSE,INFINITE,QS_ALLINPUT);
if (wait!=WAIT_OBJECT_0+1)
break;
MSG msg;
while (PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
progress.DestroyWindow();
CloseHandle(hThread);
if (params.downloadRes==DOWNLOAD_CANCEL)
return 2;
if (params.downloadRes==DOWNLOAD_INTERNET)
{
error=LoadStringEx(IDS_INTERNET_FAIL);
return 0;
}
else if (params.downloadRes==DOWNLOAD_START)
{
error=LoadStringEx(IDS_INITIATE_FAIL);
return 0;
}
else if (params.downloadRes==DOWNLOAD_FAIL)
{
error=LoadStringEx(IDS_LANG_DOWNLOAD_FAIL);
return 0;
}
if (params.saveRes)
{
wchar_t msg[256];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,params.saveRes,0,msg,_countof(msg),NULL);
error.Format(LoadStringEx(IDS_LANG_SAVE_FAIL),params.fname);
error+="\r\n";
error+=msg;
return 0;
}
if (!params.valid)
{
error=LoadStringEx(IDS_LANG_DOWNLOAD_FAIL);
return 0;
}
return 1;
}
DWORD DownloadNewVersion( HWND owner, TSettingsComponent component, const wchar_t *url, const wchar_t *signer, CString &fname, CString &error )
{
CComString pPath;

View File

@@ -15,37 +15,16 @@ enum TVersionCheck
enum TSettingsComponent;
struct LanguageVersionData
{
CString language;
CString url;
DWORD version;
DWORD build;
DWORD hash;
bool bBasic;
WORD languageId;
HBITMAP bitmap;
LanguageVersionData( void ) { bBasic=false; bitmap=NULL; }
};
struct VersionData
{
bool bValid = false;
DWORD newVersion = 0;
DWORD encodedLangVersion = 0;
CString downloadUrl;
CString downloadSigner;
CString news;
CString updateLink;
CString languageLink;
CString altUrl;
bool bNewVersion = false;
bool bIgnoreVersion = false;
bool bNewLanguage = false;
bool bIgnoreLanguage = false;
CString newLanguage;
std::vector<LanguageVersionData> languages;
~VersionData( void ) { Clear(); }
void Clear( void );
@@ -59,9 +38,7 @@ struct VersionData
LOAD_BAD_FILE, // the file is corrupted
};
TLoadResult Load();
TLoadResult LoadNightly();
TLoadResult Load( const wchar_t *fname, bool bLoadFlags );
TLoadResult Load(bool official);
private:
void operator=( const VersionData& );
};
@@ -70,5 +47,4 @@ typedef void (*tNewVersionCallback)( VersionData &data );
// 0 - fail, 1 - success, 2 - cancel
DWORD CheckForNewVersion( HWND owner, TSettingsComponent component, TVersionCheck check, tNewVersionCallback callback );
DWORD DownloadLanguageDll( HWND owner, TSettingsComponent component, const LanguageVersionData &data, CString &error );
DWORD DownloadNewVersion( HWND owner, TSettingsComponent component, const wchar_t *url, const wchar_t *signer, CString &fname, CString &error );

View File

@@ -60,3 +60,17 @@ bool IsFakeFolder( const wchar_t *fname )
}
return false;
}
bool GetFakeFolder( wchar_t *dst, int len, const wchar_t *src )
{
Sprintf(dst,len,L"%s\\target.lnk",src);
if (GetFileAttributes(dst)!=INVALID_FILE_ATTRIBUTES)
{
wchar_t path[_MAX_PATH];
Sprintf(path,_countof(path),L"%s\\desktop.ini",src);
DWORD attrib=GetFileAttributes(path);
if (attrib!=INVALID_FILE_ATTRIBUTES && (attrib&FILE_ATTRIBUTE_SYSTEM))
return true;
}
return false;
}

View File

@@ -7,3 +7,4 @@
bool CreateFakeFolder( const wchar_t *source, const wchar_t *fname );
void DeleteFakeFolder( const wchar_t *fname );
bool IsFakeFolder( const wchar_t *fname );
bool GetFakeFolder( wchar_t *dst, int len, const wchar_t *src );

View File

@@ -70,12 +70,17 @@ IatHookData *SetIatHook( IMAGE_DOS_HEADER *dosHeader, DWORD iatOffset, DWORD int
{
IatHookData *hook=g_IatHooks+g_IatHookCount;
g_IatHookCount++;
#if defined(_M_AMD64) || defined(_M_IX86)
hook->jump[0]=hook->jump[1]=0x90; // NOP
hook->jump[2]=0xFF; hook->jump[3]=0x25; // JUMP
#ifdef _WIN64
#if defined(_M_AMD64)
hook->jumpOffs=0;
#else
hook->jumpOffs=(DWORD)(hook)+8;
#endif
#elif defined(_M_ARM64)
hook->jump[0]=0x48; hook->jump[1]=0x00; hook->jump[2]=0x00; hook->jump[3]=0x58; // LDR X8, newProc
hook->jump[4]=0x00; hook->jump[5]=0x01; hook->jump[6]=0x1F; hook->jump[7]=0xD6; // BR X8
#endif
hook->newProc=newProc;
hook->oldProc=(void*)thunk->u1.Function;

View File

@@ -6,8 +6,12 @@
struct IatHookData
{
#if defined(_M_AMD64) || defined(_M_IX86)
unsigned char jump[4]; // jump instruction 0x90, 0x90, 0xFF, 0x25
DWORD jumpOffs; // jump instruction offset
#elif defined(_M_ARM64)
unsigned char jump[8]; // LDR <address>, BR
#endif
void *newProc; // the address of the new proc
void *oldProc; // the address of the old proc
IMAGE_THUNK_DATA *thunk; // the IAT thunk

View File

@@ -68,17 +68,13 @@ public:
MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog )
MESSAGE_HANDLER( WM_DESTROY, OnDestroy )
MESSAGE_HANDLER( WM_SIZE, OnSize )
COMMAND_ID_HANDLER( IDC_BUTTONCHECK, OnCheckUpdates )
NOTIFY_HANDLER( IDC_LISTLANGUAGE, LVN_ITEMCHANGED, OnSelChange )
NOTIFY_HANDLER( IDC_LISTLANGUAGE, LVN_ITEMCHANGING, OnSelChanging )
NOTIFY_HANDLER( IDC_LISTLANGUAGE, NM_CUSTOMDRAW, OnCustomDraw )
NOTIFY_HANDLER( IDC_LINKDOWNLOAD, NM_CLICK, OnDownload )
END_MSG_MAP()
BEGIN_RESIZE_MAP
RESIZE_CONTROL(IDC_LISTLANGUAGE,MOVE_SIZE_X|MOVE_SIZE_Y)
RESIZE_CONTROL(IDC_BUTTONCHECK,MOVE_MOVE_Y)
RESIZE_CONTROL(IDC_LINKDOWNLOAD,MOVE_SIZE_X|MOVE_MOVE_Y)
END_RESIZE_MAP
void SetGroup( CSetting *pGroup );
@@ -92,11 +88,9 @@ protected:
LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnDestroy( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnSize( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnCheckUpdates( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
LRESULT OnSelChange( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
LRESULT OnSelChanging( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
LRESULT OnCustomDraw( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
LRESULT OnDownload( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
private:
CSetting *m_pSetting;
@@ -114,20 +108,14 @@ private:
bool operator<( const LangInfo &info ) { return _wcsicmp(name,info.name)<0; }
};
std::vector<LangInfo> m_LanguageIDs; // the order matches the items in the listbox
static VersionData s_VersionData;
static void NewVersionCallback( VersionData &data );
void UpdateFlags( void );
void UpdateLink( const wchar_t *language );
void AddFlag( const wchar_t *langName, int langId, HBITMAP bmp );
};
VersionData CLanguageSettingsDlg::s_VersionData;
void CLanguageSettingsDlg::AddFlag( const wchar_t *langName, int langId, HBITMAP bmp )
{
std::vector<LangInfo>::iterator it=m_LanguageIDs.begin()+1;
int idx=1;
for (;idx<(int)m_LanguageIDs.size();idx++)
{
@@ -157,39 +145,6 @@ void CLanguageSettingsDlg::AddFlag( const wchar_t *langName, int langId, HBITMAP
void CLanguageSettingsDlg::UpdateFlags( void )
{
// add flags from s_VersionData
for (std::vector<LanguageVersionData>::const_iterator it=s_VersionData.languages.begin();it!=s_VersionData.languages.end();++it)
{
if (it->bitmap)
{
BITMAPINFO bi={0};
bi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth=m_bLargeFlags?32:24;
bi.bmiHeader.biHeight=m_bLargeFlags?16:11;
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=32;
HDC hdc=CreateCompatibleDC(NULL);
HBITMAP bmp=CreateDIBSection(hdc,&bi,DIB_RGB_COLORS,NULL,NULL,0);
HGDIOBJ bmp0=SelectObject(hdc,bmp);
HDC hsrc=CreateCompatibleDC(hdc);
HGDIOBJ bmp02=SelectObject(hsrc,it->bitmap);
SetDCBrushColor(hdc,0xFF00FF);
RECT rc={0,0,bi.bmiHeader.biWidth,bi.bmiHeader.biHeight};
FillRect(hdc,&rc,(HBRUSH)GetStockObject(DC_BRUSH));
if (m_bLargeFlags)
BitBlt(hdc,3,0,22,16,hsrc,0,11,SRCCOPY);
else
BitBlt(hdc,2,0,16,11,hsrc,0,0,SRCCOPY);
SelectObject(hsrc,bmp02);
DeleteDC(hsrc);
SelectObject(hdc,bmp0);
DeleteDC(hdc);
AddFlag(it->language,it->languageId,bmp);
DeleteObject(bmp);
}
}
// add flags from dlls
for (int pass=0;pass<2;pass++)
{
@@ -205,8 +160,6 @@ void CLanguageSettingsDlg::UpdateFlags( void )
DoEnvironmentSubst(path,_countof(path));
}
CWindow list=GetDlgItem(IDC_LISTLANGUAGE);
wchar_t find[_MAX_PATH];
Sprintf(find,_countof(find),L"%s\\*.dll",path);
WIN32_FIND_DATA data;
@@ -291,7 +244,6 @@ LRESULT CLanguageSettingsDlg::OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lPa
ListView_SetExtendedListViewStyleEx(list,LVS_EX_DOUBLEBUFFER,LVS_EX_DOUBLEBUFFER);
LVCOLUMN column={LVCF_WIDTH,0,rc.right-rc.left};
ListView_InsertColumn(list,0,&column);
SetDlgItemText(IDC_LINKDOWNLOAD,L"");
m_LanguageIDs.resize(_countof(g_LanguageIDs)+1);
{
@@ -334,11 +286,6 @@ LRESULT CLanguageSettingsDlg::OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lPa
ListView_InsertItem(list,&item);
}
// parse update.ver in data and add all flags
wchar_t path[_MAX_PATH]=L"%ALLUSERSPROFILE%\\OpenShell\\update.ver";
DoEnvironmentSubst(path,_countof(path));
s_VersionData.bValid=(s_VersionData.Load(path,true)==VersionData::LOAD_OK);
UpdateFlags();
m_Tooltip.Create(TOOLTIPS_CLASS,m_hWnd,NULL,NULL,WS_POPUP|TTS_NOPREFIX);
@@ -362,40 +309,6 @@ LRESULT CLanguageSettingsDlg::OnSize( UINT uMsg, WPARAM wParam, LPARAM lParam, B
return 0;
}
void CLanguageSettingsDlg::NewVersionCallback( VersionData &data )
{
s_VersionData.Swap(data);
}
LRESULT CLanguageSettingsDlg::OnCheckUpdates( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
{
DWORD res=CheckForNewVersion(m_hWnd,m_Component,CHECK_UPDATE,NewVersionCallback);
if (res==2) return 0;
if (res)
{
UpdateFlags();
CString language=GetSettingString(L"Language");
CWindow list=GetDlgItem(IDC_LISTLANGUAGE);
for (int idx=0;idx<(int)m_LanguageIDs.size();idx++)
{
const wchar_t *name=idx>0?m_LanguageIDs[idx].name.GetString():L"";
if (_wcsicmp(language,name)==0)
{
ListView_SetItemState(list,idx,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
ListView_EnsureVisible(list,idx,FALSE);
break;
}
}
UpdateLink(language);
}
else
{
s_VersionData.Clear();
SetDlgItemText(IDC_LINKDOWNLOAD,LoadStringEx(IDS_LANGUAGE_FAIL));
}
return 0;
}
LRESULT CLanguageSettingsDlg::OnSelChange( int idCtrl, LPNMHDR pnmh, BOOL& bHandled )
{
// set setting
@@ -408,13 +321,12 @@ LRESULT CLanguageSettingsDlg::OnSelChange( int idCtrl, LPNMHDR pnmh, BOOL& bHand
CComVariant val(name);
if (m_pSetting->value!=val)
SetSettingsDirty();
m_pSetting->value=val;
m_pSetting->value=std::move(val);
if (_wcsicmp(m_pSetting->value.bstrVal,m_pSetting->defValue.bstrVal)==0)
m_pSetting->flags|=CSetting::FLAG_DEFAULT;
else
m_pSetting->flags&=~CSetting::FLAG_DEFAULT;
UpdateLink(name);
return 0;
}
@@ -451,41 +363,6 @@ static HRESULT CALLBACK TaskDialogCallbackProc( HWND hwnd, UINT uNotification, W
return S_OK;
}
LRESULT CLanguageSettingsDlg::OnDownload( int idCtrl, LPNMHDR pnmh, BOOL& bHandled )
{
CString language=GetSettingString(L"Language");
if (language.IsEmpty())
language=m_LanguageIDs[0].name;
for (std::vector<LanguageVersionData>::const_iterator it=s_VersionData.languages.begin();it!=s_VersionData.languages.end();++it)
{
if (_wcsicmp(it->language,language)==0)
{
CString error;
DWORD res=DownloadLanguageDll(m_hWnd,m_Component,*it,error);
if (res==2)
return 0;
if (res)
MessageBox(LoadStringEx(it->bBasic?IDS_LANGUAGE_SUCCESS2:IDS_LANGUAGE_SUCCESS),LoadStringEx(IDS_UPDATE_TITLE),MB_OK|(it->bBasic?MB_ICONWARNING:MB_ICONINFORMATION));
else
{
if (!s_VersionData.languageLink.IsEmpty())
error+=L" "+LoadStringEx(IDS_DOWNLOAD_TIP)+L"\r\n\r\n"+s_VersionData.languageLink;
TASKDIALOGCONFIG task={sizeof(task),m_hWnd,NULL,TDF_ENABLE_HYPERLINKS|TDF_ALLOW_DIALOG_CANCELLATION|TDF_USE_HICON_MAIN,TDCBF_OK_BUTTON};
CString title=LoadStringEx(IDS_UPDATE_TITLE);
task.pszWindowTitle=title;
task.pszContent=error;
task.hMainIcon=LoadIcon(NULL,IDI_ERROR);
task.pfCallback=TaskDialogCallbackProc;
TaskDialogIndirect(&task,NULL,NULL,NULL);
}
UpdateLink(language);
break;
}
}
return 0;
}
void CLanguageSettingsDlg::SetGroup( CSetting *pGroup )
{
m_bLocked=false;
@@ -507,7 +384,6 @@ void CLanguageSettingsDlg::SetGroup( CSetting *pGroup )
break;
}
}
UpdateLink(m_pSetting->value.bstrVal);
m_bLocked=m_pSetting->IsLocked();
TOOLINFO tool={sizeof(tool),0,m_hWnd,'CLSH'};
@@ -520,52 +396,6 @@ void CLanguageSettingsDlg::SetGroup( CSetting *pGroup )
ListView_SetBkColor(list,GetSysColor(m_bLocked?COLOR_BTNFACE:COLOR_WINDOW));
}
void CLanguageSettingsDlg::UpdateLink( const wchar_t *language )
{
TOOLINFO tool={sizeof(tool),TTF_SUBCLASS|TTF_IDISHWND,m_hWnd,'CLSH'};
tool.uId=(UINT_PTR)GetDlgItem(IDC_LINKDOWNLOAD).m_hWnd;
m_Tooltip.SendMessage(TTM_DELTOOL,0,(LPARAM)&tool);
if (!s_VersionData.bValid)
{
SetDlgItemText(IDC_LINKDOWNLOAD,L"");
return;
}
if (!*language)
language=m_LanguageIDs[0].name;
wchar_t text[1024];
for (std::vector<LanguageVersionData>::const_iterator it=s_VersionData.languages.begin();it!=s_VersionData.languages.end();++it)
{
if (_wcsicmp(it->language,language)==0)
{
DWORD dllVersion=0, dllBuild=0;
HINSTANCE resInstance=LoadTranslationDll(language);
if (resInstance)
{
dllVersion=GetVersionEx(resInstance,&dllBuild);
FreeLibrary(resInstance);
}
if (it->version>dllVersion || (it->version==dllVersion && it->build>dllBuild))
{
Sprintf(text,_countof(text),LoadStringEx(IDS_LANGUAGE_DOWNLOAD),language);
SetDlgItemText(IDC_LINKDOWNLOAD,text);
tool.lpszText=(LPWSTR)(LPCWSTR)it->url;
m_Tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
}
else
{
Sprintf(text,_countof(text),LoadStringEx(IDS_LANGUAGE_UPDATED),language);
SetDlgItemText(IDC_LINKDOWNLOAD,text);
}
return;
}
}
Sprintf(text,_countof(text),LoadStringEx(IDS_LANGUAGE_MISSING),language);
SetDlgItemText(IDC_LINKDOWNLOAD,text);
}
class CLanguageSettingsPanel: public ISettingsPanel
{
public:

View File

@@ -98,8 +98,6 @@ FONT 9, "Segoe UI", 400, 0, 0x0
BEGIN
CONTROL "",IDC_LISTLANGUAGE,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,18,302,99
LTEXT "Select a language for the user interface:",IDC_STATICHINT,7,7,131,8
PUSHBUTTON "&Check for Updates",IDC_BUTTONCHECK,7,123,75,14
CONTROL "download link goes here",IDC_LINKDOWNLOAD,"SysLink",WS_TABSTOP,85,126,224,10
END
IDD_CUSTOMTREE DIALOGEX 0, 0, 365, 183
@@ -279,20 +277,12 @@ BEGIN
IDS_SETTING_SEARCH "Search Results"
IDS_WEBSITE_TIP "Visit Open-Shell on the web - https://open-shell.github.io/Open-Shell-Menu"
IDS_LOCATE_SETTING "Locate setting"
IDS_LANGUAGE_UPDATED "The language %s is up to date."
IDS_LANGUAGE_MISSING "Update for language %s is not available."
IDS_LANGUAGE_DOWNLOAD "New update for language %s is available. <a>Click here to install it.</a>"
IDS_LANGUAGE_SUCCESS "The language file was installed successfully.\nYou need to log off and back on for the update to take effect."
IDS_LANGUAGE_SUCCESS2 "The language file was installed successfully.\nYou need to log off and back on for the update to take effect.\n\nNote: This update provides only basic translations. It supports only the main text found in the start menu and in Explorer. The settings will not be translated."
IDS_LANGUAGE_FAIL "Failed to check for updates."
IDS_INTERNET_FAIL "Failed to connect to the Internet."
END
STRINGTABLE
BEGIN
IDS_INITIATE_FAIL "Failed to initiate the download."
IDS_LANG_DOWNLOAD_FAIL "Failed to download the language file."
IDS_LANG_SAVE_FAIL "Failed to save language file '%s'."
IDS_UPDATE_TITLE "Open-Shell Update"
IDS_INST_DOWNLOAD_FAIL "Failed to download the new version."
IDS_INST_SAVE_FAIL "Failed to save file '%s'."
@@ -308,11 +298,6 @@ BEGIN
IDS_UNSAVED_TITLE "Unsaved changes"
END
STRINGTABLE
BEGIN
IDS_VERSION_URL "http://www.classicshell.net/files/updates/update_"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////

View File

@@ -1,6 +1,14 @@
<?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="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
@@ -9,6 +17,14 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@@ -25,130 +41,34 @@
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization Condition="'$(Configuration)'!='Debug'">true</WholeProgramOptimization>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" 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)'=='Debug|Win32'" 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)'=='Release|x64'" 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)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<ImportGroup Label="PropertySheets">
<Import Project="..\Common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<PropertyGroup>
<OutDir>$(IntDir)</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(Configuration)64\</OutDir>
<IntDir>$(Configuration)64\</IntDir>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<BuildAsX>true</BuildAsX>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>APPVEYOR_REPO_COMMIT="$(APPVEYOR_REPO_COMMIT)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Lib>
<TargetMachine>MachineX86</TargetMachine>
<TargetMachine Condition="'$(Platform)'=='Win32'">MachineX86</TargetMachine>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<Image Include="..\Setup\OpenShell.ico" />
<Image Include="flags.bmp" />
@@ -200,7 +120,17 @@
<ClCompile Include="TrackResources.cpp" />
<ClCompile Include="Translations.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="..\packages\nlohmann.json.3.11.2\build\native\nlohmann.json.targets" Condition="Exists('..\packages\nlohmann.json.3.11.2\build\native\nlohmann.json.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\nlohmann.json.3.11.2\build\native\nlohmann.json.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\nlohmann.json.3.11.2\build\native\nlohmann.json.targets'))" />
</Target>
</Project>

View File

@@ -149,4 +149,7 @@
<Filter>Lib</Filter>
</ClCompile>
</ItemGroup>
</Project>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
</Project>

View File

@@ -384,20 +384,23 @@ HICON CreateDisabledIcon( HICON hIcon, int iconSize )
}
// Loads an image file into a bitmap and optionally resizes it
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim )
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim, UINT dpi )
{
HBITMAP srcBmp=NULL;
if (_wcsicmp(PathFindExtension(path),L".bmp")==0)
{
srcBmp=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
}
if (srcBmp && !pSize)
if (srcBmp && !pSize && !dpi)
return srcBmp;
CComPtr<IWICImagingFactory> pFactory;
if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory)))
{
if (srcBmp) DeleteObject(srcBmp);
return NULL;
if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory1)))
{
if (srcBmp) DeleteObject(srcBmp);
return NULL;
}
}
CComPtr<IWICBitmapSource> pBitmap;
@@ -479,6 +482,12 @@ HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, b
else
frameHeightD=frameWidthD*frameHeightS/frameWidthS;
}
if (dpi)
{
frameWidthD=ScaleForDpi(dpi,frameWidthD);
frameHeightD=ScaleForDpi(dpi,frameHeightD);
}
}
BITMAPINFO bi={0};
@@ -534,7 +543,10 @@ HBITMAP LoadImageResource( HMODULE hModule, const wchar_t *name, bool bTopDown,
{
CComPtr<IWICImagingFactory> pFactory;
if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory)))
return NULL;
{
if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory1)))
return NULL;
}
CComPtr<IWICBitmapSource> pBitmap;
if (hModule)
@@ -727,6 +739,19 @@ bool IsWin10RS4( void )
return bIsRS4;
}
static bool IsWin11Helper()
{
auto version = GetOSVersion();
return version.dwMajorVersion >= 10 && version.dwBuildNumber >= 22000;
}
// Returns true if the version is Windows11 or later
bool IsWin11(void)
{
static bool bIsWin11 = IsWin11Helper();
return bIsWin11;
}
// Wrapper for IShellFolder::ParseDisplayName
HRESULT ShParseDisplayName( const wchar_t *pszName, PIDLIST_ABSOLUTE *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut )
{
@@ -901,5 +926,38 @@ HFONT CreateFontSetting( const wchar_t *fontStr, int dpi )
weight=FW_BOLD, bItalic=true;
str=GetToken(str,token,_countof(token),L", \t");
int size=-_wtol(token);
return CreateFont(size*dpi/72,0,0,0,weight,bItalic?1:0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,name);
return CreateFont(MulDiv(size,dpi,72),0,0,0,weight,bItalic?1:0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,name);
}
static UINT WINAPI GetDpiForWindow(HWND hwnd)
{
static auto p = static_cast<decltype(&GetDpiForWindow)>((void*)GetProcAddress(GetModuleHandle(L"user32.dll"), "GetDpiForWindow"));
if (p)
return p(hwnd);
return 0;
}
UINT GetDpi(HWND hwnd)
{
UINT dpi = GetDpiForWindow(hwnd);
if (!dpi)
{
// fall-back for older systems
HDC hdc = GetDC(nullptr);
dpi = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(nullptr, hdc);
}
return dpi;
}
int ScaleForDpi(UINT dpi, int value)
{
return MulDiv(value, dpi, USER_DEFAULT_SCREEN_DPI);
}
int ScaleForDpi(HWND hwnd, int value)
{
return ScaleForDpi(GetDpi(hwnd), value);
}

View File

@@ -35,7 +35,7 @@ HICON ShExtractIcon( const char *path, int index, int iconSize );
HBITMAP BitmapFromIcon( HICON hIcon, int iconSize, unsigned int **pBits, bool bDestroyIcon );
// Loads an image file into a bitmap and optionally resizes it
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim );
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim, UINT dpi=0 );
// Loads a bitmap from a IMAGE resource
HBITMAP LoadImageResource( HMODULE hModule, const wchar_t *name, bool bTopDown, bool bPremultiply );
@@ -67,6 +67,9 @@ bool IsWin10RS1( void );
// Returns true if the version is Windows10 RS4 (Spring Creator Update) or later
bool IsWin10RS4( void );
// Returns true if the version is Windows11 or later
bool IsWin11();
// Wrapper for IShellFolder::ParseDisplayName
HRESULT ShParseDisplayName( const wchar_t *pszName, PIDLIST_ABSOLUTE *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut );
@@ -82,6 +85,14 @@ void StringUpper( CString &str );
// Create a font from the user settings
HFONT CreateFontSetting( const wchar_t *fontStr, int dpi );
// Return DPI of given window (or system DPI on older systems)
UINT GetDpi(HWND hwnd = nullptr);
// Scale given value according to given DPI
int ScaleForDpi(UINT dpi, int value);
// Scale given value according to DPI of window
int ScaleForDpi(HWND hwnd, int value);
extern HINSTANCE g_Instance;
const int ANIM_BUTTON_TAG1='ANM';

View File

@@ -13,17 +13,12 @@
#include <Uxtheme.h>
#include <VSStyle.h>
#include <propkey.h>
#include <propvarutil.h>
#include <htmlhelp.h>
#include <vector>
#include <map>
#include <algorithm>
#ifdef BUILD_SETUP
#define DOC_PATH L""
#else
#define DOC_PATH L"..\\..\\Docs\\Help\\"
#endif
///////////////////////////////////////////////////////////////////////////////
// Read/Write lock for accessing the settings. Can't be acquired recursively. Only the main UI thread (the one displaying the settings UI)
@@ -125,7 +120,7 @@ bool CSetting::IsEnabled( void ) const
if (operation=='>' && pSetting->GetValue().intVal<=val)
return false;
}
if ((pSetting->type==CSetting::TYPE_STRING || pSetting->type==CSetting::TYPE_BITMAP || pSetting->type==CSetting::TYPE_BITMAP_JPG) && pSetting->GetValue().vt==VT_BSTR)
if ((pSetting->type==CSetting::TYPE_STRING || pSetting->type==CSetting::TYPE_BITMAP || pSetting->type==CSetting::TYPE_BITMAP_JPG || pSetting->type==CSetting::TYPE_DIRECTORY) && pSetting->GetValue().vt==VT_BSTR)
{
if (operation=='~' && *pSetting->GetValue().bstrVal==0)
return false;
@@ -202,7 +197,7 @@ bool CSetting::ReadValue( CRegKey &regKey, const wchar_t *valName )
}
// string
if (type>=CSetting::TYPE_STRING && type<CSetting::TYPE_MULTISTRING)
if (type>=CSetting::TYPE_STRING && type!=CSetting::TYPE_MULTISTRING)
{
ULONG len;
if (regKey.QueryStringValue(valName,NULL,&len)==ERROR_SUCCESS)
@@ -789,7 +784,7 @@ CString CSettingsManager::LoadSettingsXml( const wchar_t *fname )
}
CComPtr<IXMLDOMNode> next;
child2->get_nextSibling(&next);
child2=next;
child2=std::move(next);
}
string.push_back(0);
pSetting->value=CComVariant(&string[0]);
@@ -839,7 +834,7 @@ CString CSettingsManager::LoadSettingsXml( const wchar_t *fname )
CComPtr<IXMLDOMNode> next;
if (child->get_nextSibling(&next)!=S_OK)
break;
child=next;
child=std::move(next);
}
if (ver<0x03090000)
UpgradeSettings(false);
@@ -984,7 +979,7 @@ void CSettingsManager::ResetSettings( void )
HIMAGELIST CSettingsManager::GetImageList( HWND tree )
{
if (m_ImageList) return m_ImageList;
HTHEME theme=OpenThemeData(tree,L"button");
HTHEME theme=OpenThemeData(GetParent(tree),L"button");
HDC hdc=CreateCompatibleDC(NULL);
int iconSize=(TreeView_GetItemHeight(tree)<32)?16:32;
int checkSize=16;
@@ -1114,7 +1109,7 @@ class CSettingsDlg: public CResizeableDlg<CSettingsDlg>
{
public:
CSettingsDlg( void );
void Init( CSetting *pSettings, ICustomSettings *pCustom, int tab );
void Init( CSetting *pSettings, ICustomSettings *pCustom, int tab, const wchar_t* appId );
BEGIN_MSG_MAP( CSettingsDlg )
MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog )
@@ -1188,6 +1183,7 @@ private:
bool m_bIgnoreEdit;
bool m_bDirty;
CString m_FilterText;
const wchar_t* m_AppId;
void AddTabs( int name, const CSetting *pSelect=NULL );
void SetCurTab( int index, bool bReset, const CSetting *pSelect=NULL );
@@ -1220,15 +1216,17 @@ CSettingsDlg::CSettingsDlg( void )
m_bOnTop=false;
m_bIgnoreEdit=false;
m_bDirty=false;
m_AppId=NULL;
}
void CSettingsDlg::Init( CSetting *pSettings, ICustomSettings *pCustom, int tab )
void CSettingsDlg::Init( CSetting *pSettings, ICustomSettings *pCustom, int tab, const wchar_t* appId )
{
m_pSettings=pSettings;
m_pCustom=pCustom;
m_InitialTab=tab;
m_FilterText.Empty();
m_bDirty=false;
m_AppId=appId;
}
// Subclass the tooltip to delay the tip when the mouse moves from one tree item to the next
@@ -1252,17 +1250,19 @@ LRESULT CSettingsDlg::OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOO
#ifdef _DEBUG
g_bUIThread=true;
#endif
/*
// attempt to make the dialog have its own icon. doesn't work though. the icon changes, but to the default folder icon
CComPtr<IPropertyStore> pStore;
if (SUCCEEDED(SHGetPropertyStoreForWindow(m_hWnd,IID_IPropertyStore,(void**)&pStore)))
if (m_AppId)
{
PROPVARIANT val;
val.vt=VT_LPWSTR;
val.pwszVal=L"OpenShell.Settings.Dialog";
pStore->SetValue(PKEY_AppUserModel_ID,val);
// attempt to make the dialog have its own icon
CComPtr<IPropertyStore> pStore;
if (SUCCEEDED(SHGetPropertyStoreForWindow(m_hWnd,IID_IPropertyStore,(void**)&pStore)))
{
PROPVARIANT val;
InitPropVariantFromString(m_AppId,&val);
pStore->SetValue(PKEY_AppUserModel_ID,val);
}
}
*/
InitResize(MOVE_MODAL);
HMENU menu=GetSystemMenu(FALSE);
bool bAdded=false;
@@ -1701,6 +1701,7 @@ LRESULT CSettingsDlg::OnBackup( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&
ofn.Flags=OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
if (GetOpenFileName(&ofn))
{
SetCurTab(m_Index,true); // reload tab once to force-close any active edit boxes
CString error=g_SettingsManager.LoadSettingsXml(path);
if (!error.IsEmpty())
{
@@ -1710,7 +1711,7 @@ LRESULT CSettingsDlg::OnBackup( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&
::MessageBox(m_hWnd,text,LoadStringEx(IDS_ERROR_TITLE),MB_OK|MB_ICONERROR);
}
SetSettingsDirty();
SetCurTab(m_Index,true);
SetCurTab(m_Index,true); // reload tab again to show the new settings
}
}
if (res==3)
@@ -1845,7 +1846,7 @@ bool CSettingsDlg::IsTabValid( void )
static CSettingsDlg g_SettingsDlg;
void EditSettings( const wchar_t *title, bool bModal, int tab )
void EditSettings( const wchar_t *title, bool bModal, int tab, const wchar_t* appId )
{
if (g_SettingsDlg.m_hWnd)
{
@@ -1863,7 +1864,7 @@ void EditSettings( const wchar_t *title, bool bModal, int tab )
}
DLGTEMPLATE *pTemplate=LoadDialogEx(IDD_SETTINGS);
g_SettingsManager.ResetImageList();
g_SettingsDlg.Init(g_SettingsManager.GetSettings(),g_SettingsManager.GetCustom(),tab);
g_SettingsDlg.Init(g_SettingsManager.GetSettings(),g_SettingsManager.GetCustom(),tab,appId);
g_SettingsDlg.Create(NULL,pTemplate);
g_SettingsDlg.SetWindowText(title);
g_SettingsDlg.SetWindowPos(HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|(g_SettingsDlg.GetOnTop()?0:SWP_NOZORDER)|SWP_SHOWWINDOW);
@@ -1951,6 +1952,13 @@ bool ImportSettingsXml( const wchar_t *fname )
if (error.IsEmpty())
{
g_SettingsManager.SaveSettings(false);
// we have successfuly imported settings from XML
// so there is no need to show settings dialog when start menu is triggered for the first time
CRegKey regKey;
if (regKey.Open(HKEY_CURRENT_USER,GetSettingsRegPath())==ERROR_SUCCESS)
regKey.SetDWORDValue(L"ShowedStyle2",1);
return true;
}
@@ -2177,7 +2185,7 @@ bool HasHelp( void )
GetModuleFileName(_AtlBaseModule.GetResourceInstance(),path,_countof(path));
*PathFindFileName(path)=0;
wchar_t topic[_MAX_PATH];
Sprintf(topic,_countof(topic),L"%s%sOpenShell.chm",path,GetDocRelativePath());
Sprintf(topic,_countof(topic),L"%sOpenShell.chm",path);
return (GetFileAttributes(topic)!=INVALID_FILE_ATTRIBUTES);
}
@@ -2187,7 +2195,7 @@ void ShowHelp( void )
GetModuleFileName(_AtlBaseModule.GetResourceInstance(),path,_countof(path));
*PathFindFileName(path)=0;
wchar_t topic[_MAX_PATH];
Sprintf(topic,_countof(topic),L"%s%sOpenShell.chm::/%s.html",path,GetDocRelativePath(),PathFindFileName(g_SettingsManager.GetRegPath()));
Sprintf(topic,_countof(topic),L"%sOpenShell.chm::/%s.html",path,PathFindFileName(g_SettingsManager.GetRegPath()));
HtmlHelp(GetDesktopWindow(),topic,HH_DISPLAY_TOPIC,NULL);
}
@@ -2208,7 +2216,7 @@ bool GetSettingBool( const CSetting &setting )
CString GetSettingString( const CSetting &setting )
{
Assert(setting.type==CSetting::TYPE_STRING);
Assert(setting.type==CSetting::TYPE_STRING || setting.type==CSetting::TYPE_DIRECTORY);
if (setting.value.vt!=VT_BSTR)
return CString();
return setting.value.bstrVal;
@@ -2709,7 +2717,7 @@ bool SaveAdmx( TSettingsComponent component, const char *admxFile, const char *a
{
fprintf_s(fAdmx,"\t\t\t\t<decimal id=\"Value\" valueName=\"%S\"/>\r\n",pSetting->name);
}
else if (pSetting->type==CSetting::TYPE_STRING || pSetting->type==CSetting::TYPE_ICON || pSetting->type==CSetting::TYPE_BITMAP || pSetting->type==CSetting::TYPE_BITMAP_JPG || pSetting->type==CSetting::TYPE_SOUND || pSetting->type==CSetting::TYPE_FONT)
else if (pSetting->type==CSetting::TYPE_STRING || pSetting->type==CSetting::TYPE_ICON || pSetting->type==CSetting::TYPE_BITMAP || pSetting->type==CSetting::TYPE_BITMAP_JPG || pSetting->type==CSetting::TYPE_SOUND || pSetting->type==CSetting::TYPE_FONT || pSetting->type==CSetting::TYPE_DIRECTORY)
{
fprintf_s(fAdmx,"\t\t\t\t<text id=\"Value\" valueName=\"%S\"/>\r\n",pSetting->name);
}
@@ -2769,7 +2777,7 @@ bool SaveAdmx( TSettingsComponent component, const char *admxFile, const char *a
{
fprintf_s(fAdml,"\t\t\t\t<decimalTextBox refId=\"Value\" spin=\"false\">%s</decimalTextBox>\r\n",(const char*)name);
}
else if (pSetting->type==CSetting::TYPE_STRING || pSetting->type==CSetting::TYPE_ICON || pSetting->type==CSetting::TYPE_BITMAP || pSetting->type==CSetting::TYPE_BITMAP_JPG || pSetting->type==CSetting::TYPE_SOUND || pSetting->type==CSetting::TYPE_FONT)
else if (pSetting->type==CSetting::TYPE_STRING || pSetting->type==CSetting::TYPE_ICON || pSetting->type==CSetting::TYPE_BITMAP || pSetting->type==CSetting::TYPE_BITMAP_JPG || pSetting->type==CSetting::TYPE_SOUND || pSetting->type==CSetting::TYPE_FONT || pSetting->type==CSetting::TYPE_DIRECTORY)
{
fprintf_s(fAdml,"\t\t\t\t<textBox refId=\"Value\"><label>%s</label></textBox>\r\n",(const char*)name);
}

View File

@@ -32,6 +32,7 @@ struct CSetting
TYPE_SOUND,
TYPE_FONT,
TYPE_MULTISTRING,
TYPE_DIRECTORY,
};
enum
@@ -128,14 +129,13 @@ void InitSettings( CSetting *pSettings, TSettingsComponent component, ICustomSet
void LoadSettings( void );
void SaveSettings( void );
void UpdateDefaultSettings( void );
void EditSettings( const wchar_t *title, bool bModal, int tab );
void EditSettings( const wchar_t *title, bool bModal, int tab, const wchar_t *appId = nullptr );
void CloseSettings( void );
void SetSettingsDirty( void );
void SelectSettingsTab( int tab, bool bAdvanced, const CSetting *pSelect );
void UpdateSettings( void ); // implemented by the user
void UpgradeSettings( bool bShared ); // implemented by the user (called when converting 3.0 settings to 4.0)
void ClosingSettings( HWND hWnd, int flags, int command ); // implemented by the user
const wchar_t *GetDocRelativePath( void ); // implemented by the user
void SettingChangedCallback( const CSetting *pSetting ); // implemented by the user
bool IsSettingsMessage( MSG *msg );
bool ImportSettingsXml( const wchar_t *fname );

View File

@@ -1156,7 +1156,7 @@ HRESULT STDMETHODCALLTYPE CBrowseLinkEvents::OnButtonClicked( IFileDialogCustomi
{
pfd->GetFolder(&pItem);
}
m_pResult=pItem;
m_pResult=std::move(pItem);
pfd->Close(S_FALSE);
return S_OK;
}
@@ -1216,7 +1216,7 @@ bool BrowseCommandHelper( HWND parent, wchar_t *text )
return false;
}
bool BrowseLinkHelper( HWND parent, wchar_t *text )
bool BrowseLinkHelper( HWND parent, wchar_t *text, bool bFoldersOnly )
{
DoEnvironmentSubst(text,_MAX_PATH);
@@ -1227,16 +1227,22 @@ bool BrowseLinkHelper( HWND parent, wchar_t *text )
if (!pCustomize)
return false;
pDialog->SetTitle(LoadStringEx(IDS_PICK_LINK_TITLE));
pDialog->SetOkButtonLabel(LoadStringEx(IDS_PICK_LINK_FILE));
wchar_t button[256];
Sprintf(button,_countof(button),L" %s ",LoadStringEx(IDS_PICK_LINK_FOLDER));
pCustomize->AddPushButton(101,button);
pDialog->SetTitle(LoadStringEx(bFoldersOnly?IDS_PICK_LINK_FOLDER:IDS_PICK_LINK_TITLE));
if (!bFoldersOnly) // add separate buttons for selecting files/folders to the dialog
{
pDialog->SetOkButtonLabel(LoadStringEx(IDS_PICK_LINK_FILE));
wchar_t button[256];
Sprintf(button,_countof(button),L" %s ",LoadStringEx(IDS_PICK_LINK_FOLDER));
pCustomize->AddPushButton(101,button);
}
CBrowseLinkEvents events;
DWORD cookie;
pDialog->Advise(&events,&cookie);
pDialog->SetOptions(FOS_ALLNONSTORAGEITEMS|FOS_FILEMUSTEXIST|FOS_DONTADDTORECENT|FOS_DEFAULTNOMINIMODE|FOS_NODEREFERENCELINKS);
if (bFoldersOnly) // set FOS_PICKFOLDERS option to use dialog in folder-only mode
pDialog->SetOptions(FOS_PICKFOLDERS|FOS_ALLNONSTORAGEITEMS|FOS_DONTADDTORECENT|FOS_DEFAULTNOMINIMODE);
else
pDialog->SetOptions(FOS_ALLNONSTORAGEITEMS|FOS_FILEMUSTEXIST|FOS_DONTADDTORECENT|FOS_DEFAULTNOMINIMODE|FOS_NODEREFERENCELINKS);
{
const wchar_t *c=wcschr(text,'|');
if (c)
@@ -2271,6 +2277,7 @@ public:
EDIT_HOTKEY_ANY,
EDIT_COLOR,
EDIT_FONT,
EDIT_DIRECTORY,
};
BEGIN_MSG_MAP( CTreeSettingsDlg )
@@ -2644,15 +2651,14 @@ LRESULT CTreeSettingsDlg::OnBrowse( WORD wNotifyCode, WORD wID, HWND hWndCtl, BO
CString str;
m_EditBox.GetWindowText(str);
str.TrimLeft(); str.TrimRight();
wchar_t *end;
COLORREF val=wcstol(str,&end,16)&0xFFFFFF;
COLORREF val=RgbToBgr(ParseColor(str));
static COLORREF customColors[16];
CHOOSECOLOR choose={sizeof(choose),m_hWnd,NULL,val,customColors};
choose.Flags=CC_ANYCOLOR|CC_FULLOPEN|CC_RGBINIT;
if (ChooseColor(&choose))
{
wchar_t text[100];
Sprintf(text,_countof(text),L"%06X",choose.rgbResult);
Sprintf(text,_countof(text),L"%06X",BgrToRgb(choose.rgbResult));
m_EditBox.SetWindowText(text);
ApplyEditBox();
UpdateGroup(m_pEditSetting);
@@ -2695,7 +2701,7 @@ LRESULT CTreeSettingsDlg::OnBrowse( WORD wNotifyCode, WORD wID, HWND hWndCtl, BO
else if (_wcsicmp(token,L"bold_italic")==0)
font.lfWeight=FW_BOLD, font.lfItalic=1;
str=GetToken(str,token,_countof(token),L", \t");
font.lfHeight=-(_wtol(token)*dpi+36)/72;
font.lfHeight=-MulDiv(_wtol(token),dpi,72);
CHOOSEFONT choose={sizeof(choose),m_hWnd,NULL,&font};
choose.Flags=CF_NOSCRIPTSEL;
@@ -2714,6 +2720,29 @@ LRESULT CTreeSettingsDlg::OnBrowse( WORD wNotifyCode, WORD wID, HWND hWndCtl, BO
m_EditBox.SetFocus();
m_bIgnoreFocus=false;
}
else if (m_EditMode==EDIT_DIRECTORY)
{
m_bIgnoreFocus=true;
CString str;
m_EditBox.GetWindowText(str);
str.TrimLeft(); str.TrimRight();
wchar_t text[1024];
DWORD dwAttrs=GetFileAttributes(str); // ensure directory exists before passing it to dialog
if (dwAttrs!=INVALID_FILE_ATTRIBUTES && dwAttrs&FILE_ATTRIBUTE_DIRECTORY)
{
Strcpy(text,_countof(text),str);
DoEnvironmentSubst(text,_countof(text));
}
else
text[0]=0;
Strcpy(text,_countof(text),str);
DoEnvironmentSubst(text,_countof(text));
if (BrowseLinkHelper(m_hWnd,text,true))
m_EditBox.SetWindowText(text);
SendMessage(WM_NEXTDLGCTL,(LPARAM)m_EditBox.m_hWnd,TRUE);
m_EditBox.SetFocus();
m_bIgnoreFocus=false;
}
return 0;
}
@@ -3018,8 +3047,7 @@ void CTreeSettingsDlg::ApplyEditBox( void )
}
else if (pSetting->type==CSetting::TYPE_COLOR)
{
wchar_t *end;
int val=wcstol(str,&end,16)&0xFFFFFF;
int val=RgbToBgr(ParseColor(str));
if (pSetting->value.vt!=VT_I4 || pSetting->value.intVal!=val)
{
pSetting->value=CComVariant(val);
@@ -3034,6 +3062,20 @@ void CTreeSettingsDlg::ApplyEditBox( void )
pSetting->flags&=~CSetting::FLAG_DEFAULT;
}
}
else if (pSetting->type==CSetting::TYPE_DIRECTORY)
{
if (pSetting->value.vt!=VT_BSTR || str!=pSetting->value.bstrVal)
{
if (str.IsEmpty()) // empty directory strings cause unexpected behavior, so we reset to avoid this
pSetting->value=pSetting->defValue;
else // otherwise we are very lenient about what users can input as a path
pSetting->value=CComVariant(str);
if (pSetting->value==pSetting->defValue)
pSetting->flags|=CSetting::FLAG_DEFAULT;
else
pSetting->flags&=~CSetting::FLAG_DEFAULT;
}
}
else
{
if (pSetting->value.vt!=VT_BSTR || str!=pSetting->value.bstrVal)
@@ -3074,7 +3116,7 @@ void CTreeSettingsDlg::ItemSelected( HTREEITEM hItem, CSetting *pSetting, bool b
val=valVar.intVal;
Sprintf(text,_countof(text),L"%d",val);
}
else if (pSetting->type==CSetting::TYPE_STRING || pSetting->type==CSetting::TYPE_ICON || pSetting->type==CSetting::TYPE_BITMAP || pSetting->type==CSetting::TYPE_BITMAP_JPG || pSetting->type==CSetting::TYPE_SOUND || pSetting->type==CSetting::TYPE_FONT)
else if (pSetting->type==CSetting::TYPE_STRING || pSetting->type==CSetting::TYPE_ICON || pSetting->type==CSetting::TYPE_BITMAP || pSetting->type==CSetting::TYPE_BITMAP_JPG || pSetting->type==CSetting::TYPE_SOUND || pSetting->type==CSetting::TYPE_FONT || pSetting->type==CSetting::TYPE_DIRECTORY)
{
if (valVar.vt==VT_BSTR)
Strcpy(text,_countof(text),valVar.bstrVal);
@@ -3090,8 +3132,10 @@ void CTreeSettingsDlg::ItemSelected( HTREEITEM hItem, CSetting *pSetting, bool b
mode=EDIT_BITMAP_JPG;
else if (pSetting->type==CSetting::TYPE_SOUND)
mode=EDIT_SOUND;
else
else if (pSetting->type==CSetting::TYPE_FONT)
mode=EDIT_FONT;
else
mode=EDIT_DIRECTORY;
}
else if (pSetting->type==CSetting::TYPE_HOTKEY || pSetting->type==CSetting::TYPE_HOTKEY_ANY)
{
@@ -3110,7 +3154,7 @@ void CTreeSettingsDlg::ItemSelected( HTREEITEM hItem, CSetting *pSetting, bool b
mode=EDIT_COLOR;
int val=0;
if (valVar.vt==VT_I4)
val=valVar.intVal;
val=BgrToRgb(valVar.intVal);
Sprintf(text,_countof(text),L"%06X",val);
}
}
@@ -3131,7 +3175,7 @@ void CTreeSettingsDlg::ItemSelected( HTREEITEM hItem, CSetting *pSetting, bool b
m_pEditSetting=pSetting;
}
if (mode==EDIT_ICON || mode==EDIT_BITMAP || mode==EDIT_BITMAP_JPG || mode==EDIT_SOUND || mode==EDIT_FONT || mode==EDIT_COLOR)
if (mode==EDIT_ICON || mode==EDIT_BITMAP || mode==EDIT_BITMAP_JPG || mode==EDIT_SOUND || mode==EDIT_FONT || mode==EDIT_COLOR || mode==EDIT_DIRECTORY)
{
RECT rc2=rc;
int width=(rc2.bottom-rc2.top)*3/2;
@@ -3189,14 +3233,15 @@ void CTreeSettingsDlg::UpdateEditPosition( void )
DeleteDC(hdc);
DWORD margins=(DWORD)m_EditBox.SendMessage(EM_GETMARGINS);
size.cx+=HIWORD(margins)+LOWORD(margins)+12;
if (m_EditMode==EDIT_ICON || m_EditMode==EDIT_BITMAP || m_EditMode==EDIT_BITMAP_JPG || m_EditMode==EDIT_FONT || m_EditMode==EDIT_COLOR)
// adjust size and position of edit boxes for settings that use browse/play buttons
if (m_EditMode==EDIT_ICON || m_EditMode==EDIT_BITMAP || m_EditMode==EDIT_BITMAP_JPG || m_EditMode==EDIT_FONT || m_EditMode==EDIT_COLOR || m_EditMode==EDIT_DIRECTORY)
size.cx+=width;
if (m_EditMode==EDIT_SOUND)
size.cx+=width*2;
if (size.cx<w)
rc.right=rc.left+size.cx;
if (m_EditMode==EDIT_ICON || m_EditMode==EDIT_BITMAP || m_EditMode==EDIT_BITMAP_JPG || m_EditMode==EDIT_SOUND || m_EditMode==EDIT_FONT || m_EditMode==EDIT_COLOR)
if (m_EditMode==EDIT_ICON || m_EditMode==EDIT_BITMAP || m_EditMode==EDIT_BITMAP_JPG || m_EditMode==EDIT_SOUND || m_EditMode==EDIT_FONT || m_EditMode==EDIT_COLOR || m_EditMode==EDIT_DIRECTORY)
{
RECT rc2=rc;
rc2.left=rc2.right-width;
@@ -3376,6 +3421,9 @@ void CTreeSettingsDlg::UpdateGroup( const CSetting *pModified )
bool bDefault=pSetting->IsDefault();
const CComVariant &valVar=pSetting->GetValue();
// check if modified items should be bold
bool bBoldSettings=GetSettingBool(L"BoldSettings");
// calculate text
if (pSetting!=m_pEditSetting)
{
@@ -3412,7 +3460,7 @@ void CTreeSettingsDlg::UpdateGroup( const CSetting *pModified )
CString str=LoadStringEx(pSetting->nameID);
int val=0;
if (valVar.vt==VT_I4)
val=valVar.intVal;
val=BgrToRgb(valVar.intVal);
Sprintf(text,_countof(text),L"%s: %06X",str,val);
item.mask|=TVIF_TEXT;
}
@@ -3458,7 +3506,7 @@ void CTreeSettingsDlg::UpdateGroup( const CSetting *pModified )
DeleteDC(hdc);
DeleteDC(hdcMask);
}
int state=bDefault?0:TVIS_BOLD;
int state=bDefault||!bBoldSettings?0:TVIS_BOLD; // check if item should be highlighted in bold
if (!bEnabled)
{
if (pSetting->type!=CSetting::TYPE_COLOR) image|=SETTING_STATE_DISABLED;
@@ -3566,3 +3614,19 @@ bool CDefaultSettingsPanel::Validate( HWND parent )
s_Dialog.Validate();
return true;
}
DWORD RgbToBgr(DWORD val)
{
return ((val & 0xFF) << 16) | (val & 0xFF00) | ((val >> 16) & 0xFF);
}
DWORD BgrToRgb(DWORD val)
{
return RgbToBgr(val);
}
DWORD ParseColor(const wchar_t* str)
{
wchar_t* end;
return wcstoul(str, &end, 16) & 0xFFFFFF;
}

Some files were not shown because too many files have changed in this diff Show More