Windows 8 Start Menu Modifier


Recommended Posts

Hello everyone, I thought I'd play around with some C# in Windows 8 and came up with the idea for an app. With this you can choose which screen the start menu should appear and allows you to dock it in top or bottom configuration non-full screen on any monitor. You can toggle between full screen and docked states with the press of a button and force your start menu to appear on a certain screen if you wish (moving a metro app to another screen will push the start menu to that screen as well but using the hotkey will force it back to the screen of choice).

Also if anyone knows how to simulate the keystroke or bring up the start menu via code let me know. I tried this using a keyboard event but it didn't bring up the start menu and did the ^{ESC} send keys trick but it doesn't seen to work in Windows 8. Would be cool to allow the hot key to bring up the start menu as well.

Screenshots are attached to the post.

Download: http://www.diablocra...MModifier1b.zip

post-250262-0-56066300-1347140129_thumb.

post-250262-0-80012700-1347140147_thumb.

post-250262-0-89085400-1347140386.jpg

Link to comment
https://www.neowin.net/forum/topic/1104241-windows-8-start-menu-modifier/
Share on other sites


private static void ShowStartMenu()
{
// key down event:
const byte keyControl = 0x11;
const byte keyEscape = 0x1B;
keybd_event(keyControl, 0, 0, UIntPtr.Zero);
keybd_event(keyEscape, 0, 0, UIntPtr.Zero);
// key up event:
const uint KEYEVENTF_KEYUP = 0x02;
keybd_event(keyControl, 0, KEYEVENTF_KEYUP, UIntPtr.Zero);
keybd_event(keyEscape, 0, KEYEVENTF_KEYUP, UIntPtr.Zero);
}
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,
UIntPtr dwExtraInfo);
[/CODE]

Also, awesome idea. I really want to know how it works. Would you mind posting some snippets or source?

Wow. Now this looks pretty cool. So, the Start menu slides down after clicking an app shortcut or moving away from it?

Yeah, if you click off the start screen it goes away just like if you were launching an app from the start menu. You can also toggle it and see it resize for a second when the start menu is up (so it'd be possible to do an animation/fade on the window if someone wanted to code it in, though not sure how it'd actually work in practice).

		private static void ShowStartMenu()
		{
			// key down event:
			const byte keyControl = 0x11;
			const byte keyEscape = 0x1B;
			keybd_event(keyControl, 0, 0, UIntPtr.Zero);
			keybd_event(keyEscape, 0, 0, UIntPtr.Zero);
			// key up event:
			const uint KEYEVENTF_KEYUP = 0x02;
			keybd_event(keyControl, 0, KEYEVENTF_KEYUP, UIntPtr.Zero);
			keybd_event(keyEscape, 0, KEYEVENTF_KEYUP, UIntPtr.Zero);
		}
		[DllImport("user32.dll")]
		static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,
		   UIntPtr dwExtraInfo);
[/CODE]

Also, awesome idea.  I really want to know how it works.  Would you mind posting some snippets or source?

Thanks, I used Spy++ to get the window handle of the start menu (had it right next to it on second monitor then toggled it and dragged really fast). From there I just played with some windows APIs to see what types of things I could do with the start menu and this is what I came up with.
I'll also try that code soon and see if I can get it implemented so people can bring up the start menu simultaneously if they are using this.
As for some of the code it's pretty simple (could probably leave flags null) -
[code]
UInt32 flags = SWP_SHOWWINDOW;
IntPtr hwnd = FindWindow("ImmersiveLauncher", null);
SetWindowPos(hwnd, HWND_TOP, x, y, width, height, flags);

Imports:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SetWindowPos(IntPtr hWnd,
  IntPtr hWndInsertAfter,
  int x,
  int y,
  int cx,
  int cy,
  UInt32 uFlags);

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

I tried getting the class name/handle of the search bar too and got "DirectUIHWND" but can't seem to adjust or resize that just yet. The search bar will appear on the last window a metro-style app was launched. Also if you're interested the class name for the metro band (the divider between a metro app/desktop) is called "ImmersiveGutter" with "Application Arrangement Bar" as the window title. Just by having the class names/handles to these windows you can do quite a bit of manipulation. Most of the code involved in this app is taskbar positioning/screen size calculations and settings-related stuff.

That's pretty cool. I tried to do the same, but I guess I'm just not fast enough with spy++ to do it all....can you also use this to reposition metro apps?

The API is capable so it's just a matter of doing more research to see if the metro apps have classes/titles/parent windows/or other attributes that distinguish them from the rest and retrieving the handles to send the proper API calls to. I'll see what I can find but if anyone else can find out more information that'd be great too :)

Update: I also found the "ImmersiveBackgroundWindow" class with the caption "Immersive Background" which is the solid background used when snapping metro windows to the side and there is nothing in the main container. I couldn't find a lot on the metro apps yet but did notice they all have the "EdgeUiInputWndClass" class at the top point of the screen (which should be responsible for the touch gestures/closing the app). It should be possible to detect using FindWindow if that class exists and to then find the main handle to the window below it though I haven't tested this yet.

Oops

See the end of this message for details on invoking

just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************

System.IO.FileNotFoundException: Could not find file 'E:\My Downloads\sm.ico'.

File name: 'E:\My Downloads\sm.ico'

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)

at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)

at System.Drawing.Icon..ctor(String fileName, Int32 width, Int32 height)

at System.Drawing.Icon..ctor(String fileName)

at SMModifier.frmSMModifier.createTaskTray()

at SMModifier.frmSMModifier.frmMain_Load(Object sender, EventArgs e)

at System.Windows.Forms.Form.OnLoad(EventArgs e)

at System.Windows.Forms.Form.OnCreateControl()

at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)

at System.Windows.Forms.Control.CreateControl()

at System.Windows.Forms.Control.WmShowWindow(Message& m)

at System.Windows.Forms.Control.WndProc(Message& m)

at System.Windows.Forms.ScrollableControl.WndProc(Message& m)

at System.Windows.Forms.ContainerControl.WndProc(Message& m)

at System.Windows.Forms.Form.WmShowWindow(Message& m)

at System.Windows.Forms.Form.WndProc(Message& m)

at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************

mscorlib

Assembly Version: 4.0.0.0

Win32 Version: 4.0.30319.17929 built by: FX45RTMREL

CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll

----------------------------------------

StartMenuModifier

Assembly Version: 1.0.0.0

Win32 Version: 1.0.0.0

CodeBase: file:///E:/My%20Downloads/StartMenuModifier.exe

----------------------------------------

System.Windows.Forms

Assembly Version: 4.0.0.0

Win32 Version: 4.0.30319.17929 built by: FX45RTMREL

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

----------------------------------------

System.Drawing

Assembly Version: 4.0.0.0

Win32 Version: 4.0.30319.17929 built by: FX45RTMREL

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

----------------------------------------

System

Assembly Version: 4.0.0.0

Win32 Version: 4.0.30319.17929 built by: FX45RTMREL

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

----------------------------------------

************** JIT Debugging **************

To enable just-in-time (JIT) debugging, the .config file for this

application or computer (machine.config) must have the

jitDebugging value set in the system.windows.forms section.

The application must also be compiled with debugging

enabled.

For example:

<configuration>

<system.windows.forms jitDebugging="true" />

</configuration>

When JIT debugging is enabled, any unhandled exception

will be sent to the JIT debugger registered on the computer

rather than be handled by this dialog box.


private static void ShowStartMenu()
{
// key down event:
const byte keyControl = 0x11;
const byte keyEscape = 0x1B;
keybd_event(keyControl, 0, 0, UIntPtr.Zero);
keybd_event(keyEscape, 0, 0, UIntPtr.Zero);
// key up event:
const uint KEYEVENTF_KEYUP = 0x02;
keybd_event(keyControl, 0, KEYEVENTF_KEYUP, UIntPtr.Zero);
keybd_event(keyEscape, 0, KEYEVENTF_KEYUP, UIntPtr.Zero);
}
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,
UIntPtr dwExtraInfo);
[/CODE]

Also, awesome idea. I really want to know how it works. Would you mind posting some snippets or source?

I tried this code and it doesn't work with Windows 8 -- doesn't bring up the start menu at all. I also tried using 0x5B for the left windows key button using keybd_event and it didn't work either. Are there any other hot keys that bring up the start menu?

Also progress-wise I'll have an updated version with some bug fixes soon.

Won't let me update my original post but here's the updated version for anyone who's interested - http://www.diablocra...MModifier1d.zip

Bug fixes/changes include:

* Single display configurations are now supported (crashed prior due to combo box not being loaded properly)

* Single .exe (no external icon needed)

* "ImmersiveBackgroundWindow" background now positioned off screen on toggle.

* Added support for launching start menu on toggle.

That is just strange. I tested the keybd event I sent you as well as the one above and both worked for me.

I'll try it in a separate project and give it a go. Maybe there's something I'm missing in my code that is conflicting with it.

Edit: Yep it worked. I'll take a look at my code now should be able to add this in.

Edit #2: Figured it out -- pressing the hot key then invoking another hot key simultaneously was causing the conflict so I set a 60ms delay before invoking it. Updated version to 1d.

Edited by svnO.o

Version 1e is now available: http://www.diablocrafts.com/uploads/SMModifier1e.zip

Updates include -

* Trimmed down dock size from 360px to 325px

* Added auto-dock option which will dock to primary screen's taskbar (thanks to KDapp for the suggestion)

Oh god PLEASE let us choose a custom height!

I have been dreaming of allowing my taskbar to appear WHILE the windows 8 start menu is up - using your app will let me do this!

Please allow custom startmenu height! That way I can select to have a height of say - 1000px and the start menu (OR MY DOCK) will still show up in a full start screen - YES!

Please! :woot:

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Waymo recalls self-driving software after cars enter closed freeway work zones by Paul Hill Waymo, the self-driving car maker owned by Alphabet – the parent company of Google –, has recalled some of its fifth-generation Automated Driving Systems (ADS). It did so after some of its cars drove through closed construction zones. According to the National Highway Traffic Safety Administration (NHTSA), the affected vehicles were capable of driving through a closed freeway construction zone and continuing to drive at speed. The listing on the NHTSA website says that Waymo is currently developing a solution to fix this issue, but in the meantime, freeway driving is being restricted. Waymo will update its ADS software so that vehicles can detect when they can avoid entering construction zones. According to the Safety Recall Report, on April 20, 2026, Waymo’s Field Safety Committee began meetings reviewing an event from April 11, 2026, and five events from April 19, 2026, where Waymo’s autonomous vehicles didn’t recognize and drove past ramp closure signs into the pre-planned freeway construction zones. This took place in Phoenix, Arizona. Separately, on May 18, 2026, seven Waymo vehicles entered freeway lanes with active construction in the San Francisco Bay Area by driving between cones that were placed to show the lane was closed. On the back of both of these events, Waymo restricted freeway driving until it could address the issue. In June, Waymo’s Safety Board reviewed the issue and additional information related to ADS performances around construction zones; then, as a result, it decided to conduct a recall. This development is not good for Waymo as it adds to a growing list of technical hiccups its cars have experienced. Ultimately, it will lead to more scrutiny from lawmakers around the world who will be more cautious about letting autonomous vehicles on their roads without tighter regulation. For readers in areas where Waymo operates, does this news make you more wary about stepping into one of these vehicles?
    • I'm still on Windows 10 22H2 because I didn't want to deal with all the issues in Windows 11, so I waited almost a week before installing the latest Patch Tuesday update (KB5094127), I went ahead and did it, and it was a huge mistake—ever since then, my File Explorer has seen a performance drop of about 30% when transferring large files... Once again, Microsoft has outdone itself! This update cannot be uninstalled, either through the Control Panel (via Settings) or by accessing Advanced Startup Options. The only possible alternative would be to use system restore points, but I’d have to reinstall all app and driver updates (and there’s no guarantee it would work). Or there’s the “nuclear option” of a in-place repair without losing files or apps, but even then, all my customizations would be lost! Microsoft just can’t help but mess everything up! Way to go, Microsoft! But I still don’t want your c****y Windows 11!
    • Microsoft: Windows 11 could finally solve a major issue across AMD, Nvidia, and Intel GPUs by Sayan Sen While Microsoft has been trying to improve it, Windows 11 is definitely not flawless, as even today some issues are taking a year to publicly acknowledge. However, one area of trouble that may finally see much better results soon is graphics driver crashes. Work on graphics driver timeouts, also called Timeout and Detection Recovery (TDR), is not new as the latest WDDM 3.2 also has specific improvements regarding it. Windows Display Driver Model (WDDM) version 3.2 is supported on Windows 11 24H2 and 25H2. However, with the upcoming version 26H2, TDR crash diagnosis could go to the next level as Microsoft is introducing a new DirectX 12 API feature called "DirectX Dump Files". Similar to how system memory dump files work when a system crashes or freezes or encounters any such major issue, DirectX Dump Files (DDF) will essentially record a snapshot of the GPU execution right at the moment a graphics-related crash or hang or freeze occurs, so that developers can better understand and diagnoze these TDR and timeout detection errors. The dump will be available as a .dxdmp file for analysis and it will be a comprehensive dump file generated with detailed insights about the hardware, drivers, Windows, as well as the affected application. This should be another welcome change in this department. Earlier at GDC 2026, when the technology was first debuted, Microsoft had shared more details regarding it. The company had explained how DDF is designed to gather data from every layer of the graphics stack into a single file, eliminating the need for developers to manually correlate logs from multiple tools. As mentioned above, the dump can contain a lot of useful details like GPU hardware state information such as register values, shader program counters, page fault virtual addresses, shader memory data, and command buffers. Alongside that, it also captures DirectX runtime and kernel information, including D3D objects, pipeline state objects, device error data, adapter details, and CPU call stacks. Microsoft says the feature has been built around two primary use cases: retail device removals and local device removals. The former allows developers to collect crash information from end users' systems in the field, while the latter helps QA teams and developers investigate issues on test machines. Developers will also be able to include up to 2 MB of custom application data through new D3D12 APIs, providing additional context for troubleshooting. In addition, Microsoft is introducing three dump collection modes ranging from zero-overhead capture, which has no runtime performance impact on supported hardware, to higher-detail modes that collect more vendor-specific debugging data. On compatible Tier 2 hardware, zero-overhead dumps will be enabled by default, meaning developers may begin receiving useful crash diagnostics without making any code changes. The table below explains the three tiers: Tier Description NO_OVERHEAD Enables crash capture with no runtime cost and is suitable for broad deployment MEDIUM_OVERHEAD Provides a balance, capturing additional diagnostic data with moderate impact HIGH_OVERHEAD Collects the most detailed GPU and driver state available, enabling deeper investigation at the cost of higher runtime overhead In terms of availability, the company expects broader release to be around the fall of 2026, which should be right around the time when Windows 11 version 26H2 lands. Right now, DirectX Dump Files are available as a preview and currently, only AMD has the compatible AgilitySDK Developer Preview driver version 26.10.07.02. You can find the official announcement post here on Microsoft's website.
    • And with SO much better perf than the laggy mess that is Files.
  • Recent Achievements

    • One Month Later
      Sharbel earned a badge
      One Month Later
    • First Post
      BizSAR earned a badge
      First Post
    • Week One Done
      Jordan Smith earned a badge
      Week One Done
    • Reacting Well
      BizSAR earned a badge
      Reacting Well
    • First Post
      AndreaB earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      598
    2. 2
      +Edouard
      190
    3. 3
      PsYcHoKiLLa
      80
    4. 4
      Michael Scrip
      76
    5. 5
      Steven P.
      69
  • Tell a friend

    Love Neowin? Tell a friend!