Func _GAPI_GetServerSession()
Local $GAPI_WTS_SESSION_INFO = 'dword SessionId;ptr WinStationName;uint State'
Local $Offset = 0,$tInfo, $Temp, $Bufer, $DLL
Local $Ret = DllCall('wtsapi32.dll', 'int', 'WTSEnumerateSessionsW', 'ptr', 0, 'dword', 0, 'dword', 1, 'ptr*', 0, 'dword*', 0)
if @error Then Return -1
Local $Return[$Ret[5]+1][5]
$Return[0][0] = $Ret[5]
For $i = 1 To $Ret[5]
$tInfo = DllStructCreate($GAPI_WTS_SESSION_INFO, $Ret[4] + $Offset)
$Bufer = ''
$Offset += DllStructGetSize($tInfo)
$Return[$i][0] = DllStructGetData($tInfo, 'SessionId')
$Return[$i][1] = DllStructGetData(DllStructCreate('wchar[1024]', DllStructGetData($tInfo, 'WinStationName')), 1)
$Return[$i][2] = DllStructGetData($tInfo, 'State')
$Dll = DllCall("Wtsapi32.dll", "Bool","WTSQuerySessionInformation","Dword",0 ,"Dword",$Return[$i][0],"Dword",5, "str*", $Bufer, "Dword*",1024)
$Return[$i][3] = $Dll[4]
$Dll = DllCall("Wtsapi32.dll", "Bool","WTSQuerySessionInformation","Dword",0 ,"Dword",$Return[$i][0],"Dword",10, "str*", $Bufer, "Dword*",1024)
$Return[$i][4] = $Dll[4]
Next
DllCall('wtsapi32.dll', 'none', 'WTSFreeMemory', 'ptr', $Ret[4])
Return $Return
EndFunc