Question

I'm really annoyed right now. I'm trying for days to figure this out and I've got to the conclusion that I definitely need to post a question or two here.

So, I'm trying to make an application in C++ with the win32 api that has just one tray icon and no window, but I still want the message pump working in the background because I want to handle events from my synaptics touchpad. I think I figured out how the synaptics SDK works, but I'm still struggling with this win32.

What may the neowin community suggest?

8 answers to this question

Recommended Posts

  • 0

Most events are only going to be delivered to your window via the message pump when your application is in the foreground. Since you have no window, that will be almost never.

I definitely understand your struggle with WIN32. It's not the most user friendly interface, which even Microsoft recognizes. There have been many attempts at C++ wrappers around the windowing portion of the WIN32 API to make it easier to use. Microsoft themselves once promoted MFC, but that has been long since depreciated. I'm not sure what Microsoft's current recommendation for WIN32 in C++ is; maybe Asik or one of the other pros around here can tell you. My understanding is that Microsoft is pushing C# and .NET for traditional desktop applications and is not really focused on providing and easy C++ wrapper anymore.

Personally I have used SmartWin++ for many years. It is a very lightweight, clean object-oriented wrapper around the WIN32 API that melds the power of WIN32 with ease-of-use. In case you are interested in extending its functionality, SmartWin++ is also designed to be highly module and provides extensive examples and documentation for all aspects of development within and without. Unfortunately the project died in 2008. However, I still use it extensively in my own Windows programs. I have maintained my own fork of the last released version of SmartWin++ to which I have added support for newer compilers (mostly GCC/MinGW, I don't really care about MSVC), an enhanced build system, more widgets, many bug fixes, and extended documentation. My fork is not publicly available, but you should have no difficulty using the last official version of SmartWin++ if you so choose.

  • 0

what you're looking for is "windows hooks".

http://msdn.microsof...9(v=vs.85).aspx

what these allow you to do is intercept messages of system wide processes,or they can be thread specific.

for example,you install a system wide mouse hook , and you get system wide mouse messages. this is actually how a lot of keyloggers work. they install a keyboard system hook,and receive every character typed. you can do the same with the mouse. since only foreground windows receive mouse or keyboard messages, you will receive all mouse message no matter which app is open,and again you can make it thread specific if you want.

  • 0
  On 28/04/2013 at 01:14, vcfan said:

what you're looking for is "windows hooks".

http://msdn.microsof...9(v=vs.85).aspx

what these allow you to do is intercept messages of system wide processes,or they can be thread specific.

for example,you install a system wide mouse hook , and you get system wide mouse messages. this is actually how a lot of keyloggers work. they install a keyboard system hook,and receive every character typed. you can do the same with the mouse. since only foreground windows have an active message loop, you will receive all mouse message no matter which app is open,and again you can make it thread specific if you want.

THAT. IS. COOL. I had no idea that was even possible! Thanks for the explanation. Hopefully it helps the OP too.

  • 0
  On 28/04/2013 at 01:16, xorangekiller said:

THAT. IS. COOL. I had no idea that was even possible! Thanks for the explanation. Hopefully it helps the OP too.

yep,and there are other ways to do it too. you could use DLL injection into whatever process you want to spy on its messages, get the class name, modify the function pointer to the windows procedure in the class structure to your own windows procedure. In your windows procedure, call up the original processes windows procedure for everything but mouse messages, and handle mouse messages yourself.

  • 0

It should be noted that hooks have a system-wide performance cost as long as they're active, so they should be used sparingly. They can also make it difficult to break execution in a debugger, I've seen them cause very long stalls.

  On 28/04/2013 at 00:30, xorangekiller said:
I'm not sure what Microsoft's current recommendation for WIN32 in C++ is; maybe Asik or one of the other pros around here can tell you. My understanding is that Microsoft is pushing C# and .NET for traditional desktop applications and is not really focused on providing and easy C++ wrapper anymore.
.NET + P/Invoke from Win32 what isn't exposed in .NET is pretty much the way to go today; MFC and ATL are quite dead as far as I'm aware.
  • 0

Synaptics SDK suggests that you can do without message loop. Create a global named event, SetEventNotification for it and then WaitForSingleObject for this very event in an infinite loop and process each SynPacket as it comes.

It does make it troublesome for tray icon, but then again - what's it for?

  • 0

You need to create a blank window with nothing in it. 0 size and make sure it's invisible. Use CreateWindow().

And on top of that empty nothingness window, enable the tray Icon.

Play around with the flags until you get a window that's not visible in the task bar but is visible in the systray. Then play around with the window messages that are sent when someone clicks or double clicks. Just make the code ignore any handling of the messages to make sure that it doesn't fall back to the default window proc that's automatically executed for unhandled messages, if you make your window message loop the right way.

This is at least how I did it a few years back. Certain window types are not visible in the task bar. I think this is how it's meant to be done. But I could be wrong.

This topic is now closed to further replies.
  • Posts

    • This DDR5-6400 CL36 32GB RGB RAM that supports both AMD and Intel is only $72 by Sayan Sen Recently, we covered several SSD deals, both internal and external. These include the Crucial X9 Pro and X10 Pro, the P310 2280, and the Samsung 990 EVO Plus. Meanwhile if you are looking for RAM to upgrade your desktop PC or build a new one, the PNY XLR8 Gaming EPIC-X RGB DDR5-6400 Kit can be your go-to choice as it is currently just $72 (purchase link down below). In terms of specs, this dual-RAM kit delivers 32GB of total DDR5 capacity (each module is 16GB) running at 3200 Hz to deliver 6400 MT/s (PC5-51200) at 1.4 volts. Pre-programmed Intel XMP 3.0 and AMD EXPO memory overclocking preset profiles mean you can fire up the kit to its rated speed with a simple BIOS tweak, rather than having to deal with manual timing adjustments. The CAS latency for this DDR5-6400 kit is 36, which is quite tight for a preset profile. Thermal performance is said to be stellar thanks to the aluminum heat spreader, which should help dissipate heat during extended gaming sessions. Additionally, the heat spreader is also said to feature an "embossed pennant design that enhances the overall look and complements the lighting of other components." Speaking of lighting, the included EPIC-X RGB model features ARGB LEDs diffused through a geometric polymer light pipe and allows syncing via Asus Aura Sync, Gigabyte RGB Fusion, MSI Mystic Light, or ASRock Polychrome Sync software. Get the PNY RAM at the link below: PNY XLR8 Gaming Epic-X RGB™ 32GB (2x16GB) DDR5 RAM 6400 CL36-48-48-104 Desktop Memory Kit (MD32GK2D5640036XRGB): $72.24 (Sold and Shipped by Amazon US) (MSRP: $109.99) This Amazon deal is US-specific and not available in other regions unless specified. If you don't like it or want to look at more options, check out the Amazon US deals page here. Get Prime (SNAP), Prime Video, Audible Plus or Kindle / Music Unlimited. Free for 30 days. As an Amazon Associate, we earn from qualifying purchases.
    • Vivaldi 7.5 is out with colorful tab stacks, improved tab menu, and more by Taras Buria Vivaldi Technologies has released a new feature update for the Vivaldi browser. Version 7.5 is now available with some much-requested features by the community, privacy improvements, bug fixes, and other changes. The release is not the biggest one, but it still packs useful changes, such as colorful tab stacks, a reworked tab context menu, and multiple improvements under the hood: Vivaldi now supports colorful Tab Stacks. This feature groups related tabs and helps you keep everything well-organized. Now, besides giving your stacks names, you can assign colors, which makes it easier to find the stack you need. Developers also added a new dialog: right-click a stack, click "Edit Stack," and give it a new name or choose a color. The browser also received a cleaner and better-organized tab context menu. Vivaldi says the new version is more intuitive and easier to use. Another important change is the ability to define a custom DNS provider with support for DNS over HTTPS. Finally, here are some of the under-the-hood improvements in Vivaldi 7.5: Address Bar: Fixed focus weirdness, suggestion hiccups, and dropdown quirks Ad Blocker: Now supports badfilter, strict3p, and strict1p rules Bookmarks & Notes: Better drag-and-drop, with clearer visual feedback Mail & Calendar: Smarter threading, invite handling, and polish throughout Dashboard & Widgets: Layout tweaks, transparency improvements, drag-and-drop goodness Quick Commands: Now shows synced tabs and handles errors more gracefully Settings: UI improvements across the board, from DNS input to workspace rules visibility You can find the complete changelog for Vivaldi 7.5 in a blog post on the official website. If you want to try this highly customizable browser, download it using this link.
    • "While users may say they do not want their data used for personalized ads, Meta believes that without personalization, user experience declines with an almost 800% rise in ads being marked as “irrelevant” or “repetitive”. The ads might be more irrelevant, but it's not like people crave ads in the first place. My user experience with ads isn't better with personalization, because I don't want them there to begin with. So I might as well have non-personalized ads if I am gonna have ads, because then I at least get tracked less, and that makes it a better user experience for me.
    • The fact that they didn't offer a non-personalized ad-supported option, when they were mandated by law, was the final nail in the coffin in my case.
  • Recent Achievements

    • Week One Done
      BeeJay_Balu earned a badge
      Week One Done
    • Week One Done
      filminutz earned a badge
      Week One Done
    • Reacting Well
      SteveJaye earned a badge
      Reacting Well
    • One Month Later
      MadMung0 earned a badge
      One Month Later
    • One Month Later
      Uranus_enjoyer earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      446
    2. 2
      ATLien_0
      161
    3. 3
      +FloatingFatMan
      147
    4. 4
      Nick H.
      65
    5. 5
      +thexfile
      62
  • Tell a friend

    Love Neowin? Tell a friend!