"Arnie" never moved anything. 
It doesn't "move" anything, all it does is send a WM_CLOSE message to the process, (which worked 100% of the time for D4 here), and if that failed it went to the tray icon, opened it's menu and chose the last item, (normally Exit/Quit - that had a ~95% success rate on the other two programs). ie. You use it to end the processes instead of taskkill.
I asked you before about how the various scripts were different, does the AHK script in reply 1 translate into AutoIt or is that what you have been trying?
Tested on XP x86, Win7 x64 and Win8 x86, (medium, high and low spec hardware respectively).
CLI use only.
CleanTray: Clears orphaned icons from Notification Area
CleanTray.exe [/debug] [/once] [/timer] [/mensa] [/nuke]
Where: /debug - outputs debug information to the console
/once - only runs over the Notification Area once (only valid for default method)
/timer - displays time taken at the end
/mensa - only moves mouse to orphaned icons
/nuke - blitzes the tray using system calls (icon positions will be lost)
/pilgrim - adds a 1ms delay between mouse movements
Default method is to traverse the tray using the mouse.
The default method is the slowest if there is more than one icon to remove and /mensa has priority over /nuke if you happen to enter both on the command line.
#NoTrayIcon
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Fileversion=0.2.0.20
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include <_SysTray.au3>
#include <_OsVersionInfo.au3>
Global $debug = False, $once = False, $timer = False, $method = 0, $pilgrim = False
If $CmdLine[0] > 0 Then
For $i = 1 To $CmdLine[0]
Switch StringLower(StringStripWS($CmdLine[$i], 8))
Case "/debug", "/d"
$debug = True
Case "/once", "/o"
$once = True
Case "/timer", "/t"
$timer = True
Case "/mensa", "/m"
$method = 1
Case "/nuke", "/n"
If $method <> 1 Then $method = 2
Case "/pilgrim", "/p"
$pilgrim = True
Case Else
_DisplayUsage()
Exit
EndSwitch
Next
EndIf
Global $posTray = WinGetPos(_FindTrayToolbarWindow()) ; find the tray
If $method <> 2 Then
$oldPos = MouseGetPos() ; save mouse position
MouseMove($posTray[0], $posTray[1], 0) ; move mouse to tray
WinWait("[CLASS:Shell_TrayWnd]", "", 5) ; wait for the tray to open if hidden
EndIf
If $debug Then
ConsoleWrite("Desktop Width: " & @DesktopWidth & @CRLF & "Desktop Height: " & @DesktopHeight & @CRLF)
ConsoleWrite("Notification area dimensions: " & _ArrayToString($posTray, ",") & @CRLF)
$delay = 1
Else
$delay = 0
EndIf
If $timer Then $start = TimerInit()
Switch $method
Case 0
$count = 1
$ret = 0
$j = 0
While $count <> $ret
$j += 1
$count = _SysTrayIconCount()
$ret = _SeeYouNextYear()
If $once Then ExitLoop
WEnd
Case 1
_TharHeIsGetIm()
Case 2
_NukeEmAll()
Case Else
EndSwitch
If $timer Then ConsoleWrite("Time: " & Round(TimerDiff($start) / 1000, 2) & " seconds")
If $method <> 2 Then MouseMove($oldPos[0], $oldPos[1], 0) ; move mouse back where it came from
Exit
Func _DisplayUsage()
Local $data = "CleanTray: Clears orphaned icons from Notification Area" & @CRLF & @CRLF & _
"CleanTray.exe [/debug] [/once] [/timer] [/mensa] [/nuke]" & @CRLF & _
"Where: /debug - outputs debug information to the console" & @CRLF & _
" /once - only runs over the Notification Area once" & @CRLF & _
" (only valid for default method)" & @CRLF & _
" /timer - displays time taken at the end" & @CRLF & _
" /mensa - only moves mouse to orphaned icons" & @CRLF & _
" /nuke - blitzes the tray using system calls" & @CRLF & _
" (icon positions will be lost)" & @CRLF & _
"Default method is to traverse the tray using the mouse." & @CRLF
ConsoleWrite($data)
EndFunc ;==>_DisplayUsage
Func _SeeYouNextYear()
If $posTray[0] >= @DesktopWidth Then $posTray[0] = @DesktopWidth - $posTray[2]
If $posTray[1] >= @DesktopHeight Then $posTray[1] = @DesktopHeight - $posTray[3]
If $posTray[0] < 0 Then $posTray[0] = 0
If $posTray[1] < 0 Then $posTray[1] = 0
Local $y = $posTray[1]
While $y < $posTray[3] + $posTray[1]
Local $x = $posTray[0]
While $x < $posTray[2] + $posTray[0]
MouseMove($x, $y, $delay)
If $pilgrim Then Sleep(1)
If $debug Then ConsoleWrite($x & ',' & $y & @CRLF)
$x += 12
WEnd
$y += 12
WEnd
Return _SysTrayIconCount()
EndFunc ;==>_SeeYouNextYear
Func _TharHeIsGetIm()
$flag = False
Local $count = _SysTrayIconCount() ; get number of icons in tray
For $i = $count - 1 To 0 Step -1 ; step backwards through the list
Local $handle = _SysTrayIconHandle($i) ; get handle of the icon
Local $pid = WinGetProcess($handle) ; get process ID for ithe handle
If $pid = -1 Then ; if no process then
Local $iPos = _SysTrayIconPos($i) ; get icon position
MouseMove($iPos[0], $iPos[1], $delay) ; move mouse there
If $debug Then ConsoleWrite($iPos[0] & ',' & $iPos[1] & @CRLF)
If _SysTrayIconCount() < $count Then ; if number of icons has reduced, set flag and exit for/next loop
$flag = True
ExitLoop
EndIf
EndIf
Next
If $flag Then _TharHeIsGetIm() ; if flag set call func again (a little pseudo-recursion)
MouseMove($oldPos[0], $oldPos[1], 0) ; move mouse back where it came from
EndFunc ;==>_TharHeIsGetIm
Func _NukeEmAll()
$count = _SysTrayIconCount()
For $i = $count - 1 To 0 Step -1
$handle = _SysTrayIconHandle($i)
$pid = WinGetProcess($handle)
If $pid = -1 Then _SysTrayIconRemove($i)
Next
If _OsVersionTest($VER_GREATER_EQUAL, 6, 1) Then
$countwin7 = _SysTrayIconCount(2)
For $i = $countwin7 - 1 To 0 Step -1
$handle = _SysTrayIconHandle($i, 2)
$pid = WinGetProcess($handle)
If $pid = -1 Then _SysTrayIconRemove($i, 2)
Next
EndIf
EndFunc ;==>_NukeEmAll