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/
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.
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.
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.
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.
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.
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
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
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
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
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
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).
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
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
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
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
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
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.
- 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
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.
- 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
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
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
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
- 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
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.
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.
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.
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.
- 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
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.
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.
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.
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.
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.
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.
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.
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.
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.
FixOpen-Shell/Open-Shell-Menu#980
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.
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.
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.
(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.
`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.
Some icons (modern settings, jump-list tasks) are monochrome, basically
they are defined just by alpha channel.
Thus they can be displayed in any color (white is default).
Since these icons are white by default, they look nice on dark
backgrounds. But they are not very visible on light backgrounds.
Thus the idea is to 'colorize' such icon using color of corresponding
text item. That way they will always have proper color.
Fixes#466.
Use `OnToastActivate` to display update dialog if user clicked on toast
during `update.exe` life-time.
Process messages for some time after displaying toast.
Otherwise toast may be not displayed at all.
Use toast notification to announce new update on modern Windows
versions.
The advantage of toasts is that they look more natural and they are
persistent. So one can find the information about new update in action
center even after notification timed out.
Task jump-list items for modern apps require special handling.
First of all they don't provide icon directly.
Icon location is stored in `PKEY_AppUserModel_DestListLogoUri` property.
And then has to be resolved for given application package.
Next, context menu of provided `IShellLink` item doesn't seem to be able
to start actual link target.
Thus we need to obtain context menu of target item.
Fixes#375.
Link to modern application will be treat as modern application itself.
This fixes jump-lists and invert metro color option on modern apps pinned
to start menu.
Based on `HostId`:
* {7E0522FC-1AC4-41CA-AFD0-3610417A9C41}
execute `shell:::{PageId}`
* {12B1697E-D3A0-4DBC-B568-CCF64A3F934D}
execute command in `DeepLink`
Currently it was used only in some cases (like Programs/Apps folder).
It will be more consistent to respect the setting for all folder
items.
Fixes#436.
Adds virtual shell folder that contains items representing modern settings parsed from
`%windir%\ImmersiveControlPanel\Settings\AllSystemSettings_{253E530E-387D-4BC2-959D-E6F86122E5F2}.xml`.
It can be accessed via `shell:::{82E749ED-B971-4550-BAF7-06AA2BF7E836}` (in explorer).
Item in folder will open given setting page in `Settings` application.
Some projects do register COM server in Debug/Release sonfigurations.
We should do it with per-user redirection so that there is no need to
run elevated Visual Studio.
This has no effect on COM server registering in installed Opne-Shell.
It is related only to local development.
When `Invert Metro icon color` is enabled `Open-Shell` needs to
distinguish full color icons from monochromatic ones.
Color icons are displayed normally. Monochromatic ones are displayed
inverted (original background becomes transparent and foreground will
get Metro accent color).
Metro icon is loaded from Metro app resources (usually PNG image) as
bitmap with premultiplied alpha channel.
This causes monochromatic image to essentially become grayscale (because
RGB values are multiplied with alpha channel value).
Function `DetectGrayscaleImage` is used to distinguish such images.
Unfortunatelly if original image is grayscale (such as new Windows
Terminal icon) it is recognized as monochromatic and thus inverted.
To prevent this we will take into account also alpha channel in
`DetectGrayscaleImage`.
In monochromatic images alpha channel value will be the same as the rest of
channel values.
For color images alpha channel value will be different than other
channel values.
Fixes#364.
Delete confirmation dialog may be (partially) hidden behing start menu.
As a result the dialog may be not accessible because start menu(s) are
displayed as top-most windows.
Thus when executing menu command we will make menu(s) non-topmost. So that
other windows can be drawn on top of menu(s).
Fixes#257
In several cases we don't want menu(s) to close when an action on menu was
done. For example on drag-n-drop or menu item deletion (where confirmation
dialog is shown).
In such situations `s_bPreventClosing` was set to true (and then back to
false when closing was allowed again).
Though original code honored this variable only in certain situations and
typically (at least on Win10) menus were hidden/closed despite of it.
This patch changes the behavior and menus(s) are not closed when
`s_bPreventClosing` is set to true.
Basically now menu(s) stay visible until there is an action that changes
active window.
Following functionality was also removed because it is not needed now:
* CMenuContainer::HideTemp
* COwnerWindow::OnClear
WM_CLEAR was sent to the window only by already removed `HideTemp`
`Open-Shell` needs to adjust itself after OS upgrade. It seems that
`StartMenuHelper` registration is lost after such upgrade:
http://www.classicshell.net/forum/viewtopic.php?f=7&t=8082#p34821
To fix this registration, administrator rights are required (means user
interaction, UAC).
While this is acceptable in consumer environment, it is typically not
desired in business environment where users typically doesn't have
administrator rights.
This patch allows to run `Open-Shell` in silent upgrade mode that will:
* check if OS version changed (otherwise end immediately)
* perform OS upgrade tasks without any user interraction
Such mode can be then used to create scheduled task that will run this
silent upgrade check on every boot with system rights:
`schtasks /Create /RU "NT AUTHORITY\SYSTEM" /SC ONSTART /TN "Open-Shell OS updgrade check" /TR "%ProgramFiles%\Open-Shell\StartMenu.exe -upgrade -silent"`
#167
Commit 1a5f62a added possibility to hide Lock/Sleep/Hibernate buttons if
they were disabled in system power settings.
Unfortunately this didn't work for Lock button.
To fix the behavior we have to add lock command to `g_StdOptions` array
and then all the checks introduced in 1a5f62a will apply properly.
#173
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 <atarget="_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
<spanstyle="font-weight: bold; color: rgb(79, 129, 189);">“yes, I know what I’m doing, I want to overwrite all files”</span> you have to
press <strong><spanstyle="color: rgb(79, 129, 189);">Alt+D, up, up, up, Space</span></strong>! It is harder than performing the <atarget="_blank"href="http://www.youtube.com/watch?v=AErqKebdqjU&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>
is immediately clear what is clickable <spanstyle="font-style: italic;">(clue – the buttons at the
bottom)</span>, there is easy keyboard navigation (press <spanstyle="font-weight: bold; color: rgb(79, 129, 189);">Y</span> for “Yes”, <spanstyle="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 <strongstyle="color: rgb(79, 129, 189);">Shift</strong> while clicking on the No button means "No to All" (or just press <strongstyle="color: rgb(79, 129, 189);">Shift+N</strong>).<br>
</p>
<p>If you click
on <spanstyle="text-decoration: underline;">More…</span> you will get
the original dialog from Windows. From there you
will see all the details and you’ll get an extra option to “Copy, but
keep both files”.</p>
<p><spanstyle="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><aname="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’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><aname="toolbar"></a>Toolbar for Windows Explorer</h1>
Windows
Explorer in Vista doesn’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>
<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 <spanstyle="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>
<spanstyle="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>
<imgsrc="images/titlebar.png"alt="Title bar tweaks"title="Title bar tweaks"><br>
<br>
Click on the <spanstyle="font-weight: bold;">Toolbar Buttons</span> tab to customize the toolbar:<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>
<spanstyle="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 <spanstyle="font-weight: bold;">Undo</span>, <spanstyle="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>
Here you can select a command for the button, its text and icon. Press the <spanstyle="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><spanstyle="font-weight: bold;">left blank</span> - then if the link attribute is used, it will act as a command</li>
<li><spanstyle="font-weight: bold;">one of the predefined commands</span> - from the dropdown</li>
<li><spanstyle="font-weight: bold;">open <some folder></span> - this will open the folder in the current browser</li>
<li><spanstyle="font-weight: bold;">sortby <property></span> - this will sort the folder by the given property - <spanstyle="font-weight: bold;">name, type, size </span>or<spanstyle="font-weight: bold;"> date</span>. Use '-' in front of the property to sort in descending order: <spanstyle="font-weight: bold;">"sortby -name"</span>. You can use other properties if you know their code. For example <spanstyle="font-weight: bold;">"sortby {B725F130-47EF-101A-A5F1-02608C9EEBAC}, 10"</span> is the same as <spanstyle="font-weight: bold;">"sortby name"</span>. For more property codes refer to the file <spanstyle="font-weight: bold;">propkey.h</span> in the Windows SDK (also found <ahref="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 <spanstyle="font-weight: bold;">album year</span> property <spanstyle="font-weight: bold;">{56A3372E-CE9C-11D2-9F0E-006097C686F6}, 5</span> only works when showing music albums)</li>
<li><spanstyle="font-weight: bold;">groupby <property></span> - similar to <spanstyle="font-weight: bold;">sortby</span>, but groups the files by a given property. Use the command <spanstyle="font-weight: bold;">groupby</span> with no property to disable the grouping<br>
<li><spanstyle="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:<brstyle="font-weight: bold;">
<ul>
<li><spanstyle="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>
<spanstyle="font-weight: bold;"></span></li>
<li><spanstyle="font-weight: bold;">resource file,icon ID</span> - for example <spanstyle="font-weight: bold;">%windir%\notepad.exe,2</span>. Do not leave space between the file name and the comma. <spanstyle="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 <spanstyle="font-weight: bold;">[...]</span> button next to the icon box</li>
<li><spanstyle="font-weight: bold;">,icon ID</span> - same as above, but the resource file is the <spanstyle="font-weight: bold;">ClassicExplorer.dll</span> itself. This is useful when referring to Classic Explorer's own icons<br>
</li>
<li><spanstyle="font-weight: bold;">icon file</span> - for example <spanstyle="font-weight: bold;">C:\Program Files\Mozilla Thunderbird\Email.ico</span></li>
<li><spanstyle="font-weight: bold;">none</span> - this will use a blank icon</li>
</ul>
If the label or the tip attribute start with <spanstyle="font-weight: bold;">$</span> (dollar sign), then the
system will treat it as a name of a string in the <spanstyle="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>
<spanstyle="font-weight: bold;">Note to developers: </span>Buttons for custom commands can be checked or disabled. The toolbar checks the registry key <spanstyle="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 <spanstyle="font-weight: bold;">OpenShell.CBandWindow</span>, and post a message <spanstyle="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><aname="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: <spanstyle="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: <spanstyle="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 <spanstyle="font-weight: bold;">C:\CopyParent.bat:<br><spanstyle="font-family: monospace;">
set list=%1<br>
set list=%list:"=%<br>
for /F "delims=" %%i in (%list%) do copy /Y "%%i" ..<br>
del %1<brstyle="font-family: monospace;"></span></span>
<br>
Use this command: <spanstyle="font-weight: bold;">C:\</span><spanstyle="font-weight: bold;">CopyParent</span><spanstyle="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 <spanstyle="font-weight: bold;">C:\SelectText.bat</span>:<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 <spanstyle="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 <spanstyle="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 <spanstyle="font-weight: bold;">EnableSettings</span>. Set it to 0 in the
registry to prevent the users from even opening the Settings dialog:<br>
<imgstyle="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
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. <spanstyle="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><aname="dependencies"></a>Dependencies on Windows settings<br>
</h1>
Some Classic Explorer settings require specific Windows settings to be enabled:<br>
<ul>
<li><spanstyle="font-weight: bold;">Windows Vista navigation pane style</span> - requires Windows to be using Aero or Basic theme</li>
<li><spanstyle="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 <spanstyle="font-weight: bold;">General</span> tab of <spanstyle="font-weight: bold;">Tools -> Folder Options</span></li>
<li><spanstyle="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 <spanstyle="font-weight: bold;">View</span> tab of <spanstyle="font-weight: bold;">Tools -> Folder Options</span></li>
<li><spanstyle="font-weight: bold;">All status bar settings</span> - require the status bar to be visible (not to be confused with the Details Pane). Check <spanstyle="font-weight: bold;">View -> Status bar</span></li>
</ul>
<br>
<h1><aname="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 <ahref="http://www.classicshell.net/translations/">translations page</a>. Make sure you download the translation package for the exact version of Open-Shell.<br>
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)
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 <spanstyle="font-weight: bold;">Tools -> 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><aname="settings"></a>Settings</h1>
You can access the settings from <spanstyle="font-weight: bold;">Tools -> 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>
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 <spanstyle="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 <spanstyle="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 <spanstyle="font-weight: bold;">EnableSettings</span>. Set it to 0 in the
registry to prevent the users from even opening the Settings dialog:<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>
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"
<spanstyle="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><spanstyle="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><spanstyle="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><spanstyle="font-weight: bold;">REDISTRIBUTION RIGHTS.</span> You may redistribute the software as long as you do it free of charge and you don’t misrepresent the origin of the software.</p>
</li>
<li>
<p><spanstyle="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><spanstyle="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><spanstyle="font-weight: bold;">IN OTHER WORDS:</span>
Basically you can use this software freely for any purpose but don’t be
surprised if it doesn’t work as you expect. You can’t hold the author
responsible for any damages that come to you from using the software.
You can’t profit from selling this software. You got it for free after
<h1><atarget="_blank"href="http://www.classicshell.net/"><imgsrc="images/OpenShell.png"style="border: 0px solid ; width: 64px; height: 64px;"alt="Open-Shell website"title="Open-Shell website"></a> Links</h1><spanstyle="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>
\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