ITaskbarList3 hook or replacement - winapi

I'm trying to create a Windows 7 taskbar replacement. Builtin taskbar has some nice features which I'd like to reimplement, specifically a progress bar hosted in a taskbar button (ITaskbarList3).
Since other applications communicate with system taskbar by obtaining its interface instance by calling CoCreateInstance(CLSID_TaskbarList, ...) I need either to replace COM-object CLSID_TaskbarList or setup some sort of hook for ITaskbarList3::SetProgressValue and ITaskbarList3::SetProgressState to be able to show progress on my own window. Any ideas how to do this?
(It's not the same as that)

Related

Custom Windows Fetures

Is it possible to create custom windows features? for instance add new buttons to the start menu or maybe a button on the task bar like the Cortana button. Even add a new button to windows explorer. If it is can someone please point me in the right direction as google doesn't seem to return any helpful results
You can create custom widgets on the taskbar by creating a deskband shell extension.
Creating a button in the start menu or in other places that have no extension support requires major work and will often create a buggy/unstable result because you might have to inject yourself into the Explorer desktop process (and other processes on Windows 10).

Windows taskbar icon event type - WxPython Phoenix

I am trying to find the event type associated with windows taskbar icon of my application. In Windows 8.1 user can close, minimize and restore the application from this icon.
Google is only showing the results for taskbar tray icons, which is a whole different thing. So far I've tried these:
wx.EVT_CLOSE # This event is not generated for taskbar closing
wx.EVT_RESTORE # This event is not generated either
Yet, it does close the application and it also manages to restore an iconized application. I made two separate handlers to check this. They are working when I use the titlebar buttons (close and min/maximize buttons), but not when done from the taskbar.

App modal File dialogs on windows

How do i make the common File dialogs App modal using Common File Dialog API ? The dialogs come up modal with respect to the owner window. I want to block all the process' windows when a file dialog is up. In my current code, I am disabling all windows belonging to the app except the dialog parent and when the dialog is closed I enable them again. There should be a better/easy way of achieving application wide modality with Common File Dialogs. Please let me know if there is a standard solution for this.
Manually disabling and re-enabling is the only way I know of in Windows.
The traditional model for Windows applications is to have a single top-level window per instance. (Remember MDI apps?) Of course, there are exceptions, and many apps have always had floating tool palette windows. Nevertheless, the disable-the-parent model works for the lion's share of applications, and it's possible for many-window apps to do what you're doing with manually disabling the extra windows. Thus there isn't much demand for a more general solution.
If you wanted to re-architect things, you could have a master window that owns all the other top-level windows, and make the modal window use the master as a parent, but then you'd have to solve other problems related to the task bar, z-order, and positioning of the modal window.

Cocoa accessibility API, can I click a window in the background without activating it?

I've been searching forever for a solution to this, so I thought I'd seek out the brainpower of greater minds than mine. I'm developing a Cocoa app that uses the Accessibility API to manipulate another program (it's a hotkey app). The app I'm controlling typically has multiple windows open, with some hidden behind others. What I would like to do, if it's possible, is to send mouse events to windows using the Accessibility API in a way that presses a button in the window without bringing it to the foreground (interact with the window but don't activate it). The reason I'm trying to do this is that sending the mouse event to this other window will force it to the foreground and disrupt the user's interaction with the foremost window.
This is possible on Windows - apparently, because apps similar to mine do it there - but I'm getting the feeling that this isn't possible with Cocoa, given the way the window manager works. Am I mistaken?
Accessibility is higher-level than that. You send, for example, AXPress actions to AXButton objects, but “press” is not necessarily a click—pressing the space bar while a view is focused, for example, is also a “press”. AXPress is a high-level action that means “do your thing”, which obviously has meaning for some views (such as buttons) and not others (such as fields).
Accessibility activating the application does make sense when you look at it from its intended purpose: Assistive devices for disabled users. If the user “presses” something by whatever means, they probably intend to activate the application and work in it.
Quartz Event Services will get you almost there: You can create an event tap for the process you want to control, and you can forge events and send them to a tap. The catch is that you can only send events to a tap when the tap fires—i.e., when the application already has an event to deal with. When it doesn't, you're stuck.

How to assume/steal another process's windows as my own?

I'd like to show another app's windows under my app's taskbar button. It's a background app that reports another process's windows as my app's own. Is there any universal way to do this, e.g. each "new" window, alert glow, progressmeter, and other taskbar features, show under my own app's button?
For example, Winfox runs under its own process and steals Firefox's windows. It also adds features, but that's irrelevant -- I just want to support another app's existing taskbar features under my own app's button -- multiple windows, progressmeter, alert flashing, error flashing, mini-icons, etc. Is there a near-universal way to steal an app, or is it largely app-specific? Thanks!
You should be able to use SetParent() to take ownership of a window, but I'm not sure how much this will help you in your attempt to add taskbar features to the legacy app.

Resources