The browser engine inside Microsoft Document Explorer is Internet Explorer’s Trident engine, specifically the IE7-era Trident (mshtml.dll) paired with the Chakra JScript engine used by Internet Explorer. This really limits what you can do in your help files. All of the technology that allowed old versions of Internet Explorer to use multimedia have been scrapped. You cannot use Flash, Silverlight, ActiveX or HTML5. For years this has prevented me from playing audio files in my help collections. In particular, my Spanish help collection can no longer play the MP3 files which are intended to illustrate the pronunciation of various words.
However, now that we have Artificial Intelligence I have found a solution to this problem. I described my problem to Microsoft Copilot and it suggested a brilliant solution. It is not the perfect solution but it works for me. Although Microsoft Copilot had a brilliant idea it still took me a little effort to get it working. The key to this solution is to use a custom URL protocol and then set up an application on your system to handle this protocol. So the first step is to hack the registry with this REG file:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\audioplayer] "URL Protocol"="" @="Audio Player Protocol" [HKEY_CLASSES_ROOT\audioplayer\shell] [HKEY_CLASSES_ROOT\audioplayer\shell\open] [HKEY_CLASSES_ROOT\audioplayer\shell\open\command] @="\C:\\Users\\rsrobbins\\source\\repos\\AudioPlayer\\bin\\Release\\AudioPlayer.exe\" \"%1\""
Next you need to create the AudioPlayer.exe application. This is a C# console application using the NAudio open source .NET audio library. Change the Output type to Windows Application to avoid having a console window opening. Here is the code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NAudio.Wave;
namespace AudioPlayer
{
internal class Program
{
static void Main(string[] args)
{
if (args.Length == 0)
return;
string uri = args[0]; // e.g., audioplayer://play/song1
// Parse your custom URI however you want
string file = ParseFileFromUri(uri);
using (var audio = new AudioFileReader(file))
using (var output = new WaveOutEvent())
{
output.Init(audio);
output.Play();
// Keep the app alive until playback finishes
while (output.PlaybackState == PlaybackState.Playing)
System.Threading.Thread.Sleep(100);
}
}
static string ParseFileFromUri(string uri)
{
// Example: audioplayer://play/song1 ? song1.mp3
var parts = uri.Split('/');
return @"C:\Audio\" + parts[parts.Length - 1] + ".mp3";
}
}
}
Now in your web pages you just add this HTML
<button onclick="location.href='audioplayer://play/sabado'">
Play Sabado
</button>
This is not an ideal solution because all your MP3 files must be located in an Audio folder on your C drive and cannot be compiled into the help collection. But given all the limitations it is a decent solution. I thought it was very clever of Copilot to suggest this hack. It gave me the registry file hack and the C# code for the program to play the audio files. I just had to compile the code in Visual Studio and make the registry edit. Then I revised all of my web pages that were using Flash to play audio using the custom URL protocol. This has been a technology pain point for me for years and this problem has finally been solved!

