How to minimize Windows Store app to system tray? - windows

I am not succeeding trying to minimize windows store app to system tray
For example trying to minimizing whatsapp application to system tray, Keeps it open in the taskbar while having icon in systemtray of whatsapp.
I want to fully move whatsapp to systemtray.

Related

Is there a Windows API for getting the positions of the icons on the Desktop?

Is there an API or a database/settings file/registry for getting the positions of icons on the Desktop?
If you wonder why I want that, basically I want to create a replica of Desktop in my app for my personal use, so that I could access those icons, when multiple windows are open, without using the "Show Desktop" feature which minimises all windows. The problem of Window's "Show Desktop" is that if I opened a new window by clicking an icon on the desktop, performing "Show Desktop" again does not restore all minimised windows at once.
On macOS, I did not have this problem, because pinching-out with 4 fingers showed the desktop without minimising opened windows. It just temporarily moved them out of the screen, and pinching-in restored windows to their original states, even if I had opened a new window by clicking an icon on the desktop.
There are other ways to access those icons, without using "Show Desktop", like opening the Desktop location in File Explore, but then the icon locations are not the same as the Desktop, so it is difficult to find the item I want. Enabling multiple virtual Desktops, and switching to an empty Desktop to click the item is one way, but then it gets opened on that Desktop and I would have to move it to the other Desktop.

How to keep the application window on top?

I am trying to develop an app like application locker for windows phone. Whenever other applications are launched, I want my application window to be on the top of that selected application to lock that. How can I make my application window to be on the top of all windows ? Is there any windows API for doing it ?

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.

How can I write an autostarting dock app for the Mac?

I have an application I'd like to build that starts when you start the mac and will appear in the dock.
I have some experience with Objective-C and iPhone dev but none with Mac dev, I'm also a PC user normally so I'm not au fait with the norms of Mac usage. Any guidance here is appreciated.
How do you get an application to autostart?
*edit Can you run an app in the status bar? (with the clock etc) or do apps only run in the dock?
To write a program in the Status Bar check out this great tutorial.
To get an application to auto start on login, look for information on launch daemon or just make your application installer to place an entry on /Library/StartupItems.
About the dock: usually, user controls what's on his/her dock. When your UI application is running, it will usually be in the dock. If you want the icon to stick there permanently, you will need the user dragging the icon from the Finder to the dock, or, right-click on the dock icon while is running in select Options->Keep In Dock menu option.

Does Windows 7 treat full-screen applications differently?

I have a hidden process that waits for non-standard hardware button messages and runs an application (with CreateProcess). No problem with the user disturbing, it's an action that the user approved himself. Everything is fine when it's usual layout with taskbar shown and multiply captioned and non captioned- windows. But the situation is different in XP and 7, when the current application is full-screen. Full-screen application in this case is window without borders having exactly the same dimension as the screen. Windows hides taskbar for such application even if it's always on.
In Xp, it's ok, the taskbar is being shown in this case and appication (for example calculator) also, the full-screen app is still visible in areas other than the launched app's and taskbar'. But in Windows 7 nothing visual happens, the full-screen app is still on and if I switch to taskbar, the executed application is there. I tried to solve it with SetForegroundWindow, BringWindowToTop, even AllowSetForegroundWindow(GetCurrentProcessId()) call for a window handle found with CreateProcess-WaitForIntputIdle-EnumThreadWindows, no change. So did something change since XP related to full-screen windows that officially documented?
Thanks,
Max
I would imagine that, if you have your own hardware device, that there is some API for generating "real" user input. Clearly the legacy keyboard and mouse, and now USB HID drivers (many of which are usermode I think?) have access to an API to do so.
Synergy+ for example can generate fake keyboard and mouse events on connected PCs, and the consequence of the faked input is windows switching activation normally.
So, my initial idea is for your usermode "Device" application to synthesize actual keyboard messages - SendInput seems a likely candidate for "the API that can "fake" real user input events.
Then, use an API like RegisterHotKey in your "UI" app to respond to the hotkey combination your device app generates.
Now, (assuming that SendInput IS generating user input events at the correct level), you should (from within the WM_HOTKEY handler in your UI app) have permission (because everything was "user initiated") to change the foreground window (to yourself).
Vista introduced the desktop composition feature. In short, all windows are drawing to a memory bitmaps and the Desktop Window Manager is then composing these bitmaps and drawing on a full-screen Direct3D surface. Full-screen windows do not participate in the desktop composition and get to draw directly on the screen (mostly because the majority of full-screen apps are games that need real-time screen updates).
In particular, this means that when a full screen app is up and running, it is covering the DWM composed image and the user needs to switch to a DWM-managed window for the DWM to start drawing on top of the full-screen app.
I don't have a good solution for your problem, unfortunately. One way to solve it would be to add the WS_CAPTION style to your app and then handle WM_NCPAINT/WM_NCCALCSIZE/WM_NCHITTEST yourself. This would allow you to lie to the DWM that you are a regular windowed application, but change visually your NC area to look like you have no title. However, this does require certain amount of additional code and might be a bit more effort you want to invest.
Another way you can try to solve your problem is to explicitly minimize your full-screen application window when launching the new process. However, you will then have to solve the problem of when to maximize it back again.
Btw, you might find the comments on this post from Raymond Chen interesting.
Windows supports multiple desktops and my guess would be that the full screen up is using a different desktop than the default one (where your application will be shown). A desktop object in Windows is "a logical display surface and contains user interface objects such as windows, menus, and hooks". For example, screen savers normally are started on a separate desktop.
You can find out which desktop an application is running on using Process Explorer:
Set Process Explorer to replace Task Manager and to run always on top.
When your full screen up is shown, launch Process Explorer by pressing Ctrl + Shift + Esc
Within Process Explorer, select the full screen process and press Ctrl + H to display the handles of this process
See the value of the Desktop item in the list. Usually this would be set to Default
If you know what desktop this app is running on you can start your process on the same desktop by first calling OpenDesktop to get a handle to this desktop and then pass it into the STARTUPINFO of your CreateProcess call.

Resources