ED:Runner. A help program for VR headsets with joysticks/HOTAS, part 2.

Question about setting lines to "comment" or "remark" - usually it's ; or # to rem out lines, does this work with EDRunner? Some lines I would like to disable without actually deleting them for future reference. I realize I can generate another .ini for reference, but still. heh

I plan on using the v1.7 to hotkey the manual audio toggle. I often switch between headset and speakers so that would be handy if I'm understanding how it works. Speaking of, the help file mentions:

I have custom names for these audio devices such as "G35" etc.. Do custom names work or does it have to be the actual device name? eg "Logitech G35 Gaming Headset" etc ?
Yes, you can # out lines in the ini. It will simply ignore any lines it does not recognize. That is why I could write the notes directly in the ini without # infront of it.
So if you want to write notes, just write. If you want to disable something, putting a # infront of it works fine.
#ExtraJoyDebugValues=FALSE
;ExtraJoyDebugValues=FALSE
Disabed_ExtraJoyDebugValues=FALSE

All valid to disable =) The only exception is in the [LaunchPrograms] section. You can not have remmed out lines in there.

As for switching audio, yes, you define which two audio outputs you want it to switch between. Just open your Sound Settings and take note of the names.

VRAudioDevice=HeadPhones
NormalAudioDevice=Speakers

Might just as well be
VRAudioDevice=G35
NormalAudioDevice=Blabla

Since you do not have VR, maybe the names are confusing.
VRAudioDevice is when the game is active
NormalAudioDevice is when the game is not active.

If you only want to switch manually between them, set
ManualAudioDeviceKey=!{PGUP}
NoAutomaticAudioSwitching=TRUE

Meaning you swtich with Alt-PageUp. There is a pretty good explanation in the INI file if you scroll down to "VRAudioDevice and NormalAudioDevice:"

Ok, my update on v1.7

I will keep trying, but I spent a bit of time working with it, and no matter what I try, I get "Game not found, idling" every time.

1.3 works perfectly.

/shrugs.
That means that it can not see the game window title. Anyone else have problems with this now? I made a change in 1.7 so the window title names must now be exact. It was happy with a partial match before, which is probably why it worked in previous versions. That could cause bigger problems though, like detecting the game or program running when you did not, just because you had some other window open with a similar name. I might switch that back but I'm interested in why it does not work for you.

It is looking for this one window title:
EliteWindowTitle=Elite - Dangerous (CLIENT)

So I guess it does not find a window/program with that exact name on your machine for some reason. Is that the title of the game window when you launch the game?
I'll include a little program you can check with. Launch Au3Info.exe. Start the game windowed. Drag the "Finder Tool" from Au3Info to the game window and check the "Title" property.
It should be "Elite - Dangerous (CLIENT)". If its not, let me know =)
http://grandis.nu/downloads/Au3Info.zip

Hm, do you run Elite in full screen? Try it in windowed mode for fun.

Edit: If you still can't get it to see the game window, try 1.8. I reverted the setting added in 1.7 but made it an option. Let me know

Code:
    1.8:
    * Reverted the WinTitleMatchMode change done in 1.7. Some people seems to have problems with "exact" match as it does not detect the game window when its running.
      Changed the default back to "Match the title from the start" mode but also made it an option as I like to have it in "Exact title match" mode.
      So added option WinTitleMatchMode in the extras section of the INI.
Code:
WinTitleMatchMode:
This decides how window titles are searched for. Affects EliteWindowTitle and LaunchPrograms.
1 = (default) Match the title from the start
2 = Match any substring in the title
3 = Exact title match
-1 to -3 = Case insensitive match according to the other type of match.
Most people will not need to touch this setting.

http://grandis.nu/downloads/ED_Runner_1.8.zip
 
Last edited:
Yes, you can # out lines in the ini. It will simply ignore any lines it does not recognize. That is why I could write the notes directly in the ini without # infront of it.
So if you want to write notes, just write. If you want to disable something, putting a # infront of it works fine.
OK as I assumed, thanks for clarifying. :)

As for switching audio, yes, you define which two audio outputs you want it to switch between. Just open your Sound Settings and take note of the names.

VRAudioDevice=HeadPhones
NormalAudioDevice=Speakers

Might just as well be
VRAudioDevice=G35
NormalAudioDevice=Blabla

Since you do not have VR, maybe the names are confusing.
VRAudioDevice is when the game is active
NormalAudioDevice is when the game is not active.

If you only want to switch manually between them, set
ManualAudioDeviceKey=!{PGUP}
NoAutomaticAudioSwitching=TRUE

Meaning you swtich with Alt-PageUp. There is a pretty good explanation in the INI file if you scroll down to "VRAudioDevice and NormalAudioDevice:"
As per below, after I got v1.8 running, this toggle works great! I can easily swap between headphones and speakers, and that's really awesome! So the answer to my question is, YES, custom names work perfectly.

That means that it can not see the game window title. Anyone else have problems with this now? I made a change in 1.7 so the window title names must now be exact. It was happy with a partial match before, which is probably why it worked in previous versions. That could cause bigger problems though, like detecting the game or program running when you did not, just because you had some other window open with a similar name. I might switch that back but I'm interested in why it does not work for you.

It is looking for this one window title:
EliteWindowTitle=Elite - Dangerous (CLIENT)

So I guess it does not find a window/program with that exact name on your machine for some reason. Is that the title of the game window when you launch the game?
I'll include a little program you can check with. Launch Au3Info.exe. Start the game windowed. Drag the "Finder Tool" from Au3Info to the game window and check the "Title" property.
It should be "Elite - Dangerous (CLIENT)". If its not, let me know =)
http://grandis.nu/downloads/Au3Info.zip
Ok, little troubleshooting I see what is happening here, this is as simple a breakdown as I can muster:

In 1.3 I can run EDRunner before launching the game. <----(critical difference in versions!!)

I use Ed Runner 1.3 to run the launcher. All is fine.

I boot up the PC / hit CTRL+ALT+R (desktop shortcut key in the icon properties) and walk away to get a cup of coffee. :) I come back and hit ENTER to launch ED and the other programs I ask it to run are running.

As of 1.7 and 1.8 I can no longer do this. I get the error every time as I mentioned in my last post. It doesn't find the game window so it stops, and does not luanch the extra programs.

IF - however, I run EDRunner AFTER the ED window is running, then it runs, but does not launch my specified programs.

What I want is the launching behavior of v1.3 with the audio switching feature of 1.7+ (what am I missing here?)


  • My theory: Somewhere between 1.3 and 1.7 you made it a requirement for EDRunner to see the game window before it continues to process any other commands. If the game window is not running, EDRunner stops processing the launch commands and enters an idle state.

  • My Request: Personally, I love the 1.3 behavior (launching other programs and launching the launcher) better.
Hm, do you run Elite in full screen? Try it in windowed mode for fun.

Edit: If you still can't get it to see the game window, try 1.8. I reverted the setting added in 1.7 but made it an option. Let me know
I run ED in borderless and the Au3Info is correctly identifying the window. This isn't the problem, the problem is I can no longer run EDRunner BEFORE the game is running.

I tried all three options with the new WinTitleMatchMode: with the same results as I posted above.



Here is my 1.3 .ini that works as I expect it to.
Code:
[General]
JoystickID=0
JoyMonitor=0,1,7
JoyTolerance=300
EliteWindowTitle=Elite - Dangerous (CLIENT)

[LaunchPrograms]
E:D Market Connector=C:\Program Files (x86)\EDMarketConnector\EDMarketConnector.exe
antimicro=C:\Program Files (x86)\AntiMicro\antimicro.exe
Elite Dangerous Launcher=E:\EDLaunch\EDLaunch.exe

[Voice]
Enable Speech=False
Voice Rate=0
ED Start=E D runner starting
VR Audio Active=<VRAudioDevice> audio active
Normal Audio Active=<NormalAudioDevice> audio active
Activating Game=Joystick <JoyID> axis <JoyAxisMoved> moved. Focusing Elite window
Lost focus=Lost Elite focus. Monitoring joystick <JoyID>
Game found=Game found. Activating
Game refocused=Refocused
Game not found=Game not found. Idling

[Priority]
EliteDangerous64.exe=HIGH
WatchDog64.exe=LOW

Sorry to be a PITA, but I want my cake and eat it too!!

If it's too much trouble I can still run 1.3 the way I like it, but I really want the new bells and whistles also! (ie auto mouse click and audio swapping!)
 
Sorry to be a PITA, but I want my cake and eat it too!!

If it's too much trouble I can still run 1.3 the way I like it, but I really want the new bells and whistles also! (ie auto mouse click and audio swapping!)
Hehe, not a problem. And you are right. In 1.6, I changed so that LaunchPrograms are only started once the game is detected. Guess I did not really think to launch elite through ED Runner when I made that change =)

Grab 1.8 again and give it a go. I added LaunchProgramsWhenGameFound to the INI. It defaults to FALSE so should be good right off the bat for the way you like it.

Code:
    1.8:
    * Reverted the WinTitleMatchMode change done in 1.7. Some people seems to have problems with "exact" match as it does not detect the game window when its running.
      Changed the default back to "Match the title from the start" mode but also made it an option as I like to have it in "Exact title match" mode.
      So added option WinTitleMatchMode in the extras section of the INI.

    * Added option LaunchProgramsWhenGameFound to the Extras section. If TRUE, LaunchPrograms are only executed once the game is found running. If FALSE (default), LaunchPrograms are
      started when ED Runner starts (As they did pre 1.6). If this is set to FALSE, CloseLaunchPrograms will always be set to FALSE as well (or it will just close the program again..)

    * LaunchPrograms can now be "remmed out" with a # in front of them. The two default programs added to the default INI on first startup are both remmed out by default now.
http://grandis.nu/downloads/ED_Runner_1.8.zip
 
Last edited:
Grab 1.8 again and give it a go. I added LaunchProgramsWhenGameFound to the INI. It defaults to FALSE so should be good right off the bat for the way you like it.
Thrilled to test this when I can get to my PC!

Software flexibility - that's the key!
 
EUREKA!!!!

Got my cake and eating it too!

Programs all launch before ED is running, all toggled window re-focus options working (the main point of the script! AMAZING!), manual audio switching (KILLER!) working! Loving this!!

The last thing on my troubleshoot list is to find my personal delay for "DoubleClickGameWindowDelay".

As I understand it, once EDRunner detects the "Elite - Dangerous (CLIENT)" window, it counts in seconds before hitting a mouse click to bypass the ED Logo startup movie, Yes ??

I tried, 5, 10, and 15 to no effect, but I will continue fiddling to see where the sweet spot is.



For reference my v1.8 ini-
I am using EDRunner for a multi-monitor setup running ED in fullscreen borderless, with TrackIR. The script runs additional ED apps (I have a few more to add later) then launches the launcher. It is set to re-focus the ED window with joystick X,Y axes + buttons. The audio toggle settings are set to manually swap between my headset and monitor speakers via keypress.

Code:
[General]
JoystickID=0
JoyMonitor=0,1,7
JoyTolerance=300
EliteWindowTitle=Elite - Dangerous (CLIENT)
DoubleClickGameWindowDelay=15
ResetHeadSet={INS}

[AudioDeviceSettings]
VRAudioDevice=G35
NormalAudioDevice=DELL
ManualAudioDeviceKey={F9}
NoAutomaticAudioSwitching=TRUE
OnlySwitchOnGameClosed=FALSE

[LaunchPrograms]
E:D Market Connector=C:\Program Files (x86)\EDMarketConnector\EDMarketConnector.exe
antimicro=C:\Program Files (x86)\AntiMicro\antimicro.exe
Elite Dangerous Launcher=E:\EDLaunch\EDLaunch.exe
;VoiceAttack=C:\Program Files (x86)\VoiceAttack\VoiceAttack.exe

[Voice]
Enable Speech=FALSE
Voice Rate=0
ED Start=E D runner starting
VR Audio Active=<VRAudioDevice> active
Normal Audio Active=<NormalAudioDevice> active
;Lost focus=Lost Elite focus. Monitoring joystick <JoyID>
Game found=Game found. Activating
Game refocused=Refocusing
Game not found=Game not found. Idling
Reset Headset=Look straight ahead

[Priority]
EliteDangerous64.exe=HIGH
WatchDog64.exe=LOW

[Extras]
ExtraJoyDebugValues=FALSE
WinTitleMatchMode=1
LaunchProgramsWhenGameFound=FALSE
CloseLaunchPrograms=TRUE


Now this is above and beyond the call, but what about an ENTER key event timer after it detects the ED Launcher window??

Then my script settings would be one click from desktop to Main Menu - heh talk about uber lazy yeah!
 
Last edited:
EUREKA!!!!

Got my cake and eating it too!

As I understand it, once EDRunner detects the "Elite - Dangerous (CLIENT)" window, it counts in seconds before hitting a mouse click to bypass the ED Logo startup movie, Yes ??

I tried, 5, 10, and 15 to no effect, but I will continue fiddling to see where the sweet spot is.

Glad its working for you!

And yes, you are correct. Once it detects the game it starts counting. Actually, the exact time is a little bit later, depending on how long it takes to initialize itself etc. If you run the debug version, you can check
Code:
Found game window to double click at X:3255 Y:587
Set Elite - Dangerous (CLIENT) to AlwaysOnTop to make sure we click it.
Double left clicking mouse in game window.
Double left clicking again in game window.
Release AlwaysOnTop for Elite - Dangerous (CLIENT)
The "Found game window" is the exact time it starts the pause for how long you've set. Once it gets to "Double left clicking" is where its actually doing the clicking.
So run Elite in a window and run the ED Runner Debug version and you should be able to see when it clicks and modify the timer accordingly.

And regarding "Now this is above and beyond the call, but what about an ENTER key event timer after it detects the ED Launcher window??".. I never really thought about it, but without voice on, its really hard to know whats going on =) Feel free to use the debug version while finetuning it. There is no difference in performance or anything.
 
Last edited:
Updated to 1.9. Mostly centered around helping new users set it up that run without VOICE enabled as its a bit hard to finetune, for example, DoubleClickGameWindowDelay without it.
Also, I got tired of the program pausing when it was talking so I fixed that =)

New in [Extras] section:
DoubleClickGameWindowDelayTune=TRUE/FALSE/RESET

Grab it from the first post.

Code:
    1.9:
    * ED:Runner is no longer paused when talking, with the help of a new "ED_Speak.exe" executable. That will do the talking while the main program keeps running instead of waiting
      for it to finish chatting. Some messages will still pause ("ED Start") and some will abort any current talking going on ("Game refocused" for example).
      You'll not see the ED_Speak.exe as its extracted from the main .exe to your %TEMP% drive and executed from there when talking. It will be removed again on a proper shutdown
      of ED:Runner.
      If you want to play with it, copy it from %TEMP% when ED:Runner is executed. The format is ED_Speak.exe <speed (-20 - 20)> <"what to say">. Example: ED_Speak.exe 1 "hello world"

    * Added DoubleClickGameWindowDelayTune (TRUE/FALSE/RESET) to the Extras section. If TRUE, will give two beeps if DoubleClickGameWindowDelay is enabled, to help you fine tune the
      DoubleClickGameWindowDelay value you need to abort the intro at the best possible time.
      The first beep when the DoubleClickGameWindowDelay starts ... delaying and another higher beep when it actually clicks the game window.

      If you have voices off and/or the ""Reset Headset"" voice off, it will also give another, slightly higher pitched beep 1 second before clicking the ResetHeadSet button, if
      you have that enabled.
      So you know when to look straight ahead before resetting the headset position, even with voices disabled.

      If you have no voices enabled for "Reset Headset" but always wants this second beep to remind you to look straight ahead, set DoubleClickGameWindowDelayTune to RESET and it
      will always (only) beep one second before resetting the headset.

    * DoubleClickGameWindowDelay default value increased to 8 seconds. Seems right for my system. Can probably do with 7 seconds but 8 should be a better match for more people I guess.

    * Removed the "Double left clicking again in game window." action when DoubleClickGameWindowDelay is enabled. No reason for it anymore. Saves a second on startup time.
 
Last edited:
The only issue I am having with it is that it seems every time I restart my computer it is recognizing the HOTAS as a different assigned number.

Reboot once, and it is device 0, next time device 3, then 2, but is assigned at random... is there a way to get it to watch just any axis 0,1 on any of the devices that are plugged in?

On my system this would make it jump back to elite not only on joystick motion, but also throttle movement, or pedal motion as each one is recognized as a separate input device.
 
The only issue I am having with it is that it seems every time I restart my computer it is recognizing the HOTAS as a different assigned number.

Reboot once, and it is device 0, next time device 3, then 2, but is assigned at random... is there a way to get it to watch just any axis 0,1 on any of the devices that are plugged in?

On my system this would make it jump back to elite not only on joystick motion, but also throttle movement, or pedal motion as each one is recognized as a separate input device.
Thats the magic of USB and the reason I sold my Blissbox. Impossible to set up =)

I'll have a look if that is possible. If not perhaps a "define joy ID by moving joystick at startup of ED:Runner" would work...
 
The only issue I am having with it is that it seems every time I restart my computer it is recognizing the HOTAS as a different assigned number.

Reboot once, and it is device 0, next time device 3, then 2, but is assigned at random... is there a way to get it to watch just any axis 0,1 on any of the devices that are plugged in?

On my system this would make it jump back to elite not only on joystick motion, but also throttle movement, or pedal motion as each one is recognized as a separate input device.
I've started working on this and think I found a solution but I'd like you to test it and see if it works before I clean it up and remove old code as its a rather big change I had to make.. Could you give this a go?
http://grandis.nu/downloads/ED_Runner_2.0b1.zip

Code:
    2.0b1:
    * JoystickID can now take a range of Controller IDs to monitor instead of just one. The default is still only one ID, but you can specify a range with, for example, 0-2 to monitor
      your first 3 controllers for movement. Observe that the range MUST start with 0.
      This will probably make it a little slower to react to movement. If you specify more than the number of controllers you have, nothing bad will happen. It'll just take even longer.
      Had to rewrite large portions of the program for this to work so it suits it well to be called 2.0.

    * Added MonitorDelay option to the Extras section. This controls how long to wait, in MS, between checking the joystick for movement when the game is not the active window.
      The default is 100 MS (Same as old versions) which makes it very quick to react to movements, but it might also take some CPU (Check task manager when game is not active).
      If you think ED:Runner takes too much CPU, try raising it a bit (start with 200).
      Setting it to 0 will make it mega responsive, but it will then take 8% CPU on an overclocked Intel 8700k ... Plus it might make it hard to break the JoyTolerance when it checks
      that often.
Edit: Seems some antivirus companies now think Autoit is a virus.. Its not and its safe to disregard if you get warnings (If you trust the author himself to tell you that).
Content contained "Heur.AdvML.A!300" virus. Details: Virus: Heur.AdvML.A!300; File: ED_Runner_2.0b1.zip; Sub File: ED_Runner 2.0b1/ED_Runner.exe; Vendor: Symantec; Engine version: 4.0.0.214; Pattern version: 20181112.004; Pattern date: 2018/11/12
 
Last edited:
Yes, is working for me.

In fact, because of the controller I am using (logitech G940) and because it is seen as three separate devices... joystick pitch and roll, both throttles and the foot pedals, across all three devices are all axis's 0 and 1 for all of them.. so now any motion on any of those make it jump back to the game.

This is awesome. Also when I unplug and plug back in, even though the numbered order for each has changed, because it is watching the ranger, all three will still pick up the movements and jump back to game.
 
Excellent. Thanks for testing =)

I'll clean it up and give it a proper 2.0 stamp. You do not have to update if it works fine now as its just commented code that needs to be removed from the beta.
 
I've made a new Joystick Tester program for the upcoming ED:Runner 2.0. Combined them all into one and made it a little better looking. Anyone mind testing this one? Preferably if you have more than one controller connected.

Once again, my Malwarebytes goes crazy over compiled Autoit scripts... there is no virus in it. Reported it to Malwarebytes.
Edit: Recompiled it as a x64 EXE. That seems to have calmed Malwarebytes down =)


http://grandis.nu/downloads/Joystick_Test.zip
 
Last edited:
Joystick tester works fine with my setup, again, my controller (Logitech G940) is a single USB plug into the PC, but computer sees it as three controllers
 
I just remembered something.. I made a program in 2016 that forces the controllers into a specific ID. I guess its moot now with ED:Runner 2.0, but if it gives you problems in the future that the IDs are random at startup, you can have a look at it (basically a problem in, say, MAME which wants static IDs for mapping keys)..

See here: ftp://misc:misc@grandis.nu/Tur-Game_Controller_Order

The only issue I am having with it is that it seems every time I restart my computer it is recognizing the HOTAS as a different assigned number.

Reboot once, and it is device 0, next time device 3, then 2, but is assigned at random... is there a way to get it to watch just any axis 0,1 on any of the devices that are plugged in?

On my system this would make it jump back to elite not only on joystick motion, but also throttle movement, or pedal motion as each one is recognized as a separate input device.
 
Stupid Windows Defender now detects it as a virus as well and removed it from the webserver. grr. Try again.

Compiled everything as x64 executables instead. Seems to get it off the antivirus radar.

Not Found

The requested URL /downloads/ED_Runner_2.0.zip was not found on this server.



 
Since updating to 3.3 and also switching to new X56 HOTAS, EDRunner keeps crashing when it's waiting for joystick input in order to regain focus. The following message pops up and the application crashes:



My ini file is as follows:
Code:
[General]
JoystickID=1
JoyMonitor=0,1
JoyTolerance=200
EliteWindowTitle=Elite - Dangerous (CLIENT)
DoubleClickGameWindowDelay=8
ResetHeadSet={F12}


[AudioDeviceSettings]
VRAudioDevice=NA
NormalAudioDevice=NA
ManualAudioDeviceKey=!{PGUP}
NoAutomaticAudioSwitching=TRUE
OnlySwitchOnGameClosed=FALSE


[LaunchPrograms]
# E:D Market Connector=C:\Program Files (x86)\EDMarketConnector\EDMarketConnector.exe
# VoiceAttack=C:\Program Files (x86)\VoiceAttack\VoiceAttack.exe -reverseprofilepriority


[Voice]
Enable Speech=True
Voice Rate=0
ED Start=E D runner starting
VR Audio Active=<VRAudioDevice> active
Normal Audio Active=<NormalAudioDevice> active
Lost focus=Lost Elite focus. Monitoring joystick <JoyID>
Game found=Game found. Activating
Game refocused=Refocusing
Game not found=Game not found. Idling
Reset Headset=Look straight ahead


[Priority]
EliteDangerous64.exe=HIGH
WatchDog64.exe=LOW


[Extras]
ExtraJoyDebugValues=FALSE
WinTitleMatchMode=1
LaunchProgramsWhenGameFound=TRUE
CloseLaunchPrograms=FALSE
DoubleClickGameWindowDelayTune=FALSE
MonitorDelay=100
The joystick tester confirms the values and all looks fine.

Also, any chance LaunchPrograms section could support passing parameters? The commented out one for VoiceAttack above doesn't work. Thanks.
 
Top Bottom