![activedock 2 activedock 2](https://mac-cdn.softpedia.com/screenshots/ActiveDock_9.png)
essentially the code replaces (by changing class to. activedock) a dock at the bottom of the page along with the name of said dock which is pulled from the ('li') in the menu which has been clicked. This is a little hard to articulate but hopefully this makes sense.Īll of this is animated with the extended jquery-ui versions of addClass and removeClass to give the effect of the dock sliding off the bottom of the screen and the replacement selected dock being slid up into place. At the same time the dock name fades out, is replaced and the new name fades back into place. This all works wonderfully, however the effect screws up if i select another menu item while the animation is still taking place. What a need to do is to modify the code below to simply queue the function if it is called again while the animation is still taking place. Alternatively, if this proves to complicated, I would be happy to just be able to prevent the function from being called again while it is still active.ĭoes anyone know how I would go about this.For clarity, in this context the word “band” means group of z-orders
#Activedock 2 windows#
Until Windows 8, there was only one band, the ZBID_DESKTOP band, which is the default one when you write an application that creates a new window and when it gains focus it will go to the highest z-order meaning it will go on top of other windows. This is true unless there are topmost windows. As the name says, it will stay on top of other windows. What if there are 2 topmost windows? Well, in this case, the last window to gain focus will stay on top of other one.
![activedock 2 activedock 2](https://static.macupdate.com/screenshots/291042/m/activedock-screenshot.png)
In the end there are 2 groups of z-order in the ZBID_DESKTOP band, normal and topmost. These will never be “touched” by each other, topmost window will always stay on top of other normal window, no matter what. Starting from Windows 8, Microsoft “introduced” other bands, and all of them are higher z-orders than the desktop band. For example the start menu is on ZBID_IMMERSIVE_MOGO. Task manager “always on top” is on ZBID_SYSTEM_TOOLS. These are always on top of any window in the ZBID_DESKTOP band, that is, any normal or topmost window created by third parts developers will no longer cover start menu and stuff. These bands cannot mix each other, meaning, for example, that ZBID_DESKTOP will never be on top of ZBID_IMMERSIVE_MOGO, that is, bands have their z-orders too. The order of bands are the following, from the lowest to the highest z-order (some ZBID orders are unknown for me ATM): Like ZBID_DESKTOP, other bands also can be subdivided in 2 groups: normal and topmost window. Short reply: Some yes (under certain conditions), some no. GetWindowBand works in every case, you can use it without any problem.CreateWindowInBand/Ex works ONLY if you pass ZBID_DEFAULT or ZBID_DESKTOP as dwBand argument.Also ZBID_UIACCESS is permitted only if the process has UIAccess token (obtainable, for example, by setting uiAccess=true in app.manifest, more info here). SetWindowBand will never work, it will always fail with 0x5 (ACCESS DENIED).īecause Microsoft added extra checks for these bands.įor CreateWindowInBand/Ex, to be able to use more ZBIDs, the program must have a special PE header, named “.imrsiv” ( bss_seg), flagged with IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY and be signed with a Microsoft certificate “Microsoft Windows”.įor SetWindowBand, well… currently I don’t know how this works internally, but it has extra checks.Īny other ZBID will fail with 0x5 (ACCESS DENIED).This function lets change the band of a window and, for Windows Explorer’s case, bring the taskbar from ZBID_DESKTOP to ZBID_IMMERSIVE_MOGO (and vice versa). Is there a way to bypass it? You did it, so I guess yes? #HOW TO USE ACTIVEDOCK WINDOWS# You will not like the way I did it but that’s (currently) the only way. To use CreateWindowInBand with any ZBID, you need to inject a dll into an immersive process.To use SetWindowBand, you need to inject a dll into explorer.exe and hook SetWindowBand (yep, a trampoline).Īn code example can be found here: launcher (to inject a dll) and the dllĬreateWindowInBand via dll-injected immersive process (RuntimeBroker.exe) In my case I used RuntimeBroker (explorer.exe would crash easily).As soon as you press the Start button the hooked function will be called and you can call the original function with a different hwnd target. SetWindowBand from a dll-injected explorer.exe, called by pressing the start menu button This sucks but oh, I haven’t found yet a better way.