; Während 2min wird geprüft ob 3CXPhone gestartet ist, falls ja wird der Status auf "Verfügbar" gesetzt.
; Leider ist der Wert für Status "Verfügbar" nicht bei allen Usern der gleiche, sodass dieser erst aus
; den verfügbaren Profile ermittelt werden muss.

#include <AutoItConstants.au3>
#include <StringConstants.au3>
;#include <MsgBoxConstants.au3>															;wird nur zum Testen gebraucht

ThreeCXSetAvailable()																	;eine "3" beim Namen wird offenbar nicht akzeptiert

Func ThreeCXSetAvailable()
   Local $sEnvVar = EnvGet("PROGRAMDATA")
   Local $sFilePath = $sEnvVar & '\3CXPhone for Windows\PhoneApp\CallTriggerCmd.exe'	;einfache Hochkomma, die doppelten braucht es für den Command-Aufruf
   Local $sArguments = ' --set-active-profile='											;die Status-Nr. wird erst unter ermittelt

   If FileExists($sFilePath) = 0 Then Exit

   Local $iPID = WinWait("3CX", "", 120)												;max. 2min warten bis 3CXPhone beim Windows-Login bereit ist
   If IsHWnd( $iPID ) = 0 Then Exit

   $iPID = Run('"' & $sFilePath & '"' & " -p", "" , @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)	;die verfügbaren Stati abfragen
   If @error Then Exit

   Local $sOutput = ""
   While 1
	  $sOutput &= StdoutRead($iPID)														;StdOut auslesen und Text zusammen fügen
	  If @error Then ExitLoop
   WEnd

   $sOutput = StringStripWS($sOutput, $STR_STRIPALL)									;mal das Zugemüse entfernen
   Local $iPosition = StringInStr($sOutput, 'Available')								;Position von Available suchen, davor steht der notwendige Wert
   if $iPosition = 0 Then Exit

   Local $value = StringMid($sOutput, $iPosition - 4, 4 )								;unklar wieviele Digits der Wert aufweist, Annahme 1...4
   If StringIsDigit($value) = 0 Then $value = StringRight($value, 3)					;das folgende Vorgehen ist nicht schön, aber verständlich
   If StringIsDigit($value) = 0 Then $value = StringRight($value, 2)					;und einfacher als mit umständlichen Array-Funktionen...
   If StringIsDigit($value) = 0 Then $value = StringRight($value, 1)

   If StringIsDigit($value) = 1 Then
;	  MsgBox ( $MB_OK, $value, $sOutput )
	  $iPID = Run('"' & $sFilePath & '"' & $sArguments & $value, "" , @SW_MINIMIZE)		;CallTriggerCmd.exe mit dem entsprechenden Statuswert aufrufen
   EndIf
EndFunc