This post describes how a free tool to help people with low vision was made available at the Microsoft Store. In this case the tool was not built as a traditional Microsoft Store app, and so leveraged the Desktop Bridge for making desktop apps available at the Store. The tool is now available at Herbi HocusFocus at the Microsoft Store.
Apology up-front: When I uploaded this post to the blog site, the images did not get uploaded with the alt text that I'd set on them. So any images are followed by a title.
Hey devs, here's a question for you…
If you felt that a software tool running on Windows could help someone you know, and that tool isn't available today, could you build it?
There are certainly valid reasons why the answer might be "No". For example, perhaps the technology available to you today just doesn't support what you need. Or maybe it does, but you really don't have time to build the tool, given everything else you need to get done during the day. But perhaps in some cases, the answer might be "Yes". Perhaps today's technology does support what you need, and by grabbing a few hours here and there, you could build a first version of the tool and try it out. And if over time you build on that, you might end up with a tool that's helpful to a friend or family member, and one that you could ultimately make available to everyone.
So I do think it's important for devs to consider whether there's an opportunity to plug gaps themselves in what's available to people today.
Such an opportunity came my way last year when I was asked if I could build a tool that helped people to follow keyboard focus and the text insertion point while they were working with apps in Windows. By the time I got this request, I'd already built some related functionality in earlier explorations into leveraging the Windows UI Automation (UIA) API, and so it was fairly straightforward for me to build a first version of the new tool. I described some of that work at A real-world example of quickly building a simple assistive technology app with Windows UI Automation.
The app certainly has some constraints, and I think that's fine. I'd much prefer to release an app that works well in many situations, and not in others, rather than not releasing an app at all. (That's assuming I make people aware of where it doesn't work well.) For example, the app can't highlight things on the Start menu, and sometimes it struggles to highlight things in regular menus. But in many other places in many other apps, it works well, and is worth getting in front of people who might find it helpful.
And that brings me to another important question. What's the best way to get a Windows app in front of people? For me, the answer is the Microsoft Store. I'd already made the app available through my own site at Herbi HocusFocus, but if I can make the app available at the Store, then I don't have to carry on maintaining my own installation stuff. Instead I can build it all and release an update to the Store directly from inside Visual Studio. And a lot more people around the world who might find it helpful get to learn about the app.
My understanding is that today, it's not possible for a traditional Microsoft Store app to leverage the UIA Client API. My app relies heavily on that API, and so the next question is – how did I make the app available at the Store?
Below I've described what it took to get my WinForms desktop app up at the Store. Overall it was a pretty smooth process. And I'd say that's an impressive thing made possible by the Microsoft Store team, given that there was no way I was going to read any instructions if I could avoid it.
Figure 1: The Herbi HocusFocus app highlighting a Checkbox in its own UI.
Hold on a moment - why does the app have to be for someone else?
That's a good point. I asked the question above about you building a tool that could help someone you know. So that would include a friend, a family member, and yourself. All technology should be accessible, including the tools used to build software products. For example, Visual Studio is becoming more accessible with each release, and so should be usable to developers who also use assistive technology tools such as on-screen keyboards, magnifiers and screen readers. If you're aware of issues with the accessibility of the latest version of Visual Studio, send the team feedback – they want to hear from you.
Making the app available at the Microsoft Store
Ok, I must confess, I did read some of the instructions. The steps listed at Package an app by using Visual Studio (Desktop Bridge) got me off to a great start. I did have to upgrade the free version of Visual Studio that I had on my machine in order to be able to add a Packaging Project to my Visual Studio solution, but once I had the required version, that worked fine. And I'd reserved the name of my app at the Store in the same way that I would for any app at the Microsoft Store.
There were only two things I had to react to when trying to rebuild my WinForms app for the Store. Visual Studio spotlighted these for me as it hit them, so they were quick to resolve.
1. My original app had a "More information" link, which when invoked would call Process.Start() with the URL for my web site. The Process.Start() call is not available in the Store version of the app, and so I removed the link. This isn't a concern for me, as the listing of the app at the Store has the link to my site.
2. I'd not replaced the placeholder Store assets with my own assets. It was really handy for me that Visual Studio checked for that. It would have been rather unimpressive if a bunch of placeholder images later appeared for my app. So I duly added my own images for such things as the app logo.
With the above changes made, I filled in the form at Have you already converted your app with the Desktop Bridge? and a while later I was contacted by someone from the Microsoft Store team who could help with the next phase. They asked me to supply the appx package for the app, so that they could run it.
This is where I did have an "Oh no…" moment. The person from the Store team got back to me saying that after I'd supplied the appx package, the app wouldn't start. Uh-oh.
And this is where I felt I really should have been paying a little more attention to what I was doing. When the app starts, it dynamically selects an image to load. It does this so that it can show an image that accounts for whether a high contrast theme is active. (I mentioned this action when I turned the app into a case study on accessibility, at Considerations around the accessibility of a WinForms Store app.) However, the way I'd built the WinForms app, the image files got copied out to wherever the exe was running, and got picked up from there. I doubt this was deliberate action on my part when I first built the app. In fact, if the app run ok after I first it, I probably didn't even consider where the images were. Given that I'd not taken action to ensure the images were available after the app was installed via the new appx package that I'd built for the Store, the images couldn't be found when the app started, and so the app didn't start.
So to address this, I updated the app to embed the images as resources in the exe. This meant the app ran just fine when installed via the appx package. Hopefully I'll not make that mistake again.
Following this, the person from the Microsoft Store team could get familiar with the app, and approved it for uploading to the Store. Sure enough, I could then upload the appx package to the Store in the same way as a traditional Store app. I also went through the rest of the traditional steps for making an app available at the Store, such as uploading screenshots. In my case I chose a screenshot of keyboard focus being highlighted by the app in Edge, and the text insertion point being highlighted in Word 2016.
Figure 2: The Herbi HocusFocus app highlighting where keyboard focus is in the Edge browser.
Figure 3: The Herbi HocusFocus app highlighting where the text insertion point is in Word 2016.
One of my goals in making the app available at the Store was that I'd get more feedback on how the app can be enhanced to become more helpful in practice. As it happens, as soon as the app was available at the Store and downloaded to a device that it had not run on before, I learned that my custom color picker can sometimes not show all the colors available. On one device, only 12 of the 16 expected colors appeared. I don't know if some mix of that device's display resolution and scaling is related to the issue. And I also learned that on one device the app's highlighting in Edge didn't appear as expected after the page had been scrolled.
So I've some fun investigations and updates to be making over the coming weeks. I'd say this sort of thing isn't too surprising for early versions of apps once they become available to a wide range of devices. I'll look forward to getting more feedback on where the app can be made more helpful.
Overall the process for getting my WinForms app up at the Microsoft Store was straightforward, through the helpful instructions at Package an app by using Visual Studio (Desktop Bridge), and by Visual Studio drawing my attention to things I needed to address. This means I can now reach more people around the world who might find the tool useful, and I can update it based on their feedback. The tool is freely available at Herbi HocusFocus at the Microsoft Store.
I really do feel privileged to be in a position to do this sort of thing. I'm familiar enough with, and have access to, certain technologies such as Visual Studio and UI Automation, and it would be wrong for me to not at least consider whether it'd be practical for me to build a tool that might plug a gap in what's available to someone. Sometimes I can't help, but sometimes I can. Also, I put the source for one version of the app out at Herbi HocusFocus 2.0 source code, for anyone interested in learning how the app leverages the UIA API.
So please do consider whether you could build a tool that a friend or family member, or yourself, might find helpful. And if you do build it, consider sharing it with everyone through the Microsoft Store.