How to use TortoiseOverlays with my own handler - c++

tortoiseSVN has a shell hook that add overlay icons on files.
They create a separate open source project to use it in their commons projects (tortoiseSvn,tortoiseGit,etc)
i've download the installer .msi from google code that install the hooker handler
i've got my own version of "IShellIconOverlayIdentifier::IsMemberOf" that use for the handlers
how i grab all together ?
Here is the only doc i found

Please note that the TortoiseOverlays handler does not reduce the work you have to do: you have to implement your own overlay handler and get it to work fully. Only then can you make use of the TortoiseOverlays handler if you still want to:
The purpose of the TortoiseOverlays handler is to share the handler slots the windows shell has (limited to 15). It's not to help you implement overlay handlers.
Once you have your own handler working, you can simply change the registry keys where you register your own handler. After that, TortoiseOverlays will be loading your overlay handler.

Related

Windows Toast Notification callback not being invoked

I managed to send Toast messages but once clicked, the callback is not invoked. This is the toast-tutorial that was used.
The messages should be sent through classic Win32 and in order to do this, a shortcut needs to be created which contains the AUMID and the CLSID. This is explained in Step 5 of the tutorial, where for MSIX and WiX these id's are put in their config files. There isn't an explanation how to generate the shortcut in Win32, but can be found in another aumid-tutorial.
After following the steps provided, sending the toast works fine, but clicking it does not invoke the callback for handling the feedback.
One thing that stands out, is that the installShortcut function uses only the AUMID in the creation of the shortcut, the CLSID is only used when registering the COM Server, where the configuration for MSIX and WIX shortcuts use both.
It seems as there is the link missing that windows needs to route the feedback back into the app.
Toasts use the "ToastGeneric" binding.
Any idea why this is happening?
Just on the name alone it seems to me like you need to set the PKEY_AppUserModel_ToastActivatorCLSID property on the .lnk and not just the AUMID.
MSDN says:
Used to CoCreate an INotificationActivationCallback interface to notify about toast activations.
This page is marked as pre-release but does have a different InstallShortcut function that sets this property.
I have run the desktop-toasts sample successfully. As the code comment comments,
For the app to be activated from Action Center, it needs to provide a
COM server to be called when the notification is activated. The CLSID
of the object needs to be registered with the OS via its shortcut so
that it knows who to call later. The WiX installer adds that to the
shortcut. Be sure to install the app via the WiX installer once before
debugging!
If running the package project directly, It also works. The following picture shows What happens when I installed DesktopToastsCppWrlApp.msi generated by Wix Toolset.

Intercepting Windows Messages from Webview2 (Edge/Chromium)

I have recently migrated a project of mine to WebView2 and the last part I can't figure out is how to intercept the Windows Messages for the webview. My code is very similar to webview/webview but I was unable to find help on their GitHub.
Previously, I was able to find the hWnd for the webview and use SetWindowSubclass to add my own wndproc to the webview. However, I've used Spy++ and tried SetWindowSubclass on all the windows that showed up there (see below) but none of them had any windows messages in my wndproc other than some window management ones I did not think were useful - The best I got was WM_PARENTYNOTIFY, but I am interested in WM_MOUSEMOVE and WM_NCHITTEST - neither of which I could find.
My goal is to create a borderless, draggable, resizeable WebView2 based app.
The problem is, that the real window that controls and gets all this input is in another process. You just see a window that shows the output in your process.
Look into Spy++. Everything below Chrome_WidgetWin_0 belongs to a new process (MSEDGEWEBVIEW2) and is not part of your process. So you can't subclass such a window with the normal techniques.
So if you want to subclass this window. You need to inject a new DLL into this new process. This DLL might subclass the real window. And this DLL might communicate with you hosting program via any IPC.

Shell extension windows : best communication between ContextMenu and IconOverlay?

Hello windows experts,
I am searching for a simple way to activate an overlay on files using the context menu. Tortoise SVN gives an example of what can be done. But is very complex compared to my simple need.
For now I am looking at approaching it this way using C++:
http://www.codeproject.com/Articles/545781/NET-Shell-Extensions-Shell-Icon-Overlay-Handlers
http://www.codeproject.com/Articles/10104/Add-a-context-menu-to-the-Windows-Explorer
The issue is to create the link between both of them. The following link suggests to make a map but I am quite puzzle about how:
What the best Language to use when creating Windows Shell Context Menu?
You can use the Registry, for example store an Enabled value in the HKEY_CURRENT_USER\YourCompany\YourApp key. When the user executes your menu item to turn on/off the functionality, write the appropriate value into Enabled and then call SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil). That will cause the shell to re-read icons, including icons from your overlay extension. Inside the IsMemberOf method of your IconOverlay handler, check your Enabled value and return S_FALSE if the functionality has been turned off.

Popup notifiers in C/C++

I've been working on a project that will need a notifier in the system tray (sorry, "System Notification Area"). It will be a simple app that just generates popup notifications when it receives a message via a Zeromq socket.
I am not having any luck finding anything other than .NET resources and examples. Does anyone have a sample in C/C++?
I would start with this section of MSDN: Notifications and the Notification Area.
Then I'd check the NotificationIcon Sample in the Windows SDK.
What framework are you using? There should probably be several implementations for MFC, but there might different implementation for WTL and other frameworks. If you want to use the Windows API with no object orientation - well, you won't need any wrapper library then, but you can look at these libraries for example.
Here's one that has MFC and non-MFC version from CodeProject:
http://www.codeproject.com/KB/shell/systemtray.aspx
What you want here is probably ShowBalloon() function, which shows a balloon notification, but I'm pretty sure you must create a tray icon for that (can't have a notification balloon without having a tray icon).

Is there a Click Handler for Shell Extension

After going through MSDN Shell Extensions I am not quite sure if I can extend the behaviour of Shell Click or Click Event of explorer. Any suggestion or Code Snipet, article or Walk through?
There is no such possibility. That would make the shell too vulnerable. Imagine all the malware that exploits this functionality.
If you want to capture the click event, there is no easy way. You may SetWindowsHookEx and monitor/capture mouse messages for all windows of CabinetWClass and/or DirectUIHWND class. You may inject your code to explorer.exe's process and intercept messages from there. Here's a snippet of injecting a dll into a process.