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

    • AMD RX 9070 GRE AI, Blender benchmarks vs 9070 XT, 7800XT, Nvidia RTX 5070, 4070 by Sayan Sen Earlier this week, we shared the first part of our review of AMD's new RX 9070 GRE. It was about the gaming performance of the GPU, and we gave it an 8 out of 10. As a follow-up, similar to how we did with the 9070 XT and non-XT, we are doing a dedicated productivity review for the RX 9070 GRE as well, where we compare it against the 9070 XT, 9070, 7800 XT, as well as Nvidia's 5070 and 4070. This will include AI, rendering, compute, and more benchmarks. AI performance, especially, is a very important metric in today's world, and AMD also promised big improvements thanks to its underlying architectural improvements. We will be pitching it against the data we already have for the RX 9070, and RX 9070 XT, but also the Nvidia 5070 FE, MSI GeForce RTX 4070 VENTUS 2X 12G, and Gigabyte Radeon RX 7800 XT GAMING OC 16G as they are in a similar price class, but also because we do not have a comparable 5060 Ti card lying around here that we can compare it against. Before we get underway, this is a collaboration between Sayan Sen and Steven Parker, who lent me his test bed. Also, there was no editorial input from AMD. First up, the specs of the RX 9070, 9070 XT, and 9070 GRE, which were given to us by AMD: Radeon RX 9070 GRE Radeon RX 9070 Radeon RX 9070 XT Boost Clock: Game Clock: up to 2.79GHz up to 2.20GHz up to 2.52GHz up to 2.07GHz up to 2.97GHz up to 2.40GHz Stream Processors 3,072 (48 CU) 3,584 (56 CU) 4,096 (64 CU) Ray Accelerator 48 56 64 AI Accelerator 96 112 128 ROPs 96 128 Texture Mapping Units 192 224 256 Memory 12 GB GDDR6, 18Gbps Clock, 192-bit Bus 432 GB/s 16 GB GDDR6, 20Gbps Clock, 256-bit Bus Effective Memory Bandwidth: 640 GB/s Infinity Cache 48 MB (3rd Gen) 64 MB (3rd Gen) Card Bus PCI-E 5.0 X16 Output 2x HDMI 2.1b 2x DisplayPort 2.1a Power consumption 220W 304W Recommended PSU 650W 750W Slot width 2x 3x Price (SEP) $549 $599 As you can see from the specs above, it is less than the standard RX 9070 in every way that counts, except for slightly higher Boost and Game clock speed. Design Moving on, the RX 9070 GRE we were given is an XFX Swift triple-fan, dual-slot design with two 8-pin connectors. At 30cm (self-measured), it will fit in most systems easily. There is no RGB either. The AMD Radeon RX 9070 GRE by XFX from all angles. Test system Our test system consists of the following: Lian Li O11 Dynamic Mini V2 Flow (Amazon|Newegg) ASUS Z890 ProArt Creator WiFi (Amazon|Newegg) Intel Core Ultra 7 270K Plus (Amazon|Newegg) Thermal Grizzly KryoSheet - 44x37 (Amazon|Newegg) 2x 16GB G.Skill Trident Z5 RGB (7200 MT/s in XMP) (Amazon|Newegg) Sabrent Rocket4 Plus 2TB SSD (Amazon) Windows 11 25H2 (Build 26200.8246) AMD shared a press driver based on the recently released Adrenaline 26.5.2 that we were required to use. We now move on to our benchmarks. First up, we have Geekbench AI running on ONNX. For some reason, the 9070 GRE does exceptionally well here in both half-precision (FP16) and single-precision (FP32). It manages to beat the RTX 5070 and RX 9070 non-XT, and is only behind the 9070 XT. Since Geekbench runs in short bursts instead of continuously hammering the graphics card, it seems the GRE's faster boost clocks are helping here. Next up, we move to the UL Procyon AI test suite, starting with the image generation benchmark. We chose the Stable Diffusion XL FP16 test since it is the most intense workload available on Procyon. The Nvidia cards do very well here, as even the 4070 out-muscles AMD's best fairy easily. The positive thing about the GRE is that it gets quite close to the 9070 non-XT in this test; this indicates that the VRAM does not play a very big role here, as SD XL relies on float16 (FP16). So this is something to keep in mind again. If you wish to work with float32 AI workloads, graphics cards with larger than 12 GB buffers would likely emerge as victors. Regardless, the gains are still massive on AMD's 9000 series compared to the 7000 series. Following image generation, we move to the text generation benchmark. This is one test where the 9070 GRE struggled, quite a lot. It seems that the 12 GB VRAM and lower memory bandwidth of the new Radeon 9070 GRE are hurting it quite a bit; the split is massive, especially in a test like Llama2, which packs 13 billion parameters. As such, in all the tests, the 9070 GRE is the slowest of the lot. Next, we tried Blender, and here the AMD GPUs were beaten by Nvidia. Rendering is something the Green team has always had a lead over the Red side, and it has not changed so far. On the positive side, though, the 9070 GRE shows significantly better results than the 7800 XT, which means AMD is on the right path. Catching up to Nvidia, though, will require a lot more effort. And we hope HIP and ROCm can keep improving. Wrapping up AI testing, we measured OpenCL throughput in the Geekbench compute benchmark. The RX 9070 GRE alongside the 9070 did not fare well here at all, even falling behind the 7800 XT. Interestingly, even the RTX 5070 could not beat the 4070 on OpenCL, so perhaps this suggests that OpenCL optimization may not have been a priority for either AMD or Nvidia in the modern era. Conclusion We reached the end of our productivity performance review of the 9070 GRE, and we have to say it's a mixed bag. Unlike the 9070 and 9070 XT, the GRE excels in some areas while losing ground fairly easily in others. Similar to how it happened in gaming, any time the card's memory subsystem gets hammered, it tends to fall behind the others. This was the case with text generation, wherein we saw the VRAM sometimes hit its maximum available 12 GB of usage with larger model sizes. So what do we make of the RX 9070 as a productivity hardware? It can certainly be used, but you have to know it has its limitations. For those looking for a GPU that can deal with more, AMD recently unveiled the Radeon AI PRO R9700, which is essentially a 32 GB refresh of the 9070 XT with some additional workstation-based optimizations. On a similar note, the new Ryzen AI Halo platform is something you can consider if you want to set up a local AI processing station. Considering everything, we rate AMD's Radeon RX 9070 GRE a 7.5 out of 10 for its productivity performance. Price is less of a factor for those looking at productivity cases compared to those considering the GPU for gaming, and as such, we felt it did quite decently on many occasions and can be handy if you need a 12 GB GPU and, for some reason, don't want to get Nvidia. Purchase links: RX 9070 / XT / GRE (Amazon US) As an Amazon Associate, we earn from qualifying purchases.
    • Does anyone here know if these updates are integrated into the UUP dump isos?
    • Motrix Next 3.9.4 by Razvan Serea Motrix Next is a modern, open-source cross-platform download manager built as the official next-generation successor to the original Motrix project. It has been completely rewritten using Tauri 2, Vue 3, TypeScript, and Rust, while still relying on the powerful Aria2 download engine for high-speed multi-protocol transfers. The app supports HTTP, HTTPS, FTP, BitTorrent, ED2K and magnet links, offering advanced features like multi-connection acceleration, task scheduling, bandwidth control, and batch download management. With a significantly reduced install size (around 20MB), it focuses on being lightweight, fast, and resource-efficient compared to traditional Electron-based download tools. Designed for Windows, macOS, and Linux, Motrix Next delivers a clean, modern UI inspired by Material Design 3 principles, with smooth animations and a minimal workflow. It improves usability through better download organization, system tray integration, and enhanced torrent handling including selective file downloads and tracker management. Motrix Next features: Multi-protocol downloads — HTTP, FTP, BitTorrent, Magnet, .torrent, ED2K, and Metalink tasks BitTorrent — Selective file download, DHT, peer exchange, encryption controls, metadata caching, GeoIP peer flags, and tracker probing Browser extension integration — Embedded Extension API with independent authentication, download confirmation, smart auto-submit, filename hints, referer/cookie forwarding, and real-time controls (Chrome Web Store · Edge Add-ons) Safe filename handling — Content-Disposition, RFC 2047, non-UTF-8, percent-encoded, and extensionless URL resolution with path traversal sanitization Download organization — Favorite and recent folders, optional file-type categorization, stale-record cleanup, and completed history backed by SQLite Concurrent downloads — Independent controls for active tasks, HTTP connections per server, segments per file, and BT peer limits Speed control — Global and per-task upload/download limits with day-of-week and time-of-day scheduling System integration — Tray operation, optional tray speed display, macOS Dock badge/progress, protocol handlers for magnet://, thunder://, and motrixnext:// Lightweight mode — Destroys the WebView on minimize-to-tray while Rust keeps the engine, task monitor, notifications, history, and extension routing alive Notifications and power options — Native task start/complete/failure notifications, keep-awake during downloads, and optional shutdown after completion Network controls — Scoped proxy support for downloads, app updates, and tracker updates, plus system proxy detection Auto-update channels — Stable, Beta, and Latest Across Channels policies with separate download and install phases Diagnostics — Structured logs, exportable diagnostic ZIPs, database integrity checks, automatic DB rebuild, and Linux GPU rendering fallback Personalization — Light/dark/system theme, 10 color schemes, 26 languages, and first-launch system language detection Motrix Next 3.9.4 changelog: Motrix Next 3.9.4 promotes the 3.9.4 beta cycle to stable. This release refreshes bundled engine binaries, improves task detail readability and copy actions, expands link handling for magnet and ED2K workflows, polishes responsive navigation and text wrapping, updates browser extension documentation, and refines network preference controls. New Features Task Detail copy actions — Added copyable values for task metadata and reusable render functions for long text fields. Magnet and ED2K lifecycle support — Added task lifecycle handling for magnet and ED2K links. History cleanup for deleted tasks — Deleted tasks can now remove matching history records. User-Agent management — Added user-agent management and improved related network preference controls. Browser extension documentation — Added the Firefox Add-ons link for the Motrix Next extension. Improvements Engine binaries — Updated bundled binaries for supported architectures. Task Detail readability — Long task names, URLs, tracker values, and copyable metadata now render more clearly. Deletion messaging — Refined localized task deletion text for clarity and consistency. Text wrapping — Improved URI input wrapping and task name multiline display. Navigation layout — Improved sub-navigation responsiveness. Disk allocation default — Changed the default file allocation method to trunc. Proxy controls — Improved proxy button styling in network preferences. Download: Motrix Next 64-bit | ARM64 | macOS ~20.0 MB (Open Source) Links: Website | macOS / Linux | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • NVIDIA officially supports Ubuntu, as linked above with the GeForce NOW Hands on I did in collaboration with Paul Hill.
    • TO be clear I am not running linux today, however I keep thinking about it. And I want to make sure there are minimal obstacles if I decide to make that switch in the coming months.
  • Recent Achievements

    • Proficient
      Eric Biran went up a rank
      Proficient
    • Dedicated
      Conjor earned a badge
      Dedicated
    • Week One Done
      Windows Guy earned a badge
      Week One Done
    • Dedicated
      Mark Spruce earned a badge
      Dedicated
    • Collaborator
      conkir earned a badge
      Collaborator
  • Popular Contributors

    1. 1
      +primortal
      479
    2. 2
      PsYcHoKiLLa
      250
    3. 3
      Steven P.
      72
    4. 4
      +Edouard
      69
    5. 5
      FloatingFatMan
      67
  • Tell a friend

    Love Neowin? Tell a friend!