There is no complete list of all notifications balloon tips in Windows

A customer wanted a complete list of all notifications balloon tips in Windows.

There is no such list. Each component is responsible for its own balloon tips and is not required to submit their list of balloon tips to any central authority for cataloging. In order to create such a list, somebody would have to go contact every component team and ask them for a list of all their balloon tips, and that component team would probably undertake a search of their code base looking for balloon tips. And figuring out the text of each balloon tip can be tricky since the text may be built dynamically. (And the customer didn't ask for an explanation of the conditions under which each balloon tip may appear, but that's probably going to be their follow-up question.)

It's like publishing instructions on how to display a message on the message board, and then somebody asking the message board manufacturer, "Please send me a list of all messages that might appear on the message board." The message board manufacturer doesn't know how its customers are using the message board. They would have to go survey their customers and ask each one to build an inventory of every message that could potentially be shown.

In other words, this customer was asking for a research project to be spun up to answer their question.

I suspected that this was a case of the for-if antipattern being applied to custom support questions, and I asked what the customer intended to do with this information.

It turns out that they didn't even want this list of balloon tips. They just had a couple of balloon tips they were interested in, and they wanted to know if there were settings to disable them.

But even though that was their stated goal, they still reiterated their request for a list of balloon tips. The customer liaison asked, "Is there a possibility is getting a list of balloon tips generated by Windows itself? Even a partial list would be helpful. Can we help with this?"

What the customer liaison can do is contact each Windows component team and ask them, "Can you give me a list of the balloon tips your component generates? Even a partial list would be helpful." I wished him luck.

The customer liaison replied, "I passed this information to the customer and will follow up if they have any further questions." No follow-up ever appeared.

Comments (33)
  1. Joshua says:

    Obtain Windows source code, search for balloon API, catalog each instance. Question answered.

    [That doesn't actually give the answer the customer wants. For example, suppose you find this code: void UpdateIcon(PCWSTR message, bool useBalloon) { Shell_NotifyIcon(... message ..., useBalloon ? NIM_TOOLTIP : NIM_BALLOON); }. What do you tell the customer? "This component might show a balloon tip with a variable message under variable conditions." Dude, I could've told you that without even searching. -Raymond]
  2. Damien says:

    Does the customer also want all development on Windows to cease, so that the list they obtain today is still applicable tomorrow?

  3. Andre says:

    Can't you reply to these sort of questions with: There is no valid reason why you could possibly need to know that!?

  4. > UpdateIcon

    So you push UpdateIcon onto your stack of search terms.

    There's a much simpler way, though, which doesn't require source access. Just fire up a VM and put it into every possible state, while watching for balloons.

    [That stack can get pretty huge. And how do you decide which calls to UpdateIcon result in balloons and which don't? (Eventually you reach the halting problem.) Firing up the VM is starting to look good. -Raymond]
  5. 12BitSlab says:

    I don't know how many presentation/educations sessions I have ever seen where the presenter starts out with, "There are no dumb questions!"  Of yes there are!

  6. Bill P. Godfrey says:

    Let's make a start on a comprehensive list. Here's all the notifications I've seen on on my laptop recently…

     "You are connected to WiFi Access Point 'DonnaNoble'."

     "You are connected to WiFi Access Point 'MarthaJones'."

     "You are connected to WiFi Access Point 'RoseTyler'."

  7. Andre says:

    >Just fire up a VM and put it into every possible state, while watching for balloons.

    Halting Problem aside, that does sound like the correct solution. Once you've covered 2^<a few GB of typical RAM> states, you even identified the corner cases where some applications coincidentally reimplements the whole shell or OS and displays its balloon tips in that.

    [You forgot 2^<size of page file> and possibly even 2^<size of hard drive> or 2^<size of Internet>. -Raymond]
  8. Katie says:

    I'm guessing the user thought they could look through the list and decide if there were any others they wanted to ask about disabling as well.

    Since you're firing up the VM enumerator to get that list, you might as well save yourself some time and when you find the one with Windows 9 running in a VM then go ahead and make a copy. You should probably make a list of any notifications that it comes up with as well.

  9. Ben says:

    For the benefit of those to come, Maurits was obviously joking.

    Also: Do machines with finite storage have a halting problem? I am pretty sure they don't. (Modern computers are not UTMs because they have finite storage.)

    I take it this is just shorthand for saying "can only be solved by enumerating all possible states", which I am guessing would exceed the Bremmerman limit for the entire universe. (For all practical purposes the same thing as being incomputable.)

    But is that true? Is it proven the minimum amount of computation needed to solve the halting problem for a computer with finite storage? We know it's finite, and also that it is smaller than enumerating all the states because lots of states solve easily, so you only have to enumerate the others… sounds like a log time operation to me. So I am not sure it is a valid objection in theory. (Obviously it is a valid objection in practice….)

  10. xpclient says:

    I would like a list of all ugly style toast notifications in Windows 8.

  11. dirk gently says:

    it's not really 2^<size of internet>, but rather 2^<size limit of the balloon tip (in bits)> (probably considerably smaller).

    You could simply write a 5 line program that enumerates all the possible balloon messages and ask the customer to run it in order to get a comprehensive list.

  12. Joshua says:

    [(Eventually you reach the halting problem.)]

    If this reaches the halting problem when executed by humans, the code is well past unmaintainable.

  13. 12BitSlab says:

    @ dirk

    Given that Windows handles managed code and given that managed code allows one to keep source code in a database and "compile" it at run time, I don't believe there is any scenario where one could enumerate all ballons or all aything else for that matter.

  14. 640k says:

    An omnipotent being would be able to list all tips that has been displayed so far. But that's probably not enough, a second later that list could be incomplete.

  15. Evan says:

    'When people protested to him, as they sometimes had done, that the plan was not merely misguided but actually impossible because of the number of new balloon texts being created and changed all the time, he would merely fix them with a steely look and say, "A man can dream, can't he?"'

  16. Brad says:

    Being programmers, I suppose we are all jumping to answer precisely what the customer asked – but as you note, there are actually ways to solve their problem (disabling annoying balloon tips).

    Seems like over time Windows has built solutions just that problem – I can set preferences for each app in the notification bar. Really I think that's what they wanted, they just didn't know how to ask for it.

  17. Anon says:


    Technically, an omnipotent being would be able to enumerate all balloon tooltips that have been and ever will be.

  18. Evan says:


    But could an omnipotent being enumerate a balloon tooltip long enough that he could never finish reading it?

  19. hacksoncode says:

    For some reason questions like this always make me want to answer in the vein of that famous announcement that every single PIN used for bank cards had been revealed. (!!!!!!!!!)

    0000, 0001, 0002, 0003…

  20. Dominic says:

    Yesterday I saw a balloon pop up from the task bar so I tried to grab a pin icon from the task bar to pop it. Why doesn't this work? "Intuitive interface" my @§§

  21. Viila says:

    @Ben, modern computers may not be universal Turing machines, but being _practical_ devices, they have something even worse: external input. Repeating internal states is no longer an indication that the program does or doesn't halt.

  22. smf says:

    It's simple, you run the code through an emulator that performs a brute force of every single starting condition and then watch for the messages that appear. Tell them you've started looking and you'll get back to them once the list is complete. It's likely to need to run past the end of the universe, so there is no point in actually running it.

    At some point in the future we might be able to spin up extra realities to solve produce the list.

  23. Silly says:

    > Even a partial list would be helpful.

    1. Don't eat the yellow snow.

    (Technically that tip isn't part of the OS, but one could write an app that runs on Windows and emits it).

  24. immibis says:

    It's part of the OS if the OS has been corrupted in such a way that the "You are low on disk space!" balloon text was replaced with "Don't eat the yellow snow.", and the filesystem driver is corrupted so that it always reports low space, and whatever digital signatures exist were corrupted so that they are still valid.

    In fact, with 4GB of RAM and a 256 GB hard drive, there will be over 2 billion billion billion billion (billion^(13 trillion)) such states.

  25. JM says:


    > But is that true? Is it proven the minimum amount of computation needed to solve the halting problem for a computer with finite storage?

    No, if only because for most interesting programs you would be able (and would want to *be* able) to submit a proof of termination that is far shorter than an enumeration of all possible states. However, it is true that enumerating all states is the only *general* solution that can work (that is, for any state space size you can devise a pathological machine that runs through all possible states before halting or repeating).

    Determining the minimum amount of computation needed to solve the halting problem for any given finite state machine is probably undecidable. That is to say, I haven't the time or the immediate insight to prove you could reduce a solution for this to an undecidable problem, but I would be highly surprised if it was decidable. If it is, though, I would in turn be surprised to learn that the time/storage requirement for that algorithm isn't also exponential (so you've gained nothing). My brain's too tired to back up my gut right now, maybe someone else has a proof handy (or a general theorem).

  26. Neil says:

    Write a program which generates random notifications and give that to the customer.

    Or write a program which enumerates all possible notifications. (As I recall, there's a limit on the length of a notification, so the program will eventually terminate, given enough computing time.)

  27. Yuri says:

    I had a related demand to log in user readable form all possible errors in a .Net program heavily dependent on external apis and datafeeds. Task with this required feat, I wrapped every atomic operation the customer could understand and logged: Exception occured during XXXXX, dump exception details… When asked to work on clarifying every exception detail, I made a list of all possible exceptions in one component (at least a hundred) and asked them how many months/years they wished I work on this logging project, breaking it down component by component easily reaching an estimation in the hundred thousands possible errors. I then showed them some cryptic exceptions and asked them how should I put it in readable form or how much time they have to study computer science in order to understand them. Sometimes you really have to lose a lot of time in order to make someone understand.

  28. Sven2 says:

    Let's play Defend The WTF:

    * Maybe the customer was allowed to ask one question only for some weird reason but the problem they face would actually require a question and a follow-up. So they make the question very general in hope that they can deduce the answer in one go.

    * Maybe the customer got this brilliant idea for an app that will make them millions – but if their question is too specific, Microsoft will guess what they're up to and write the app themselves! By asking a very general question, they won't give away any ideas.

  29. Yuri says:

    @Brian EE

    Very interesting read Brian, thank you for the link. This was indeed the same exact situation, explained in much better english.

  30. Mark (The Other Mark) says:

    I am writing a web page, which will display in internet explorer 9, 10, and 11. Can you give me a list of the web pages IE can display? Even a partial list would be helpful. Thank you.

  31. DWalker says:

    Wow, I want that list of all 4-digit PINs!  How did that list escape?  :-)

  32. smf says:

    I checked and fortunately for me, my pin is the only one missing from the list. So I am safe.

    It's pretty lucky as I picked a random one.

Comments are closed.