Windows 7 Classic vs. New Start Menu

Classic or New(Aero) Start Menu?


  • Total voters
    226
  • This poll will close: .
That changelog sounds great !

I'm not too found of the other menu, but if it's optionnal I don't mind at all ;)

Take your time, Seven's release is still months away, which leaves you a long way to make the best menu replacement :D

If I might suggest something more : have you considered including directly in CSMenu the option to hide the real start Orb ? The freeware you suggested works fine but seems to block a few functions... and everything in a single tool sounds better

Thanks again for your brilliant work
 
If I might suggest something more : have you considered including directly in CSMenu the option to hide the real start Orb ? The freeware you suggested works fine but seems to block a few functions... and everything in a single tool sounds better

It sounds like a good idea, but I've no idea how to do it :confused:

Yes the second menu will be optional and not be used by default, I don't like it either.

Thanks,

Thomas.
 
CSMenu v0.9

Here is v0.9.

It has so much to go wrong with it, so I'm just going to leave it on this post for the time being. If it proves stable enough, I will update the first post of this thread another day with the changelog, and some detailed configuration instructions I've written.

Thomas.

P.S If you're wanting the non-installer version, download this one, and just copy the contents from the data directory!

EDIT: Download Removed due to a problem with it! :frown:
 
Last edited:
Nice program, Thomas. It's not perfect. One of the biggest reasons for using the classic start menu for me is the ability to customize it by adding my own folders and having the contents appear as a slide out menu. I don't know if that's possible with yours.

I do have a couple of bugs with the version 0.8 at least in the 64bit Windows 7 RC1. When I hover the cursor over the startup folder off programs, it crashes. I would have thought that was something to do with it being a system folder or the location having changed but the only other program folder that does it is one I've installed. The Haali Media splitter codec.

I'm including an attachment picture of the error.
 
I installed the latest one, version 0,9 and that didnt work at all for me on 64 bit win7. It errors out immediately. I had to use system restore to get rid of it.
 
Nothing to be sorry about. It's still a beta OS and I understand your program isn't perfected yet. I hope you keep working on it. From the error message, I kind of got the impression it was the 64bit that was screwing it up but I'm not sure.
 
I doube it would be because it's 64bit... I wrote it on a 64 bit version, and tested on both 32 and 64 bit. Where abouts did it go wrong? Did the installer work? Once you'd installed what did you do? Did the background program show an icon in the tray (next to the volume control etc)?

Thanks,

Thomas.
 
The installer for verion 0.9 didn't work. It gave me that error half way through the install. The version I first tried were just the zip files for version 0.8 That worked fine except for the error when I'd over over the startup folder and the folder for haali.

I also tried just putting the data files from the 0.9 installer and overwriting the 8 version. it failed to start when I did that. Right now i'm back using the 8 version but it still has the same error I attached in my first message.
 
Um, hello.

I am a C++ programmer who has recently used SetWindowsHookEx(). What do you need?
 
Um, hello.

I am a C++ programmer who has recently used SetWindowsHookEx(). What do you need?

Hi, thanks for leaving a message :)

Currently CSMenu uses software to hide the original 'orb' in windows 7, and is then placed on the taskbar with an icon that looks like the orb.

Ideally, I'd like it so that CSMenu loads when the original start button orb thingy is pressed. I know it can be done somehow, as there is another classic start menu program out there for WIndows 7 (which costs £20 / $30!), and it works when the start orb is clicked. I think it is something to do with hooking, but I've looked into it, and C# is unable to use hooks (something to do with managed code). So I'm looking for someone that can create a background program that hooks the start button, and sends a signal (or executes a program) when the button is pressed.

Thanks for your time!

Thomas
 
Ah, virtual machine/native code interoperation. Hmm.

*researches*

*researches*

*researches*

Okay so! I'm sure I could, but I'm also about 80% sure that you don't have to, and about 90% sure that there's a cleaner way.

The first thing you should know is that, even from managed code, you can call and use SetWindowsHookEx(); you're just limited to three of its possible hook types. The good news is that two of those hook types â€â€￾ WH_MOUSE_LL and WH_KEYBOARD_LL â€â€￾ are exactly the ones that you want. All you need to do to use these is to make sure that you stick the delegate you're using in a Pinned GCHandle, then pull an exportable function pointer out of that delegate to pass to SetWindowsHookEx(). You'll need to catch WM_LBUTTONDOWN (trivial) and ... at least a) WM_KEYDOWN on the Esc key when Ctrl is pressed, and b) WM_KEYUP on the Windows keys most of the time (see below). This person has been able to do at least some of that — from C#, no less!

... or just use this library. Yay, open source!

Note that when you're catching the Windows key, you do need to be careful only to catch keypresses that are not due to the Windows key being used as a modifier. (For example: hold the Win key, press E, then release the Win key. Fortunately, Windows itself treats things like <Win+,> as just <,> so you don't need to worry about whether or not a given key combination is really a modifier-key combination.) This is not difficult but needs to be noted. (You may have already realized this; if so, I'm just babbling, and hopefully someone finds this interesting.)

The 20% uncertainty in this approach comes from at least two separate issues. Firstly, WH_MOUSE_LL and WH_KEYBOARD_LL are listed as "Windows NT/2000/XP" in the MSDN page for SetWindowsHookEx() (linked above). However, Link Removed - Invalid URL seems to imply that he was able to use those flavors of hook in Vista as well, so I suspect it's merely the case that the documentation needs to be updated. Secondly, there may be other, more interesting ways to trigger the Start Menu of which I'm not aware. (WM_COMMAND + BN_CLICKED, anyone?)



If either of those points fail, the possibly-cleaner fallback method is to write a very small unmanaged DLL (written in C++): call it CSBootstrap.dll. CSMenu.exe is then just a stub executable which injects CSBootstrap.dll into explorer.exe. When injected, rather than loaded normally (and DllMain can tell the difference), CSBootstrap.dll loads up CSMain.dll &mdash; the managed library, written in C#. CSMain.dll then hooks into Explorer.exe's message queue -- it can do this with any hook-type because it's now executing in the context of Explorer.exe -- and pins itself in place using LoadLibrary(). As CSMenu.exe exits, CSBootstrap.dll and its hook procedure get unloaded, but CSMain.dll remains where it is.

Voilà! After an almost Byzantine setup process, you now have nothing except a managed DLL executing directly in Explorer.exe's process space, capable of using SetWindowsHookEx() normally as though there were nothing interesting about it.


If I've missed anything and neither of those are possible, then yeah, basically what you just said. It'd still be a DLL executing directly in Explorer.exe's process space, though.



P.S.: there isn't a documented way to extend Explorer's functionality via COM+ interop, is there? That would be so much easier, but I haven't the slightest idea where to start looking.



P.P.S.: if you post a WM_CLOSE message to the taskbar, you get an old-style Shut Down dialog. (See attachment.)
 
Last edited:
Wow!! Thankyou so much, that's all going to be a great help!! This week I'm doing work shadowing with a game development company, so I'm focusing on XNA, but next week I'll certainly give what you said a try. I was aware that you could hook mouse and keyboard events in C#, but I read somewhere they only worked when the mouse was over the Windows Form :confused: I'll investigate that by trying it out.

Your other method, by injecting the DLL, was sort of what I had in mind, but wasn't really sure exactly how it would work, hence the reason for asking for a C++ programmer.

I found the shutdown dialog, and it was included a few versions ago, but it didn't seem to work on every computer (it showed up for most - but didn't do anything when and option was selected and ok pressed).

Thankyou so much again!!

Thomas.
 
Your other method, by injecting the DLL, was sort of what I had in mind, but wasn't really sure exactly how it would work, hence the reason for asking for a C++ programmer.

Yeah. It's not screamingly difficult, but I don't have Visual Studio set up on this box yet, and it looks like I probably won't have time to do so for at least a week myself.

I found the shutdown dialog, and it was included a few versions ago, but it didn't seem to work on every computer (it showed up for most - but didn't do anything when and option was selected and ok pressed).

Blargh. Well, I can confirm that it does work properly on build 7100 (64-bit, English-language). I suspect that it's there because it's still in use in Windows Server 2008 R2; if that's the case, it'll probably get fixed and stay that way.

(Edit: Question withdrawn, as I have just realized this is a sticky-thread, and as such should probably not be used for tangents. Sorry about that.)

-- Ray
 
Last edited:
CSMenu v0.9

Ok, so it's been a while, but here is the next version of CSMenu. Version 0.9. It's about a billion times more complex than 0.8, and so it may have several bugs. For this reason, I won't be putting it on the first post just yet. If you have any problems, then please tell me!

Setup should be pretty straightforward:


  1. Run the installer.
  2. Click the "CSMenu First Run" program on the desktop.
  3. Log off
  4. Log back on
  5. Place "Launch CSMenu" on the taskbar
  6. Delete the CSMenu First Run off the desktop.
Enjoy!!

Edit: Removed due to small bug
 
Last edited:
Looks like it's working, Thomas. It took me a minute to realize the exe that launches the tray icon is different from the one that launches the actual menu. The only other thing is it appears if you click on that tray icon it automatically closes it. Is that intended? I kept trying to click on it with the left and right mouse buttons to see what options it might have. :)

No more errors in my startup menu.
 
Oops. Spoke too soon. Now I'm getting that earlier "Unhandled Exception" error when hovering over the Documents folder on the initial menu. If I click quit it exits. I can keep going without the program crashing if I click Continue. Its popping open some tiny folder window that I can "X" out of.
 
Thanks for testing egk!

Don't suppose it mentions what the error is? Typically I got "Generic GDI+ Error" whilst programming this version. Also, "Access denied" was quite common, but I think I've sorted both of those.

If there's nothing obvious don't worry, all I can suggest is that you remove 2documents.ini from "CSMenu\settings_files\main_menu\" directory.

The tray icon is supposed to disappear when you click it, although CSMenu doesn't actually close until you press the launcher icon again.

Thanks!

Thomas.
 
Last edited:
It's a .Net Framework error. I thought it was the same as the earlier one I posted but maybe not. I'll insert a screen cap for you. I'm not a programmer but my obvious question is why would this happen only on certain systems? I'm presuming you don't see it when you test it. Hovering over Documents was the only thing that caused it this time. Link Removed due to 404 Error
 
Thanks again egk :)

Think I've possibly sorted it sort of. Instead of trying to display the icon(s) which cause the error, it displays a blank icon. So in this new version, if you see an item without an icon, then it was causing a problem before!

Hope this solves it!

Thomas.

EDIT: If you downloaded this version, I recommend that you download v0.9 which can now be found on the main post. It's not crucial, but it has a couple of changes.
 
Last edited:
Back
Top Bottom