I see basically two ways you could solve this, but in both cases you'll need to utilize my SharpCraft project, which is a C# powerered way of injecting functionality into Warcraft III made by me, with research from a bunch of other people. Do note that the readme is outdated, but I'll do my best to help you out with the current release.
This way you have easy access to the full JASS API, which allows you to fetch everything easily. What you do here is add some custom natives to the JASS API that help bridge the gap between JASS and your application. This could be natives that write to the hard disk or natives that send messages to your application.
This approach has the advantage that you can keep it in all C#, which is much more versatile than JASS, but you can't use natives that use strings. You have full access to the JASS API from C#, so you'll not lose out on any features.
There's a plugin included in the pack that shows the XML structure for plugins.
To use the library, you add a reference to SharpCraft.dll, and then create a class that implements the FullPluginBase class. From there you have access to the different parts of the API.
public class MyPlugin : FullPluginBase
public override void Initialize()
// This is a pretty cheap way to get into any map without the map needing to be coded for it.
Script.PostMain = this.Script_PostMain;
private void Script_PostMain()
// Create a JASS trigger.
var trigger = JassTrigger.Create();
// Make the trigger run every .01 seconds, repeatedly.
// Make the trigger call our Tick function when triggered.
private void Tick(JassTrigger trigger)
// Do the stuff you want to do, using the JASS API or .NET API.
I hope this gives you an idea of how to use it.