Saturday, October 17, 2015

Auto-killing the Skype Call Quality Feedback dialog

As a work-from-home nerdo, I find Skype to be incredibly useful. My only complaint is that after every call, an annoying "Call quality feedback" windows pops up.


I'll try to limit my first world rage to two points:

  1. Because I pay for a subscription, I should have the option to disable this dialog. I already think the service is excellent. That is why I am paying for it. But this request has fallen on deaf ears at Skype / Microsoft for four years now.
  2. It seems like a more effective approach would be for the software itself to evaluate the call quality. If the engineers at Skype have figured out real-time language translation, perhaps audio quality detection is tractable. Who knows.
In searching for a solution to my unwanted pop-up problem, I came across this post from someone who solved the exact same problem using AutoIt. AutoIt is a scripting language and utility for manipulating anything you can dream of on a desktop interface, including closing windows. Perfect! Unfortunately, the link to the script created on that blog entry is dead, so I decided to give it a shot myself.

I downloaded and installed AutoIt, which is free. I poked around the examples and docs for a bit and came up with this little guy:

 ;Poll at 4hz for the stupid Skype call quality feedback window. If it's found, kill it.  
   
 While True  
   WinWait("[CLASS:TCallQualityForm]")  
   WinClose("[CLASS:TCallQualityForm]")  
 WEnd  

Too easy, right? Here's how it works.

WinWait pauses the execution of the script for a quarter of a second and then checks for the existence of a certain window. If the window does not exist, it pauses and checks again later. I'm using the default value of 0 for the timeout which means that it will hunt for the Skype "Call quality feedback" window, four times per second, FOREVER. 

When a Skype feedback window does appear, WinWait completes, and the script proceeds to the next line, which is WinClose. Not surprisingly, it closes the window. And because all of this is wrapped in a loop that never exits, the script continues its quest to obliterate the feedback dialog for as long as I'm logged in.

The single argument I pass to both functions is "[CLASS:TCallQualityForm]". AutoIt allows you search for and kill a window by title or by internal window class name using the special [CLASS:] syntax. I chose this approach so that if Skype changes the title of the feedback window, my script will probably keep working since it's less likely that this internal class name will change. You can discover the internal class name and all sorts of other stuff using the AutoIt Window Info application that is bundled with AutoIt:


Next I used the convenient context-menu based compilation feature to create an executable:


And now I have kill_skype_feedback.exe. When this runs, it adds itself to the Windows system tray and stays there running quietly in the background. 

I've been using it for a week now and it works great! I have to be watching very closely to even see the Skype popup before it's closed a fraction of a second later.

The script is very resource friendly since it's tiny and spends most of its time sleeping:


This works so well that I have it launch automatically at startup time. I copied the executable to the all-users startup folder for Windows 10:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

And now the feedback window killer starts whenever I log in. It remains to be seen if this plays nice with games and other unusual windowing configurations, but so far I haven't run into any issues.

If you'd like all four lines of my script, you can grab it from github.