[ann] stardock's enhanced dialog beta
that's very nice man. thanks for announcing.
Damn it...ObjectDesktop users only! Oh well...the screenie looks very nice. Thanks for announcing this.
-NC
P.S: @pazl, check the front page.
Sweet! Any other features you know of?
This a standalone app? Why cant it be included/integrated in Windowblinds? So should be the Toolbar stuff...I mean... run seperate apps, one for enhancing the toolbar buttons, and then another to enhance dialogs?
I know that it's up to the end user whether or not to use the apps.. I'm just saying.. that these functions ought to be integrated within windowblinds with the ability to toggle them ON/OFF
what`s the resources usage on this baby?
i`ve been waiting for it ever since it was announced but to be honest, i`m starting to get worried about all the apps running so resources usage is imoportant.
what`s the resources usage on this baby?
Can't say. It's not showing up in Activity Monitor (or as some call it, Task Manager).
hmmm
interesting...
so this means it could be more of a explorer hack than a separate app.
what`s your explorer`s memory usage?
Let's hope it's not anoother global Hook ![]()
Here's a guideline to stress test such an extension:
If it is not a separate exe, then it is a DLL plugin for explorer.
To find out which one, go to http://www.sysinternals.com/ and download process explorer.
This handy tool can list DLLs of processes, just look at Explorer.exe if some of the loaded DLLs are located under some Stardock folder. You might already have some global hook DLLs by Stardock that get themselves loaded into each and every process so compare the with and without cases.
Btw you can't say this DLL uses that amount of memory, because to the memory manager, all memory owned by one process isn't distinguishable by DLLs. Just compare average Explorer memory usage with and without the tool.
Explorer is a special case because dependant on some registry setting, it may unload nonhook plugin DLLs completely when they are not in use. (Unusual behavior for a windoze App - they mostly grow in memory but never shrink). To take care of this, try profiling explorers DLL loads and unloads with dependencywalker available at www.dependencywalker.com. Since dependencywalker can't attach to running processes, you can kill explorer by klicking Start->Shut down and clicking abort on the confirmation box while holding left shift, ctrl and alt. This way, explorer closes without ending windows. Now run dependencywalker, open explorer.exe from there and hit F7...
I'm really tense on this because I never found out e.g. how YZ-Toolbar is working. There is literally no documentation on replacing common control UI parts. I'd really like to see if Stardock are using the same cheap trick again (costy wacky faulty global hooks) or are coming up with something real, like YZ-Toolbar does.
"Beyond lies the wubb." (PKD)
I'm really tense on this because I never found out e.g. how YZ-Toolbar is working.
global hook + replacing imagelist icons
.
i know it`s funny but reading herd's and Ave's posts is like a techno symphony to me, even though i`m a complete programming dummy ![]()
global hook + replacing imagelist icons.
Eeek. (Uninstalls YZ-Toolbar from heavy metal XP laptop.)
More to the point, why are they bad?
Let's hope it's not anoother global Hook
Here's a guideline to stress test such an extension:
Great post. Thanks for the info. I will try to see what's going on with this app.
edit: ok, downloaded process viewer. Very cool tool. Here's the deal. The app is just two dll's, one a shell extension, the other is in memory under explorer only when the open/save dialog is up. No appreciable difference in memory usage. The exe file is only for the settings dialogs and does not run except for when changing settings.
All I can really tell by this is that using this doesn't do much to memory usage for me.
"Beyond lies the wubb." (PKD)
That's a good one. I think my favorite is "Martians Come in Clouds."
.
hi allwhat is a global hook ?
greets stevie
More to the point, why are they bad?
Imagine your windows machinery as a giant switchboard where you can plug garden hoses together to get some liquids circulated. Lets say each fluid circuit equals a program execution flow, be it threads (A program can have many) or processes (a program is one but one).
In the dawn of windows, when Bill Gates himself just gave up programming and began software architecting, windows core programmers thought it be a good idea to allow other programs to tap the keyboard and mouse input flow for computer based training. People just were being introduced to mouse usage and there was this first hooking program: It would filter the mouse movements and keyboard actions. What would it do? Without recoding the main program, this hook would halt program execution and show the user a training card in the lines of: "Now that you have opened Word 2.0, type 'Hello World!' here, select it and make 'Hello' boldface".
Then, the program would monitor the users actions on the (unaltered) word, occasionally dropping in a "BOLDFACE, not italics" shout and if the user was too dumb, perform the desired action itself. Nice, huh?
And this was only the local hook. The global hook would, like Agent Smith in Matrix II, multiply itself and attach to the mouse and keyboard and whatnot input queues of every darn process in the system to teach secretaries born in the 1930es windows in its entirety. "No, that wasn't a DOUBLE click. Try again."
These days, the computer based training hype is history, (killed by that sodding paper clip) the secretaries have retired and the hooks are still there.
OK, Admitted I have a wheel mouse and a lot of apps that aren't aware of mouse wheels. I tolerate this global hook to tap mousewheel-up and down messages and fake them as if I had hit page up or down on the keyboard instead. I might as well live with a dock that employs one very small DLL for getting notified of mouse moves even if its own pixel under the mouse is totally transparent, thus working around a design flaw in windows.
This being said, anyone who can read can also spot the number of the beast:
While having one or two of them won't affect your system very much, getting rid of a dozen of them is often the silver bullet to get your system responsive again. They were never intended for anything else than a slide show and if your system behaves like one in normal usage, you may have caught too much of them. Ever had a crash where the mouse would still move but no program react, not even task manager, just a set of rectangles? That's a crashed global hook. They introduce single points of failure even in parts of the system they don't belong in to. Wanna distribute a keylogger? Just have your virus kit tailored to take a free ride on a freely available app that's downloaded to the tens of thousands a week and that has a global hook functionality. Thanks to the global hook, your malicious code will be injected into every process that has the meagrest user interface, protected by admin password or not. And believe me that you have more processes than taskman is showing you, some of them loaded / unloaded a few hundred times a second, all blindly globally hooked or fattened by a "Plugin" that e.g. suppresses the MSN commercial banner, puts your contacts on your desktop and phones your surfing habits home regularly. I like quick'n dirty hacks too. I especially like getting things done too. If there's really no other way, yes, sure, go ahead, make my day. Especially if you make that hook DLL smaller than 4 KBytes so that it fits unnoticed. How? Don't use a compiler. Do assembler programming. Tapping messages and forwarding them can be done with less than 1000 bytes of opcode. A hook DLL should definitely not create threads of its own or host _any_ variables at all.
Sorry but Stardock apps tend to be lousy with global hooks.
Want me to draw you a pixel on the screen? Swallow this half a dozen global hooks and your wish shall be satisfied in no time. Ooops. Sorry your machine wasn't strong enough. But we have a low memory footprint. And almost no CPU usage. In fact the CPU is waiting for all those queued messages to go through our bottleneck hook one after another, that is: Less global warming by reducing CPU pace to PCI throughput. Back to 166 MHz for everyone!
Their global hook DLLs tend to be ten times the size than needed.
They tend to be so badly programmed that they behave differently on dual or Hyperthreading machines compared to uniprocessor ones. WTF, I say, failing to produce basic threadsafe programming and having the guts to employ global hooks? It's so sad.
OK, this is just my biased view; colored through bad experience, but hey you can do the same to me too.
Thank you for that quite informative post, herd. If I'm understanding you correctly, a hook monitors your computer for your actions that can affect non-active programs? i.e, Pressing F9 when in Microsoft Word would active the Konspose feauture, even though it's non-active?
Of course, I could have misunderstood you. One other question--have you ever typed up a really long post like the above one only to have your browser erase it at the last second?
.
-NC
Their global hook DLLs tend to be ten times the size than needed.They tend to be so badly programmed...
you are absolutely right my friend
Thank you for that quite informative post, herd. If I'm understanding you correctly, a hook monitors your computer for your actions that can affect non-active programs? i.e, Pressing F9 when in Microsoft Word would active the Konspose feauture, even though it's non-active?
Of course, I could have misunderstood you. One other question--have you ever typed up a really long post like the above one only to have your browser erase it at the last second?
.
-NC
Nope. Registering a Hotkey works without hooks. Mouse gestures would be a good example if they were invented, say in 2001, but somehow magically work in Office '97, then someone has hooked the mouse globally and translates "Frantic wiggle mouse" to "Alt+F4 pressed" without Office 97 ever understanding what happened and closing happily.
The thing is, Windows is built around the message queue idea. Each program drinks its mouse or whatever messages from this "garden hose" pictured above. If you move your mouse a pixel, the system generates up to 5 messages (32 Byte each) and feeds them into the program whose window has the focus. A system can only have one but one input focus and they thought it would be efficient to route these thousands of mouse and other messages per second only to the window that has the focus. Hotkeys are simply removed further "upstream".
Hooking would be now to subscribe for first hand knowledge to all and any messages by attaching a clone of yourself to any input hose and pre-chewing and pre-devouring all those messages before passing them to their original target, or, the next hook (!). Its up to you if you do that correctly or just sh*t down the wire.
The downside of it is that your hook DLL gets everything and is responsible to pass everything unaltered further down the stream. Even if your DLL is so shallow that it only blindly passes through, it still eats a lot of bandwidth. You can specify "I only want to tap mouse messages" and you're fine.
Now for drawing. Aeons ago, gfx cards would have just enough memory to store a bitmap the size of the screen resolution. Opening 10 overlapping windows and storing each windows screen representation in the fast framebuffer was a no go. If One window would overlap another, the front window would write its bitmap representation directly into the framebuffer thus overwriting a partial content of the back window. Once the user minimized the front window, the system would send the back window a - you guessed it - message that this rectangle needs to be redrawn there. If you followed me until here, you'll understand that some hook DLL can tab these drawing messages and draw the unobscured parts itself and not telling the hooked application that a redraw was needed. This is also the explanation why windoze apps flicker so badly when resized.
Now add the fact that almost every button, toolbar, checkbox, textbox on an app is again a window with its input queue and try to calculate the message bandwidth that is drained from the system by a carelessly placed global hook.
PS:
Yes I had a few crashes after typing a post this long. So I always do CTRL+A, CTRL+C, Submit.
hi herd,
oh my goodness, i dont wanna know how many hookies im running. this may be the reason may computer gets a bit unresonsive... and yeah stardock products are pure resource hogs, even if the claim the opposite, as the always do.
Greets Stevie
P.S.: i hear ya ! CTRL-C can save you...
i asked tgtsoft, and they told me that they are NOT USING a global hook in styleXP ! ![]()
Aqua-Soft Forums