How do I reorder the items in Explorer's New menu in Windows 10?
up vote
1
down vote
favorite
How do I move an item above the separator line in the New submenu of Windows 10's right-click context menu?
Is there anything in the Registry that needs to be set?
windows windows-10 windows-registry
add a comment |
up vote
1
down vote
favorite
How do I move an item above the separator line in the New submenu of Windows 10's right-click context menu?
Is there anything in the Registry that needs to be set?
windows windows-10 windows-registry
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
How do I move an item above the separator line in the New submenu of Windows 10's right-click context menu?
Is there anything in the Registry that needs to be set?
windows windows-10 windows-registry
How do I move an item above the separator line in the New submenu of Windows 10's right-click context menu?
Is there anything in the Registry that needs to be set?
windows windows-10 windows-registry
windows windows-10 windows-registry
edited Nov 22 at 20:38
Ben N
28.8k1394140
28.8k1394140
asked Nov 21 at 4:18
Saud Iqbal
62
62
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
Create a Config
subkey under the ShellNew
key of your file type. Then inside that subkey, add a string value named BeforeSeparator
. The change should take effect immediately:
To figure this out, I had to dive into the Explorer code. shell32.dll
contains a CNewMenu
class that represents the New menu and has a function named _BeforeSeparator
that determines whether the given entry should be placed before the separator. Here's the important part of that function's disassembly (courtesy of IDA):
First it uses PathMatchSpecW
to see if the key name is one of .lnk
, .library-ms
, or Folder
. If it is (red/left path), the item is guaranteed to appear above the line. If not (green/right path), the function checks whether a certain bit (10h
) in a certain part (+8
) of the data structure is set.
I needed to find the code responsible for setting that bit. There's a function called _GetNewObjectInfoForKey
that seems to be responsible for setting up the relevant data structures. Here's part of its disassembly, almost right at the beginning:
It tries to open a subkey called Config
and, if successful (red path), uses the _GetConfigFlags
function to set the part of the data structure containing the bit we're interested in! _GetConfigFlags
goes along testing for the existence of various entries and setting various bits if appropriate. Here's the part that sets our target bit (10h
):
And there we see the desired entry name: BeforeSeparator
.
+1 for the assembly. Context menu registry changes can be applied with Explorer restart (without rebooting).
– Biswapriyo
Nov 23 at 3:01
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
Create a Config
subkey under the ShellNew
key of your file type. Then inside that subkey, add a string value named BeforeSeparator
. The change should take effect immediately:
To figure this out, I had to dive into the Explorer code. shell32.dll
contains a CNewMenu
class that represents the New menu and has a function named _BeforeSeparator
that determines whether the given entry should be placed before the separator. Here's the important part of that function's disassembly (courtesy of IDA):
First it uses PathMatchSpecW
to see if the key name is one of .lnk
, .library-ms
, or Folder
. If it is (red/left path), the item is guaranteed to appear above the line. If not (green/right path), the function checks whether a certain bit (10h
) in a certain part (+8
) of the data structure is set.
I needed to find the code responsible for setting that bit. There's a function called _GetNewObjectInfoForKey
that seems to be responsible for setting up the relevant data structures. Here's part of its disassembly, almost right at the beginning:
It tries to open a subkey called Config
and, if successful (red path), uses the _GetConfigFlags
function to set the part of the data structure containing the bit we're interested in! _GetConfigFlags
goes along testing for the existence of various entries and setting various bits if appropriate. Here's the part that sets our target bit (10h
):
And there we see the desired entry name: BeforeSeparator
.
+1 for the assembly. Context menu registry changes can be applied with Explorer restart (without rebooting).
– Biswapriyo
Nov 23 at 3:01
add a comment |
up vote
1
down vote
Create a Config
subkey under the ShellNew
key of your file type. Then inside that subkey, add a string value named BeforeSeparator
. The change should take effect immediately:
To figure this out, I had to dive into the Explorer code. shell32.dll
contains a CNewMenu
class that represents the New menu and has a function named _BeforeSeparator
that determines whether the given entry should be placed before the separator. Here's the important part of that function's disassembly (courtesy of IDA):
First it uses PathMatchSpecW
to see if the key name is one of .lnk
, .library-ms
, or Folder
. If it is (red/left path), the item is guaranteed to appear above the line. If not (green/right path), the function checks whether a certain bit (10h
) in a certain part (+8
) of the data structure is set.
I needed to find the code responsible for setting that bit. There's a function called _GetNewObjectInfoForKey
that seems to be responsible for setting up the relevant data structures. Here's part of its disassembly, almost right at the beginning:
It tries to open a subkey called Config
and, if successful (red path), uses the _GetConfigFlags
function to set the part of the data structure containing the bit we're interested in! _GetConfigFlags
goes along testing for the existence of various entries and setting various bits if appropriate. Here's the part that sets our target bit (10h
):
And there we see the desired entry name: BeforeSeparator
.
+1 for the assembly. Context menu registry changes can be applied with Explorer restart (without rebooting).
– Biswapriyo
Nov 23 at 3:01
add a comment |
up vote
1
down vote
up vote
1
down vote
Create a Config
subkey under the ShellNew
key of your file type. Then inside that subkey, add a string value named BeforeSeparator
. The change should take effect immediately:
To figure this out, I had to dive into the Explorer code. shell32.dll
contains a CNewMenu
class that represents the New menu and has a function named _BeforeSeparator
that determines whether the given entry should be placed before the separator. Here's the important part of that function's disassembly (courtesy of IDA):
First it uses PathMatchSpecW
to see if the key name is one of .lnk
, .library-ms
, or Folder
. If it is (red/left path), the item is guaranteed to appear above the line. If not (green/right path), the function checks whether a certain bit (10h
) in a certain part (+8
) of the data structure is set.
I needed to find the code responsible for setting that bit. There's a function called _GetNewObjectInfoForKey
that seems to be responsible for setting up the relevant data structures. Here's part of its disassembly, almost right at the beginning:
It tries to open a subkey called Config
and, if successful (red path), uses the _GetConfigFlags
function to set the part of the data structure containing the bit we're interested in! _GetConfigFlags
goes along testing for the existence of various entries and setting various bits if appropriate. Here's the part that sets our target bit (10h
):
And there we see the desired entry name: BeforeSeparator
.
Create a Config
subkey under the ShellNew
key of your file type. Then inside that subkey, add a string value named BeforeSeparator
. The change should take effect immediately:
To figure this out, I had to dive into the Explorer code. shell32.dll
contains a CNewMenu
class that represents the New menu and has a function named _BeforeSeparator
that determines whether the given entry should be placed before the separator. Here's the important part of that function's disassembly (courtesy of IDA):
First it uses PathMatchSpecW
to see if the key name is one of .lnk
, .library-ms
, or Folder
. If it is (red/left path), the item is guaranteed to appear above the line. If not (green/right path), the function checks whether a certain bit (10h
) in a certain part (+8
) of the data structure is set.
I needed to find the code responsible for setting that bit. There's a function called _GetNewObjectInfoForKey
that seems to be responsible for setting up the relevant data structures. Here's part of its disassembly, almost right at the beginning:
It tries to open a subkey called Config
and, if successful (red path), uses the _GetConfigFlags
function to set the part of the data structure containing the bit we're interested in! _GetConfigFlags
goes along testing for the existence of various entries and setting various bits if appropriate. Here's the part that sets our target bit (10h
):
And there we see the desired entry name: BeforeSeparator
.
edited 2 days ago
answered Nov 22 at 21:08
Ben N
28.8k1394140
28.8k1394140
+1 for the assembly. Context menu registry changes can be applied with Explorer restart (without rebooting).
– Biswapriyo
Nov 23 at 3:01
add a comment |
+1 for the assembly. Context menu registry changes can be applied with Explorer restart (without rebooting).
– Biswapriyo
Nov 23 at 3:01
+1 for the assembly. Context menu registry changes can be applied with Explorer restart (without rebooting).
– Biswapriyo
Nov 23 at 3:01
+1 for the assembly. Context menu registry changes can be applied with Explorer restart (without rebooting).
– Biswapriyo
Nov 23 at 3:01
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1377164%2fhow-do-i-reorder-the-items-in-explorers-new-menu-in-windows-10%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown