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

    • Why you need to take back control of your synced passwords and how to go about doing that by Paul Hill Credit: Pixabay Last month, when Google decided to introduce daily and weekly caps for Gemini, it reignited an anxiety of mine, that you can’t really depend on service providers to maintain features forever, and it got me looking into free software (as in freedom) in other areas too. One app I quickly came across was KeePassXC on desktop and KeePassDX on Android as an alternative to password manager lock-in within the Chrome or Firefox ecosystems. I personally like to switch around with browsers, and using either password manager is inconvenient, so something like KeePassXC was interesting to me. The main issue with it now is syncing; I was not sure how to do that. After a bit of research, I came across Syncthing, a tool I was vaguely familiar with but had never used because it seemed complicated. However, I was completely wrong, and honestly, I think everyone should use it if they use multiple devices. It essentially lets you share folders peer to peer across all of your devices, no cloud services that you don’t control necessary! And it was fairly simple to set up, if not a bit clunky. Since setting it up, I’ve also started using Syncthing to back up other apps too, so don’t think it’s limited to just saving password databases. You can use it for pretty much anything you use Dropbox or Google Drive for. Before continuing to talk about those apps a bit more, let’s walk back a bit and talk about browser sync. Ever since the late 2000s and early 2010s, really, since we have been using smartphones, browser sync has been a necessity of life. I don’t know about you, but I have hundreds of passwords saved. For the most part, they’re all unique, so I don’t remember them and rely on software to manage them for me. Until recently, I’ve relied on password managers in Chrome and Firefox, but what I always found annoying was that it can be hard to transfer them between browsers. Sure, on Windows it is simple enough, but on Linux, exporting bookmarks has been temperamental. It works OK nowadays, but not too long ago, Chrome required you to enable exporting passwords in chrome://flags. The situation is even worse on mobile; there is no exporting or importing of passwords of any kind. You literally have to do it on a desktop, which is incredibly annoying in our mobile-first world. Sync also lets us take out bookmarks, history, tabs, and autofill data easily. To enable sync, it’s just a matter of signing into the browser once, and it handles the rest. It’s nice and easy. Obviously, all this has some issues, including those I’ve outlined above about it being hard to transfer data between browsers, but also things such as account suspension, lost account passwords, and other lock-in mechanisms, such as passkeys, being tied to a specific browser. On a sidenote, I have just removed all of my passkeys because they can make it harder to move browsers. I think the biggest threat to your synced passwords, especially if doing this with Google, is having your account suspended. I don’t ever expect mine to be suspended, but you do hear horror stories on Reddit where people lose access to their Google accounts. Imagine if you have hundreds of passwords, then suddenly lose access to them because Google froze your account, what would you do? So yes, it can be nice to use these syncing services for their convenience, but they also have risks. You may have seen me going on about free software quite a bit in my editorials. It’s essentially a concept championed by the Free Software Foundation. It’s software under particular licenses that grant you four freedoms: run the program for any purpose (0), study and change the source code (1), redistribute copies to others (2), and the freedom to distribute modified copies to others (3). For example, if there is an app I use and one day it gets abandoned by the developer, I can keep running it or even clone the software and continue developing it. Look at the myriad of cool services Google has run over the years before killing them. You can’t take the source code for those because they are proprietary, for the most part. Both KeePassXC and Syncthing are free software, so I get the freedoms listed above. In my use case where I’m syncing a database full of my passwords, I also get proper ownership over my data, there is no losing access to the database due to a frozen account, I can access the code of the tools I’m using, and I can get support from real people online if I run into issues, rather than having to consult a vague help page from an opaque company. With the KeePassXC password manager, you create a .kdbx file, which is what will be synced between devices. KeePassXC has cross-platform apps and also has browser extensions so that the browser can fetch passwords from the database once it is unlocked. Meanwhile, Syncthing is a peer-to-peer file sync tool where you can select folders to sync between your devices. Just pop files in the folders you choose, and then they will be available across your other devices whenever they come online. Syncthing is resilient as it works over both LAN and the internet and only ever sends content between your devices, never to a third-party server somewhere else. By combining these two pieces of software, you can essentially replicate the browser sync functionality. I have had a weird, conflicting issue where a new file is appearing, but it doesn’t seem to be impacting my main password database, which is updating between devices just fine. If you want to get a setup similar to what I have, you will need to go here to download KeePassXC for your computer. Once you have that, you will need to download your passwords from your web browser to a CSV file. In Chrome, you can type chrome://password-manager/settings into the URL bar, and you should see an option to download your passwords under Export Passwords. This will give you the CSV file you need for importing into KeePassXC. If you use a different browser, just use a search engine and type “browser-name export passwords” and muddle along. In KeePassXC, you’ll want to press Import File from the home screen, select the CSV file, and create a new database from it. On one of the screens of the wizard, there will be a Title field with a drop-down selected to none. Change this to Title and continue. You’ll select a name for the database, the encryption level (the defaults are fine), and then you will pick a password. I would choose four unrelated words that are easy for you to remember, as you’ll be typing them fairly often to access your passwords. When you have all your passwords in your new database, you will want to set up the browser extension so that your browser can fetch passwords from KeePassXC. Rather than explain how to do that here, refer to KeePassXC’s guide on how to set it up properly. Once you’ve got that set up, you want to install KeePassDX on Android. You can grab it on the F-Droid store and the Google Play Store. For iPhone users, there are other .kdbx-supporting apps, but I haven’t tried any of them, so have a look around and use what suits you. Once you have that done, you will want to install Syncthing on your computer and find a third-party app for your mobile device. On Android, I use an app called BasicSync; there are also options for iOS, but again, I’ve not tried these. Once you’ve got SyncThing, you’ll want to set it up and connect all of your devices together and share a folder between your gadgets. PCWorld has a good tutorial on setting up a synchronized file between your devices using SyncThing. Once you’ve set it up, congrats, you’ll never have to touch that stuff again except for adding or removing devices. I’ll be honest, I didn’t particularly like setting up Syncthing. It didn’t take me a massive amount of time, but I think I had to check online because I found it a bit confusing. That said, I’ve had it running for several weeks now and never need to touch the Syncthing settings, so that’s very nice. I also mentioned a conflicting file. I’m not sure why this is appearing, but the main .kdbx file seems to be updating and syncing just fine. What’s nice is that both KeePassXC and Syncthing are free software, so they won’t just vanish one day; you can take the code and fork the project or use a range of alternative implementations that others have made. It’s also nice that it works over LAN, so even if your ISP is having problems, your passwords will still sync. One area where you will want to be a bit more careful with this setup is if you only have one device. I am OK because I have a computer and two phones, all synced up. If you just have one device, you will probably want to store a backup of your .kdbx file somewhere else. Obviously, you’ll also want to remember your password really well, too. If you get locked out, it's game over. Overall, if you want to take back control of your computing from big tech, taking control of your passwords is an important part of this. You don’t need to immediately clear out your browser’s password manager; try running KeePassXC and the password manager concurrently for a while to see if you run into any problems. If you do try this out, let us know some other creative ways to use Syncthing. I haven’t really come up with a solution about what to do with my bookmarks, for example.
    • If the price was a dollar, someone would complain "Why isn't it free?" If it was free, someone would complain they weren't being paid to play it.
    • That lens of history will burn if you hold it at the right angle... Warn users too late: Shame, Microsoft! That extremely minor update to an obscure Control Panel widget required 2 years of warning. Warn users too early: Shame, Microsoft! We've got better things to do. Pipeline and process be damned, we'll just always be disappointed, eh?
    • Microsoft Paint used to be my favorite Windows app as a kid, and it's still pretty good by Usama Jawad I have been using Windows since the early 2000s, when I was around 10 years old or so. I vaguely remember playing around with Windows 98 and Windows 2000, but that may have been on school PCs which had old operating systems installed. My main OS on the home PC, and the one I recall spending most time with, was Windows XP. At that time, I used the home PC to create Word and PowerPoint documents for school, but a lot of the time, I simply used it to play games. My dad would bring game discs which we would try and install on the PC, sometimes unsuccessfully, and sometimes, we would rely on flash games in the browser, like Bubble Trouble on Miniclip. However, the problem with the latter approach was the internet speed. On a good day, our dial-up internet would offer us speeds of 56 kbps, but on most days, it was closer to 33 kbps. This did not facilitate online gaming as I would often have to wait minutes for a game to load or "draw" on the screen, and trying to download pirated games wasn't simple either. I remember getting tired of waiting for online games to load and just downloading simulator games from the Big Fish Games website instead, only to be disappointed after finding out that I was just being given access to trial versions of the title, and I needed to fork out money to pay for the full version. All of this is to say that it wasn't very easy to find entertainment options on the home PC when I was a kid, due to a number of reasons, mostly outside of my control. This situation pushed me towards a rather unconventional ally: Microsoft Paint. Whenever the internet wasn't working as good as I expected, I would simply spin up Paint and draw complete rubbish on the canvas. Of course, that wasn't always the intention, but it usually happened when I messed up drawing a straight line or something, and then I would give up on that particular piece and simply draw a random collection of objects. Microsoft Paint was extremely accessible and easy to use. Even if you weren't an artist, you could quickly understand the tools at your disposal and how to leverage them on a canvas. The absolute breadth on offer ensured that each painting was truly unique, as you could utilize various combinations of tools like the pencil, paint, spray paint, and more to truly personalize your creation. Since I wasn't particularly good at drawing both on digital screen or a physical screen, I remember that my main style of art would be to insert a bunch of randomly intersecting lines and then fill them with random colors through the paint can. I have trying to replicate that art style in the latest version of Paint below, and as you can see, it's truly Pablo Picasso-esque. The human imagination truly knows no bounds Microsoft Paint kept me occupied for hours and was my best friend when video games on the home PC were inaccessible for one reason or the other. There was no academic or professional reason for which I would need to use Paint, but I still loved using it in my personal time, even if what I created wasn't worth being shown to anyone. It was simply fun. Fast-forward to today, and the situation is mostly the same. Now that I am almost 29 years old, and I still have no reason to use Microsoft Paint in a professional capacity. In fact, I don't even use it in a personal capacity, except to dabble with it from time to time, just to see if core functionalities are still intact. And I'm happy to say that I think Microsoft Paint still offers the same accessibility and inviting experience that it did to me a couple of decades ago, even though its UX has been refreshed and it's been integrated with Copilot features. Interestingly, things could have been a lot different, had Microsoft had its way. Microsoft Paint was marked for deprecation with the Windows 10 Fall Creators Update in 2017, and even began displaying a product retirement alert, urging customers to shift to Paint 3D instead. Fortunately, after consumer backlash, Microsoft reversed course on this decision, and Paint continues to be a native app inside Windows installations that can also be updated quite frequently through the Microsoft Store. Instead, Paint 3D ended up on the chopping block, which is for the better, I think. I have intermittently played around with Microsoft's refreshed Paint experience in the past few years, and I do think it has received worthwhile upgrades. the UI and the UX has been modernized while retaining core functionality, and the app is still fairly easy to use. It doesn't meet any of my use-cases, but I've never really had any use-cases ever, as described previously. Of course, the elephant in the room is the Copilot integration. Personally, I believe that this is one place where Copilot does make sense, environmental concerns aside. I know that a lot of creatives use AI to generate images, and while some may be using professional alternatives, Paint still offers a decent casual experience, with the power of Copilot. Of course, you do need to have a valid Microsoft 365 Copilot license and available credits to use it, but even if you don't, you still get the big Copilot button in the toolbar, unfortunately. All in all, I am glad that Microsoft Paint continues to be a native feature in Windows 11, and a piece of software that has evolved to meet modern needs without cutting off its own roots. It's just an iconic piece of Windows history that was an essential part of my childhood, and while I don't use it anymore, I'm just glad it is still there.
    • 2TB WD_Black SN7100 PCIe Gen4 NVMe SSD drops to its lowest price in over three months by Fiza Ali Amazon is currently offering the 2TB WD_Black SN7100 internal solid-state drive at its lowest price in over three months, so you may want to check it out, if you have been considering a storage upgrade, before the deal dries up (purchase link is toward the end of the article). Featuring a PCIe Gen 4.0 interface and M.2 2280 form factor, the SN7100 promises to deliver sequential read speeds of up to 7,250MB/s and sequential write speeds reaching 6,900MB/s, offering as much as a 35% improvement in performance compared with the previous generation. It also achieves random read speeds of 1,000,000 IOPS and random write speeds of 1,400,000 IOPS. The drive uses Western Digital’s TLC 3D NAND technology for reliable performance and is further supported by a five-year limited warranty. It also offers strong endurance, rated at up to 1,200TBW, making it suitable for demanding workloads such as gaming, content creation, and high-speed recording. Moreover, its DRAM-less architecture claims to improve power efficiency (the SSD relies on system memory for caching via HMB), while the WD_Black Dashboard software enables users to monitor drive health, install firmware updates, and activate Game Mode for potentially better performance. Finally, it operates within an operating temperature range of 0°C to 85°C, and can withstand storage temperatures from -40°C to 85°C. 2TB WD_Black SN7100 PCIe Gen4 NVMe SSD: $242.96 (Amazon US) Check this deal out if you want a 4TB option. Good to know This Amazon deal is U.S. specific, and not available in other regions unless specified. We only use first-party seller links (at the time of article publishing); ensure that you purchase from a first-party seller link only. Check out Today's Deals on Amazon | or our recent tech deals. Become a Prime member (for Students or SNAP) via Neowin Get Prime Access - Prime for half price (for qualifying Medicaid, EBT, SNAP) Subscribe to Prime Video, Audible Plus, Music Unlimited or Kindle Unlimited via Neowin As an Amazon Associate, we earn from qualifying purchases.
  • Recent Achievements

    • Week One Done
      Supreme Spray LV earned a badge
      Week One Done
    • One Month Later
      Genuinetonerink- Dubai earned a badge
      One Month Later
    • Week One Done
      Genuinetonerink- Dubai earned a badge
      Week One Done
    • One Year In
      hhgygy earned a badge
      One Year In
    • Week One Done
      AMV earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      514
    2. 2
      +Edouard
      163
    3. 3
      PsYcHoKiLLa
      87
    4. 4
      Steven P.
      74
    5. 5
      Michael Scrip
      73
  • Tell a friend

    Love Neowin? Tell a friend!